From 4fe13751ef30d05142e30e01956f64f2229fecff Mon Sep 17 00:00:00 2001 From: pixiake Date: Tue, 20 Jun 2023 17:27:46 +0800 Subject: [PATCH] Support for installing calicoctl Signed-off-by: pixiake --- cmd/kk/pkg/binaries/k3s.go | 6 ++++++ cmd/kk/pkg/binaries/kubernetes.go | 5 +++++ cmd/kk/pkg/files/file.go | 8 ++++++++ cmd/kk/pkg/k3s/tasks.go | 7 +++++-- cmd/kk/pkg/kubernetes/tasks.go | 7 +++++-- hack/sync-components.sh | 21 ++++++++++++++++++++- version/components.json | 10 +++++++++- 7 files changed, 58 insertions(+), 6 deletions(-) diff --git a/cmd/kk/pkg/binaries/k3s.go b/cmd/kk/pkg/binaries/k3s.go index e0826e4c..0b6e9325 100644 --- a/cmd/kk/pkg/binaries/k3s.go +++ b/cmd/kk/pkg/binaries/k3s.go @@ -37,8 +37,14 @@ func K3sFilesDownloadHTTP(kubeConf *common.KubeConf, path, version, arch string, kubecni := files.NewKubeBinary("kubecni", arch, kubekeyapiv1alpha2.DefaultCniVersion, path, kubeConf.Arg.DownloadCommand) helm := files.NewKubeBinary("helm", arch, kubekeyapiv1alpha2.DefaultHelmVersion, path, kubeConf.Arg.DownloadCommand) k3s := files.NewKubeBinary("k3s", arch, version, path, kubeConf.Arg.DownloadCommand) + calicoctl := files.NewKubeBinary("calicoctl", arch, kubekeyapiv1alpha2.DefaultCalicoVersion, path, kubeConf.Arg.DownloadCommand) binaries := []*files.KubeBinary{k3s, helm, kubecni, etcd} + + if kubeConf.Cluster.Network.Plugin == "calico" { + binaries = append(binaries, calicoctl) + } + binariesMap := make(map[string]*files.KubeBinary) for _, binary := range binaries { if err := binary.CreateBaseDir(); err != nil { diff --git a/cmd/kk/pkg/binaries/kubernetes.go b/cmd/kk/pkg/binaries/kubernetes.go index 1b5e5a96..730a4db3 100644 --- a/cmd/kk/pkg/binaries/kubernetes.go +++ b/cmd/kk/pkg/binaries/kubernetes.go @@ -43,6 +43,7 @@ func K8sFilesDownloadHTTP(kubeConf *common.KubeConf, path, version, arch string, crictl := files.NewKubeBinary("crictl", arch, kubekeyapiv1alpha2.DefaultCrictlVersion, path, kubeConf.Arg.DownloadCommand) containerd := files.NewKubeBinary("containerd", arch, kubekeyapiv1alpha2.DefaultContainerdVersion, path, kubeConf.Arg.DownloadCommand) runc := files.NewKubeBinary("runc", arch, kubekeyapiv1alpha2.DefaultRuncVersion, path, kubeConf.Arg.DownloadCommand) + calicoctl := files.NewKubeBinary("calicoctl", arch, kubekeyapiv1alpha2.DefaultCalicoVersion, path, kubeConf.Arg.DownloadCommand) binaries := []*files.KubeBinary{kubeadm, kubelet, kubectl, helm, kubecni, crictl, etcd} @@ -52,6 +53,10 @@ func K8sFilesDownloadHTTP(kubeConf *common.KubeConf, path, version, arch string, binaries = append(binaries, containerd, runc) } + if kubeConf.Cluster.Network.Plugin == "calico" { + binaries = append(binaries, calicoctl) + } + binariesMap := make(map[string]*files.KubeBinary) for _, binary := range binaries { if err := binary.CreateBaseDir(); err != nil { diff --git a/cmd/kk/pkg/files/file.go b/cmd/kk/pkg/files/file.go index 8485a0ec..fb255692 100644 --- a/cmd/kk/pkg/files/file.go +++ b/cmd/kk/pkg/files/file.go @@ -51,6 +51,7 @@ const ( compose = "compose" containerd = "containerd" runc = "runc" + calicoctl = "calicoctl" ) // KubeBinary Type field const @@ -209,6 +210,13 @@ func NewKubeBinary(name, arch, version, prePath string, getCmd func(path, url st if component.Zone == "cn" { component.Url = fmt.Sprintf("https://kubernetes-release.pek3b.qingstor.com/opencontainers/runc/releases/download/%s/runc.%s", version, arch) } + case calicoctl: + component.Type = CNI + component.FileName = calicoctl + component.Url = fmt.Sprintf("https://github.com/projectcalico/calico/releases/download/%s/calicoctl-linux-%s", version, arch) + if component.Zone == "cn" { + component.Url = fmt.Sprintf("https://kubernetes-release.pek3b.qingstor.com/projectcalico/calico/releases/download/%s/calicoctl-linux-%s", version, arch) + } default: logger.Log.Fatalf("unsupported kube binaries %s", name) } diff --git a/cmd/kk/pkg/k3s/tasks.go b/cmd/kk/pkg/k3s/tasks.go index c3a4742a..9b68c81d 100644 --- a/cmd/kk/pkg/k3s/tasks.go +++ b/cmd/kk/pkg/k3s/tasks.go @@ -97,19 +97,22 @@ func (s *SyncKubeBinary) Execute(runtime connector.Runtime) error { } binariesMap := binariesMapObj.(map[string]*files.KubeBinary) - if err := SyncKubeBinaries(runtime, binariesMap); err != nil { + if err := SyncKubeBinaries(s, runtime, binariesMap); err != nil { return err } return nil } // SyncKubeBinaries is used to sync kubernetes' binaries to each node. -func SyncKubeBinaries(runtime connector.Runtime, binariesMap map[string]*files.KubeBinary) error { +func SyncKubeBinaries(s *SyncKubeBinary, runtime connector.Runtime, binariesMap map[string]*files.KubeBinary) error { if err := utils.ResetTmpDir(runtime); err != nil { return err } binaryList := []string{"k3s", "helm", "kubecni"} + if s.KubeConf.Cluster.Network.Plugin == "calico" { + binaryList = append(binaryList, "calicoctl") + } for _, name := range binaryList { binary, ok := binariesMap[name] if !ok { diff --git a/cmd/kk/pkg/kubernetes/tasks.go b/cmd/kk/pkg/kubernetes/tasks.go index 4f83aacf..a924eac2 100644 --- a/cmd/kk/pkg/kubernetes/tasks.go +++ b/cmd/kk/pkg/kubernetes/tasks.go @@ -108,19 +108,22 @@ func (i *SyncKubeBinary) Execute(runtime connector.Runtime) error { } binariesMap := binariesMapObj.(map[string]*files.KubeBinary) - if err := SyncKubeBinaries(runtime, binariesMap); err != nil { + if err := SyncKubeBinaries(i, runtime, binariesMap); err != nil { return err } return nil } // SyncKubeBinaries is used to sync kubernetes' binaries to each node. -func SyncKubeBinaries(runtime connector.Runtime, binariesMap map[string]*files.KubeBinary) error { +func SyncKubeBinaries(i *SyncKubeBinary, runtime connector.Runtime, binariesMap map[string]*files.KubeBinary) error { if err := utils.ResetTmpDir(runtime); err != nil { return err } binaryList := []string{"kubeadm", "kubelet", "kubectl", "helm", "kubecni"} + if i.KubeConf.Cluster.Network.Plugin == "calico" { + binaryList = append(binaryList, "calicoctl") + } for _, name := range binaryList { binary, ok := binariesMap[name] if !ok { diff --git a/hack/sync-components.sh b/hack/sync-components.sh index 5c9bf6a9..9df4ea0b 100755 --- a/hack/sync-components.sh +++ b/hack/sync-components.sh @@ -44,6 +44,7 @@ K3S_VERSION=${K3S_VERSION} CONTAINERD_VERSION=${CONTAINERD_VERSION} RUNC_VERSION=${RUNC_VERSION} COMPOSE_VERSION=${COMPOSE_VERSION} +CALICO_VERSION=${COMPOSE_VERSION} # qsctl QSCTL_ACCESS_KEY_ID=${QSCTL_ACCESS_KEY_ID} @@ -156,7 +157,7 @@ if [ $CNI_VERSION ]; then curl -L -o binaries/cni/$CNI_VERSION/$arch/cni-plugins-linux-$arch-$CNI_VERSION.tgz \ https://github.com/containernetworking/plugins/releases/download/$CNI_VERSION/cni-plugins-linux-$arch-$CNI_VERSION.tgz - qsctl cp binaries/etcd/$CNI_VERSION/$arch/cni-plugins-linux-$arch-$CNI_VERSION.tgz \ + qsctl cp binaries/cni/$CNI_VERSION/$arch/cni-plugins-linux-$arch-$CNI_VERSION.tgz \ qs://containernetworking/plugins/releases/download/$CNI_VERSION/cni-plugins-linux-$arch-$CNI_VERSION.tgz \ -c qsctl-config.yaml done @@ -164,6 +165,24 @@ if [ $CNI_VERSION ]; then rm -rf binaries fi +# Sync CALICOCTL Binary +if [ $CALICO_VERSION ]; then + for arch in ${ARCHS[@]} + do + mkdir -p binaries/calicoctl/$CALICO_VERSION/$arch + echo "Synchronizing calicoctl-$arch" + + curl -L -o binaries/calicoctl/$CALICO_VERSION/$arch/calicoctl-linux-$arch \ + https://github.com/projectcalico/calico/releases/download/$CALICO_VERSION/calicoctl-linux-$arch + + qsctl cp binaries/calicoctl/$CALICO_VERSION/$arch/calicoctl-linux-$arch \ + qs://containernetworking/plugins/releases/download/$CNI_VERSION/calicoctl-linux-$arch \ + -c qsctl-config.yaml + done + + rm -rf binaries +fi + # Sync crictl Binary if [ $CRICTL_VERSION ]; then echo "access_key_id: $ACCESS_KEY_ID" > qsctl-config.yaml diff --git a/version/components.json b/version/components.json index 78a3a38d..d94c3557 100644 --- a/version/components.json +++ b/version/components.json @@ -977,5 +977,13 @@ "v2.7.0": "1e1e79d451d04a9c9953934b966e5698362e1262a933d098bd3874529f80fd43", "v2.7.1": "b86f161f0b6f4c6b294e62797ff20c24a39c918f4d1fd63728864a0461b3cdc7" } + }, + "calicoctl": { + "amd64": { + "v3.23.2": "3784200cdfc0106c9987df2048d219bb91147f0cc3fa365b36279ac82ea37c7a" + }, + "arm64": { + "v3.23.2": "232b992e6767c68c8c832cc7027a0d9aacb29901a9b5e8871e25baedbbb9c64c" + } } -} \ No newline at end of file +}