mirror of
https://github.com/kubesphere/kubekey.git
synced 2025-12-26 01:22:51 +00:00
81 lines
2.4 KiB
Go
81 lines
2.4 KiB
Go
package network
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"fmt"
|
|
kubekeyapi "github.com/pixiake/kubekey/pkg/apis/kubekey/v1alpha1"
|
|
"github.com/pixiake/kubekey/pkg/plugins/network/calico"
|
|
"github.com/pixiake/kubekey/pkg/plugins/network/flannel"
|
|
"github.com/pixiake/kubekey/pkg/util/manager"
|
|
"github.com/pixiake/kubekey/pkg/util/ssh"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
func DeployNetworkPlugin(mgr *manager.Manager) error {
|
|
mgr.Logger.Infoln("Generate etcd certs")
|
|
|
|
return mgr.RunTaskOnMasterNodes(deployNetworkPlugin, true)
|
|
}
|
|
|
|
func deployNetworkPlugin(mgr *manager.Manager, node *kubekeyapi.HostCfg, conn ssh.Connection) error {
|
|
if mgr.Runner.Index == 0 {
|
|
switch mgr.Cluster.Network.Plugin {
|
|
case "calico":
|
|
if err := deployCalico(mgr, node); err != nil {
|
|
return err
|
|
}
|
|
case "flannel":
|
|
if err := deployFlannel(mgr); err != nil {
|
|
return err
|
|
}
|
|
case "macvlan":
|
|
if err := deployMacvlan(mgr); err != nil {
|
|
return err
|
|
}
|
|
default:
|
|
return errors.New(fmt.Sprintf("This network plugin is not supported: %s", mgr.Cluster.Network.Plugin))
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func deployCalico(mgr *manager.Manager, node *kubekeyapi.HostCfg) error {
|
|
calicoFile, err := calico.GenerateCalicoFiles(mgr.Cluster)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
calicoFileBase64 := base64.StdEncoding.EncodeToString([]byte(calicoFile))
|
|
_, err1 := mgr.Runner.RunCmd(fmt.Sprintf("sudo -E /bin/sh -c \"echo %s | base64 -d > /etc/kubernetes/calico.yaml\"", calicoFileBase64))
|
|
if err1 != nil {
|
|
return errors.Wrap(errors.WithStack(err1), "failed to generate calico file")
|
|
}
|
|
|
|
_, err2 := mgr.Runner.RunCmd("/usr/local/bin/kubectl apply -f /etc/kubernetes/calico.yaml")
|
|
if err2 != nil {
|
|
return errors.Wrap(errors.WithStack(err2), "failed to deploy calico")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func deployFlannel(mgr *manager.Manager) error {
|
|
flannelFile, err := flannel.GenerateFlannelFiles(mgr.Cluster)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
flannelFileBase64 := base64.StdEncoding.EncodeToString([]byte(flannelFile))
|
|
_, err1 := mgr.Runner.RunCmd(fmt.Sprintf("sudo -E /bin/sh -c \"echo %s | base64 -d > /etc/kubernetes/flannel.yaml\"", flannelFileBase64))
|
|
if err1 != nil {
|
|
return errors.Wrap(errors.WithStack(err1), "failed to generate flannel file")
|
|
}
|
|
|
|
_, err2 := mgr.Runner.RunCmd("/usr/local/bin/kubectl apply -f /etc/kubernetes/flannel.yaml")
|
|
if err2 != nil {
|
|
return errors.Wrap(errors.WithStack(err2), "failed to deploy flannel")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func deployMacvlan(mgr *manager.Manager) error {
|
|
return nil
|
|
}
|