add checksum

This commit is contained in:
pixiake 2020-05-15 15:48:07 +08:00
parent d86b1c8153
commit bd291e2cc8
7 changed files with 121 additions and 87 deletions

View File

@ -13,18 +13,18 @@ const (
DefaultNetworkPlugin = "calico"
DefaultPodsCIDR = "10.233.64.0/18"
DefaultServiceCIDR = "10.233.0.0/18"
DefaultKubeImageRepo = "kubekey"
DefaultKubeImageRepo = "kubesphere"
DefaultClusterName = "cluster.local"
DefaultArch = "amd64"
DefaultHostName = "allinone"
DefaultEtcdRepo = "kubesphere"
DefaultEtcdVersion = "v3.3.12"
DefaultEtcdPort = "2379"
DefaultKubeVersion = "v1.17.4"
DefaultKubeVersion = "v1.17.5"
DefaultCalicoVersion = "v3.13.0"
DefaultFlannelVersion = "v0.11.0"
DefaultCniVersion = "v0.8.2"
DefaultHelmVersion = "v3.1.2"
DefaultCniVersion = "v0.8.6"
DefaultHelmVersion = "v3.2.1"
ETCDRole = "etcd"
MasterRole = "master"
WorkerRole = "worker"

View File

@ -17,10 +17,6 @@ import (
)
var (
//joinMasterCmd = ""
//joinWorkerCmd = ""
//clusterInfo = ""
//kubeConfig = ""
clusterIsExist = false
clusterStatus = map[string]string{
"version": "",
@ -147,12 +143,6 @@ func addWorkerLabel(mgr *manager.Manager, node *kubekeyapi.HostCfg) error {
return nil
}
//func GetJoinNodesCmd(mgr *manager.Manager) error {
// mgr.Logger.Infoln("Get join nodes cmd")
//
// return mgr.RunTaskOnClientNode(getJoinNodesCmd, false)
//}
func getJoinNodesCmd(mgr *manager.Manager) error {
if err := getJoinCmd(mgr); err != nil {
return err

View File

@ -19,33 +19,30 @@ func SyncKubeBinaries(mgr *manager.Manager) error {
}
func syncKubeBinaries(mgr *manager.Manager, node *kubekeyapi.HostCfg, conn ssh.Connection) error {
output, _ := mgr.Runner.RunCmd("/usr/local/bin/kubelet --version")
if !strings.Contains(output, mgr.Cluster.Kubernetes.Version) {
if !strings.Contains(clusterStatus["clusterInfo"], node.Name) && !strings.Contains(clusterStatus["clusterInfo"], node.InternalAddress) {
currentDir, err1 := filepath.Abs(filepath.Dir(os.Args[0]))
if err1 != nil {
return errors.Wrap(err1, "Failed to get current dir")
}
filepath := fmt.Sprintf("%s/%s", currentDir, kubekeyapi.DefaultPreDir)
filepath := fmt.Sprintf("%s/%s/%s", currentDir, kubekeyapi.DefaultPreDir, mgr.Cluster.Kubernetes.Version)
kubeadm := fmt.Sprintf("kubeadm-%s", mgr.Cluster.Kubernetes.Version)
kubelet := fmt.Sprintf("kubelet-%s", mgr.Cluster.Kubernetes.Version)
kubectl := fmt.Sprintf("kubectl-%s", mgr.Cluster.Kubernetes.Version)
helm := fmt.Sprintf("helm-%s", kubekeyapi.DefaultHelmVersion)
kubeadm := fmt.Sprintf("kubeadm")
kubelet := fmt.Sprintf("kubelet")
kubectl := fmt.Sprintf("kubectl")
helm := fmt.Sprintf("helm")
kubecni := fmt.Sprintf("cni-plugins-linux-%s-%s.tgz", kubekeyapi.DefaultArch, kubekeyapi.DefaultCniVersion)
binaryList := []string{kubeadm, kubelet, kubectl, helm, kubecni}
cmdlist := []string{}
for _, binary := range binaryList {
err2 := mgr.Runner.ScpFile(fmt.Sprintf("%s/%s", filepath, binary), fmt.Sprintf("%s/%s", "/tmp/kubekey", binary))
if err2 != nil {
return errors.Wrap(errors.WithStack(err2), fmt.Sprintf("Failed to sync binaries"))
}
}
cmdlist := []string{}
for _, binary := range binaryList {
if strings.Contains(binary, "cni-plugins-linux") {
cmdlist = append(cmdlist, fmt.Sprintf("mkdir -p /opt/cni/bin && tar -zxf %s/%s -C /opt/cni/bin", "/tmp/kubekey", binary))
} else {
@ -66,6 +63,7 @@ func syncKubeBinaries(mgr *manager.Manager, node *kubekeyapi.HostCfg, conn ssh.C
}
func setKubelet(mgr *manager.Manager) error {
kubeletService, err1 := tmpl.GenerateKubeletService(mgr.Cluster)
if err1 != nil {
return err1

View File

@ -3,77 +3,59 @@ package preinstall
import (
"fmt"
kubekeyapi "github.com/kubesphere/kubekey/pkg/apis/kubekey/v1alpha1"
"github.com/kubesphere/kubekey/pkg/files"
"github.com/kubesphere/kubekey/pkg/util"
"github.com/pkg/errors"
log "github.com/sirupsen/logrus"
"os"
"os/exec"
"path/filepath"
"strings"
)
func FilesDownloadHttp(cfg *kubekeyapi.K2ClusterSpec, filepath string, logger *log.Logger) error {
var kubeVersion string
if cfg.Kubernetes.Version == "" {
kubeVersion = kubekeyapi.DefaultKubeVersion
} else {
kubeVersion = cfg.Kubernetes.Version
}
func FilesDownloadHttp(cfg *kubekeyapi.K2ClusterSpec, filepath, version string, logger *log.Logger) error {
kubeadmUrl := fmt.Sprintf("https://kubernetes-release.pek3b.qingstor.com/release/%s/bin/linux/%s/kubeadm", kubeVersion, kubekeyapi.DefaultArch)
kubeletUrl := fmt.Sprintf("https://kubernetes-release.pek3b.qingstor.com/release/%s/bin/linux/%s/kubelet", kubeVersion, kubekeyapi.DefaultArch)
kubectlUrl := fmt.Sprintf("https://kubernetes-release.pek3b.qingstor.com/release/%s/bin/linux/%s/kubectl", kubeVersion, kubekeyapi.DefaultArch)
kubeCniUrl := fmt.Sprintf("https://containernetworking.pek3b.qingstor.com/plugins/releases/download/%s/cni-plugins-linux-%s-%s.tgz", kubekeyapi.DefaultCniVersion, kubekeyapi.DefaultArch, kubekeyapi.DefaultCniVersion)
HelmUrl := fmt.Sprintf("https://kubernetes-helm.pek3b.qingstor.com/linux-amd64/%s/helm", kubekeyapi.DefaultHelmVersion)
kubeadm := files.KubeBinary{Name: "kubeadm", Arch: kubekeyapi.DefaultArch, Version: version}
kubelet := files.KubeBinary{Name: "kubelet", Arch: kubekeyapi.DefaultArch, Version: version}
kubectl := files.KubeBinary{Name: "kubectl", Arch: kubekeyapi.DefaultArch, Version: version}
kubecni := files.KubeBinary{Name: "kubecni", Arch: kubekeyapi.DefaultArch, Version: kubekeyapi.DefaultCniVersion}
helm := files.KubeBinary{Name: "helm", Arch: kubekeyapi.DefaultArch, Version: kubekeyapi.DefaultHelmVersion}
kubeadm := fmt.Sprintf("%s/kubeadm-%s", filepath, kubeVersion)
kubelet := fmt.Sprintf("%s/kubelet-%s", filepath, kubeVersion)
kubectl := fmt.Sprintf("%s/kubectl-%s", filepath, kubeVersion)
kubeCni := fmt.Sprintf("%s/cni-plugins-linux-%s-%s.tgz", filepath, kubekeyapi.DefaultArch, kubekeyapi.DefaultCniVersion)
helm := fmt.Sprintf("%s/helm-%s", filepath, kubekeyapi.DefaultHelmVersion)
kubeadm.Url = fmt.Sprintf("https://kubernetes-release.pek3b.qingstor.com/release/%s/bin/linux/%s/kubeadm", kubeadm.Version, kubeadm.Arch)
kubelet.Url = fmt.Sprintf("https://kubernetes-release.pek3b.qingstor.com/release/%s/bin/linux/%s/kubelet", kubelet.Version, kubelet.Arch)
kubectl.Url = fmt.Sprintf("https://kubernetes-release.pek3b.qingstor.com/release/%s/bin/linux/%s/kubectl", kubectl.Version, kubectl.Arch)
kubecni.Url = fmt.Sprintf("https://containernetworking.pek3b.qingstor.com/plugins/releases/download/%s/cni-plugins-linux-%s-%s.tgz", kubecni.Version, kubecni.Arch, kubecni.Version)
helm.Url = fmt.Sprintf("https://kubernetes-helm.pek3b.qingstor.com/linux-%s/%s/helm", helm.Arch, helm.Version)
getKubeadmCmd := fmt.Sprintf("curl -o %s %s", kubeadm, kubeadmUrl)
getKubeletCmd := fmt.Sprintf("curl -o %s %s", kubelet, kubeletUrl)
getKubectlCmd := fmt.Sprintf("curl -o %s %s", kubectl, kubectlUrl)
getKubeCniCmd := fmt.Sprintf("curl -o %s %s", kubeCni, kubeCniUrl)
getHelmCmd := fmt.Sprintf("curl -o %s %s", helm, HelmUrl)
kubeadm.Path = fmt.Sprintf("%s/kubeadm", filepath)
kubelet.Path = fmt.Sprintf("%s/kubelet", filepath)
kubectl.Path = fmt.Sprintf("%s/kubectl", filepath)
kubecni.Path = fmt.Sprintf("%s/cni-plugins-linux-%s-%s.tgz", filepath, kubekeyapi.DefaultArch, kubekeyapi.DefaultCniVersion)
helm.Path = fmt.Sprintf("%s/helm", filepath)
logger.Info("Downloading Kubeadm ...")
if util.IsExist(kubeadm) == false {
if out, err := exec.Command("/bin/sh", "-c", getKubeadmCmd).CombinedOutput(); err != nil {
fmt.Println(string(out))
return errors.Wrap(err, "Failed to download kubeadm binary")
}
}
kubeadm.GetCmd = fmt.Sprintf("curl -o %s %s", kubeadm.Path, kubeadm.Url)
kubelet.GetCmd = fmt.Sprintf("curl -o %s %s", kubelet.Path, kubelet.Url)
kubectl.GetCmd = fmt.Sprintf("curl -o %s %s", kubectl.Path, kubectl.Url)
kubecni.GetCmd = fmt.Sprintf("curl -o %s %s", kubecni.Path, kubecni.Url)
helm.GetCmd = fmt.Sprintf("curl -o %s %s", helm.Path, helm.Url)
logger.Info("Downloading Kubelet ...")
if util.IsExist(kubelet) == false {
if out, err := exec.Command("/bin/sh", "-c", getKubeletCmd).CombinedOutput(); err != nil {
fmt.Println(string(out))
return errors.Wrap(err, "Failed to download kubelet binary")
}
}
binaries := []files.KubeBinary{kubeadm, kubelet, kubectl, kubecni, helm}
logger.Info("Downloading Kubectl ...")
if util.IsExist(kubectl) == false {
if out, err := exec.Command("/bin/sh", "-c", getKubectlCmd).CombinedOutput(); err != nil {
fmt.Println(string(out))
return errors.Wrap(err, "Failed to download kubectl binary")
}
}
for _, binary := range binaries {
logger.Info(fmt.Sprintf("Downloading %s ...", binary.Name))
if util.IsExist(binary.Path) == false {
if out, err := exec.Command("/bin/sh", "-c", binary.GetCmd).CombinedOutput(); err != nil {
fmt.Println(string(out))
return errors.Wrap(err, "Failed to download kubeadm binary")
}
logger.Info("Downloading KubeCni ...")
if util.IsExist(kubeCni) == false {
if out, err := exec.Command("/bin/sh", "-c", getKubeCniCmd).CombinedOutput(); err != nil {
fmt.Println(string(out))
return errors.Wrap(err, "Faild to download kubecni")
}
}
logger.Info("Downloading Helm ...")
if util.IsExist(helm) == false {
if out, err := exec.Command("/bin/sh", "-c", getHelmCmd).CombinedOutput(); err != nil {
fmt.Println(string(out))
return errors.Wrap(err, "Failed to download helm binary")
out, err := exec.Command("/bin/sh", "-c", fmt.Sprintf("sha256sum %s", binary.Path)).CombinedOutput()
if err != nil {
return errors.Wrap(err, fmt.Sprintf("Failed to check SHA256 of %s", binary.Path))
}
if !strings.Contains(strings.TrimSpace(string(out)), binary.GetSha256()) {
return errors.New(fmt.Sprintf("SHA256 no match. %s not in %s", binary.GetSha256(), strings.TrimSpace(string(out))))
}
}
}
@ -88,12 +70,19 @@ func Prepare(cfg *kubekeyapi.K2ClusterSpec, logger *log.Logger) error {
return errors.Wrap(err, "Faild to get current dir")
}
filepath := fmt.Sprintf("%s/%s", currentDir, kubekeyapi.DefaultPreDir)
var kubeVersion string
if cfg.Kubernetes.Version == "" {
kubeVersion = kubekeyapi.DefaultKubeVersion
} else {
kubeVersion = cfg.Kubernetes.Version
}
filepath := fmt.Sprintf("%s/%s/%s", currentDir, kubekeyapi.DefaultPreDir, kubeVersion)
if err := util.CreateDir(filepath); err != nil {
return errors.Wrap(err, "Failed to create download target dir")
}
if err := FilesDownloadHttp(cfg, filepath, logger); err != nil {
if err := FilesDownloadHttp(cfg, filepath, kubeVersion, logger); err != nil {
return err
}
return nil

59
pkg/files/file.go Normal file
View File

@ -0,0 +1,59 @@
package files
const (
kubeadm = "kubeadm"
kubelet = "kubelet"
kubectl = "kubectl"
kubecni = "kubecni"
helm = "helm"
amd64 = "amd64"
arm64 = "arm64"
)
type KubeBinary struct {
Name string
Arch string
Version string
Url string
Path string
GetCmd string
}
var (
fileSha256 = map[string]map[string]map[string]string{
kubeadm: {
amd64: {
"v1.17.4": "3cdcffcf8a1660241a045cfdfed3ebbf7f7c6a0840f008e2b049b533bca5bb8c",
"v1.17.5": "9bd2fd1118b3d07d12e2a806c04bf34d99e79886c5318ddc003ba38f30da390c",
},
},
kubelet: {
amd64: {
"v1.17.4": "f3a427ddf610b568db60c8d47565041901220e1bbe257614b61bb4c76801d765",
"v1.17.5": "c5fbfa83444bdeefb51934c29f0b4b7ffc43ce5a98d7f957d8a11e3440055383",
},
},
kubectl: {
amd64: {
"v1.17.4": "465b2d2bd7512b173860c6907d8127ee76a19a385aa7865608e57a5eebe23597",
"v1.17.5": "03cd1fa19f90d38005148793efdb17a9b58d01dedea641a8496b9cf228db3ab4",
},
},
helm: {
amd64: {
"v3.2.1": "98c57f2b86493dd36ebaab98990e6d5117510f5efbf21c3344c3bdc91a4f947c",
},
},
kubecni: {
amd64: {
"v0.8.2": "21283754ffb953329388b5a3c52cef7d656d535292bda2d86fcdda604b482f85",
"v0.8.6": "994fbfcdbb2eedcfa87e48d8edb9bb365f4e2747a7e47658482556c12fd9b2f5",
},
},
}
)
func (binary *KubeBinary) GetSha256() string {
sha256 := fileSha256[binary.Name][binary.Arch][binary.Version]
return sha256
}

View File

@ -33,13 +33,12 @@ func ExecTasks(mgr *manager.Manager) error {
createTasks := []manager.Task{
{Task: preinstall.InitOS, ErrMsg: "Failed to download kube binaries"},
{Task: docker.InstallerDocker, ErrMsg: "Failed to install docker"},
{Task: kubernetes.SyncKubeBinaries, ErrMsg: "Failed to sync kube binaries"},
{Task: images.PreDownloadImages, ErrMsg: "Failed to pre-download images"},
{Task: etcd.GenerateEtcdCerts, ErrMsg: "Failed to generate etcd certs"},
{Task: etcd.SyncEtcdCertsToMaster, ErrMsg: "Failed to sync etcd certs"},
{Task: etcd.GenerateEtcdService, ErrMsg: "Failed to start etcd cluster"},
{Task: kubernetes.GetClusterStatus, ErrMsg: "Failed to get cluster status"},
//{Task: kubernetes.ConfigureKubeletService, ErrMsg: "Failed to sync kube binaries"},
{Task: kubernetes.SyncKubeBinaries, ErrMsg: "Failed to sync kube binaries"},
{Task: kubernetes.InitKubernetesCluster, ErrMsg: "Failed to init kubernetes cluster"},
{Task: network.DeployNetworkPlugin, ErrMsg: "Failed to deploy network plugin"},
//{Task: kubernetes.GetJoinNodesCmd, ErrMsg: "Failed to get join cmd"},

View File

@ -55,9 +55,8 @@ func CheckKubeSphereStatus(mgr *manager.Manager) {
time.Sleep(10 * time.Second)
_, err := mgr.Runner.RunCmd("/usr/local/bin/kubectl exec -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') ls kubesphere/playbooks/kubesphere_running")
if err == nil {
out, err := mgr.Runner.RunCmd("/usr/local/bin/kubectl exec -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') cat kubesphere/playbooks/kubesphere_running")
_, err := mgr.Runner.RunCmd("/usr/local/bin/kubectl exec -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') cat kubesphere/playbooks/kubesphere_running")
if err == nil {
fmt.Println(out)
break
}
}