mirror of
https://github.com/kubesphere/kubekey.git
synced 2025-12-25 17:12:50 +00:00
341 lines
14 KiB
Bash
Executable File
341 lines
14 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Copyright 2022 The KubeSphere Authors.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
#####################################################################
|
|
#
|
|
# Usage:
|
|
# Specify the component version through environment variables.
|
|
#
|
|
# For example:
|
|
#
|
|
# KUBERNETES_VERSION=v1.25.3 bash hack/sync-components.sh
|
|
#
|
|
####################################################################
|
|
|
|
set -e
|
|
|
|
KUBERNETES_VERSION=${KUBERNETES_VERSION}
|
|
NODE_LOCAL_DNS_VERSION=${NODE_LOCAL_DNS_VERSION}
|
|
COREDNS_VERSION=${COREDNS_VERSION}
|
|
CALICO_VERSION=${CALICO_VERSION}
|
|
KUBE_OVN_VERSION=${KUBE_OVN_VERSION}
|
|
CILIUM_VERSION=${CILIUM_VERSION}
|
|
OPENEBS_VERSION=${OPENEBS_VERSION}
|
|
KUBEVIP_VERSION=${KUBEVIP_VERSION}
|
|
HAPROXY_VERSION=${HAPROXY_VERSION}
|
|
HELM_VERSION=${HELM_VERSION}
|
|
CNI_VERSION=${CNI_VERSION}
|
|
ETCD_VERSION=${ETCD_VERSION}
|
|
CRICTL_VERSION=${CRICTL_VERSION}
|
|
K3S_VERSION=${K3S_VERSION}
|
|
CONTAINERD_VERSION=${CONTAINERD_VERSION}
|
|
RUNC_VERSION=${RUNC_VERSION}
|
|
COMPOSE_VERSION=${COMPOSE_VERSION}
|
|
CALICO_VERSION=${CALICO_VERSION}
|
|
|
|
# qsctl
|
|
QSCTL_ACCESS_KEY_ID=${QSCTL_ACCESS_KEY_ID}
|
|
QSCTL_SECRET_ACCESS_KEY=${QSCTL_SECRET_ACCESS_KEY}
|
|
|
|
# docker.io
|
|
DOCKERHUB_USERNAME=${DOCKERHUB_USERNAME}
|
|
DOCKERHUB_PASSWORD=${DOCKERHUB_PASSWORD}
|
|
|
|
# registry.cn-beijing.aliyuncs.com
|
|
ALIYUNCS_USERNAME=${ALIYUNCS_USERNAME}
|
|
ALIYUNCS_PASSWORD=${ALIYUNCS_PASSWORD}
|
|
|
|
DOCKERHUB_NAMESPACE="kubesphere"
|
|
ALIYUNCS_NAMESPACE="kubesphereio"
|
|
|
|
BINARIES=("kubeadm" "kubelet" "kubectl")
|
|
ARCHS=("amd64" "arm64")
|
|
|
|
# Generate qsctl config
|
|
if [ $QSCTL_ACCESS_KEY_ID ] && [ $QSCTL_SECRET_ACCESS_KEY ];then
|
|
echo "access_key_id: $QSCTL_ACCESS_KEY_ID" > qsctl-config.yaml
|
|
echo "secret_access_key: $QSCTL_SECRET_ACCESS_KEY" >> qsctl-config.yaml
|
|
fi
|
|
|
|
# Login docker.io
|
|
if [ $DOCKERHUB_USERNAME ] && [ $DOCKERHUB_PASSWORD ];then
|
|
skopeo login docker.io -u $DOCKERHUB_USERNAME -p $DOCKERHUB_PASSWORD
|
|
fi
|
|
|
|
# Login registry.cn-beijing.aliyuncs.com
|
|
if [ $ALIYUNCS_USERNAME ] && [ $ALIYUNCS_PASSWORD ];then
|
|
skopeo login registry.cn-beijing.aliyuncs.com -u $ALIYUNCS_USERNAME -p $ALIYUNCS_PASSWORD
|
|
fi
|
|
|
|
# Sync Kubernetes Binaries and Images
|
|
if [ $KUBERNETES_VERSION ]; then
|
|
for arch in ${ARCHS[@]}
|
|
do
|
|
mkdir -p binaries/kube/$KUBERNETES_VERSION/$arch
|
|
for binary in ${BINARIES[@]}
|
|
do
|
|
echo "Synchronizing $binary-$arch"
|
|
|
|
curl -L -o binaries/kube/$KUBERNETES_VERSION/$arch/$binary \
|
|
https://storage.googleapis.com/kubernetes-release/release/$KUBERNETES_VERSION/bin/linux/$arch/$binary
|
|
|
|
qsctl cp binaries/kube/$KUBERNETES_VERSION/$arch/$binary \
|
|
qs://kubernetes-release/release/$KUBERNETES_VERSION/bin/linux/$arch/$binary \
|
|
-c qsctl-config.yaml
|
|
done
|
|
done
|
|
|
|
chmod +x binaries/kube/$KUBERNETES_VERSION/amd64/kubeadm
|
|
binaries/kube/$KUBERNETES_VERSION/amd64/kubeadm config images list | xargs -I {} skopeo sync --src docker --dest docker {} docker.io/$DOCKERHUB_NAMESPACE/${image##} --all
|
|
binaries/kube/$KUBERNETES_VERSION/amd64/kubeadm config images list | xargs -I {} skopeo sync --src docker --dest docker {} registry.cn-beijing.aliyuncs.com/$ALIYUNCS_NAMESPACE/${image##} --all
|
|
|
|
rm -rf binaries
|
|
fi
|
|
|
|
# Sync Helm Binary
|
|
if [ $HELM_VERSION ]; then
|
|
for arch in ${ARCHS[@]}
|
|
do
|
|
mkdir -p binaries/helm/$HELM_VERSION/$arch
|
|
echo "Synchronizing helm-$arch"
|
|
|
|
curl -L -o binaries/helm/$HELM_VERSION/$arch/helm-$HELM_VERSION-linux-$arch.tar.gz \
|
|
https://get.helm.sh/helm-$HELM_VERSION-linux-$arch.tar.gz
|
|
|
|
tar -zxf binaries/helm/$HELM_VERSION/$arch/helm-$HELM_VERSION-linux-$arch.tar.gz -C binaries/helm/$HELM_VERSION/$arch
|
|
|
|
qsctl cp $KUBERNETES_VERSION/$arch/linux-$arch/helm \
|
|
qs://kubernetes-helm/linux-$arch/$HELM_VERSION/helm \
|
|
-c qsctl-config.yaml
|
|
|
|
qsctl cp binaries/helm/$HELM_VERSION/$arch/helm-$HELM_VERSION-linux-$arch.tar.gz \
|
|
qs://kubernetes-helm/linux-$arch/$HELM_VERSION/helm-$HELM_VERSION-linux-$arch.tar.gz \
|
|
-c qsctl-config.yaml
|
|
done
|
|
|
|
rm -rf binaries
|
|
fi
|
|
|
|
# Sync ETCD Binary
|
|
if [ $ETCD_VERSION ]; then
|
|
for arch in ${ARCHS[@]}
|
|
do
|
|
mkdir -p binaries/etcd/$ETCD_VERSION/$arch
|
|
echo "Synchronizing etcd-$arch"
|
|
|
|
curl -L -o binaries/etcd/$ETCD_VERSION/$arch/etcd-$ETCD_VERSION-linux-$arch.tar.gz \
|
|
https://github.com/coreos/etcd/releases/download/$ETCD_VERSION/etcd-$ETCD_VERSION-linux-$arch.tar.gz
|
|
|
|
qsctl cp binaries/etcd/$ETCD_VERSION/$arch/etcd-$ETCD_VERSION-linux-$arch.tar.gz \
|
|
qs://kubernetes-release/etcd/release/download/$ETCD_VERSION/etcd-$ETCD_VERSION-linux-$arch.tar.gz \
|
|
-c qsctl-config.yaml
|
|
done
|
|
|
|
rm -rf binaries
|
|
fi
|
|
|
|
# Sync CNI Binary
|
|
if [ $CNI_VERSION ]; then
|
|
for arch in ${ARCHS[@]}
|
|
do
|
|
mkdir -p binaries/cni/$CNI_VERSION/$arch
|
|
echo "Synchronizing cni-$arch"
|
|
|
|
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/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
|
|
|
|
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://kubernetes-release/projectcalico/calico/releases/download/$CALICO_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
|
|
echo "secret_access_key: $SECRET_ACCESS_KEY" >> qsctl-config.yaml
|
|
|
|
for arch in ${ARCHS[@]}
|
|
do
|
|
mkdir -p binaries/crictl/$CRICTL_VERSION/$arch
|
|
echo "Synchronizing crictl-$arch"
|
|
|
|
curl -L -o binaries/crictl/$CRICTL_VERSION/$arch/crictl-$CRICTL_VERSION-linux-$arch.tar.gz \
|
|
https://github.com/kubernetes-sigs/cri-tools/releases/download/$CRICTL_VERSION/crictl-$CRICTL_VERSION-linux-$arch.tar.gz
|
|
|
|
qsctl cp binaries/crictl/$CRICTL_VERSION/$arch/crictl-$CRICTL_VERSION-linux-$arch.tar.gz \
|
|
qs://kubernetes-release/cri-tools/releases/download/$CRICTL_VERSION/crictl-$CRICTL_VERSION-linux-$arch.tar.gz \
|
|
-c qsctl-config.yaml
|
|
done
|
|
|
|
rm -rf binaries
|
|
fi
|
|
|
|
# Sync k3s Binary
|
|
if [ $K3S_VERSION ]; then
|
|
for arch in ${ARCHS[@]}
|
|
do
|
|
mkdir -p binaries/k3s/$K3S_VERSION/$arch
|
|
echo "Synchronizing k3s-$arch"
|
|
if [ $arch != "amd64" ]; then
|
|
curl -L -o binaries/k3s/$K3S_VERSION/$arch/k3s \
|
|
https://github.com/rancher/k3s/releases/download/$K3S_VERSION+k3s1/k3s-$arch
|
|
else
|
|
curl -L -o binaries/k3s/$K3S_VERSION/$arch/k3s \
|
|
https://github.com/rancher/k3s/releases/download/$K3S_VERSION+k3s1/k3s
|
|
fi
|
|
qsctl cp binaries/k3s/$K3S_VERSION/$arch/k3s \
|
|
qs://kubernetes-release/k3s/releases/download/$K3S_VERSION+k3s1/linux/$arch/k3s \
|
|
-c qsctl-config.yaml
|
|
done
|
|
|
|
rm -rf binaries
|
|
fi
|
|
|
|
# Sync containerd Binary
|
|
if [ $CONTAINERD_VERSION ]; then
|
|
for arch in ${ARCHS[@]}
|
|
do
|
|
mkdir -p binaries/containerd/$CONTAINERD_VERSION/$arch
|
|
echo "Synchronizing containerd-$arch"
|
|
|
|
curl -L -o binaries/containerd/$CONTAINERD_VERSION/$arch/containerd-$CONTAINERD_VERSION-linux-$arch.tar.gz \
|
|
https://github.com/containerd/containerd/releases/download/v$CONTAINERD_VERSION/containerd-$CONTAINERD_VERSION-linux-$arch.tar.gz
|
|
|
|
qsctl cp binaries/containerd/$CONTAINERD_VERSION/$arch/containerd-$CONTAINERD_VERSION-linux-$arch.tar.gz \
|
|
qs://kubernetes-releas/containerd/containerd/releases/download/v$CONTAINERD_VERSION/containerd-$CONTAINERD_VERSION-linux-$arch.tar.gz \
|
|
-c qsctl-config.yaml
|
|
done
|
|
|
|
rm -rf binaries
|
|
fi
|
|
|
|
# Sync runc Binary
|
|
if [ $RUNC_VERSION ]; then
|
|
for arch in ${ARCHS[@]}
|
|
do
|
|
mkdir -p binaries/runc/$RUNC_VERSION/$arch
|
|
echo "Synchronizing runc-$arch"
|
|
|
|
curl -L -o binaries/runc/$RUNC_VERSION/$arch/runc.$arch \
|
|
https://github.com/opencontainers/runc/releases/download/$RUNC_VERSION/runc.$arch
|
|
|
|
qsctl cp binaries/runc/$RUNC_VERSION/$arch/runc.$arch \
|
|
qs://kubernetes-release/opencontainers/runc/releases/download/$RUNC_VERSION/runc.$arch \
|
|
-c qsctl-config.yaml
|
|
done
|
|
|
|
rm -rf binaries
|
|
fi
|
|
|
|
# Sync docker-compose Binary
|
|
if [ $RUNC_VERSION ]; then
|
|
for arch in ${ARCHS[@]}
|
|
do
|
|
mkdir -p binaries/compose/$COMPOSE_VERSION/$arch
|
|
echo "Synchronizing runc-$arch"
|
|
if [ $arch == "amd64" ]; then
|
|
curl -L -o binaries/compose/$COMPOSE_VERSION/$arch/docker-compose-linux-x86_64 \
|
|
https://github.com/docker/compose/releases/download/$COMPOSE_VERSION/docker-compose-linux-x86_64
|
|
|
|
qsctl cp binaries/compose/$COMPOSE_VERSION/$arch/docker-compose-linux-x86_64 \
|
|
qs://kubernetes-release/docker/compose/releases/download/$COMPOSE_VERSION/docker-compose-linux-x86_64 \
|
|
-c qsctl-config.yaml
|
|
|
|
elif [ $arch == "arm64" ]; then
|
|
curl -L -o binaries/compose/$COMPOSE_VERSION/$arch/docker-compose-linux-aarch64 \
|
|
https://github.com/docker/compose/releases/download/$COMPOSE_VERSION/docker-compose-linux-aarch64
|
|
|
|
qsctl cp binaries/compose/$COMPOSE_VERSION/$arch/docker-compose-linux-aarch64 \
|
|
qs://kubernetes-release/docker/compose/releases/download/$COMPOSE_VERSION/docker-compose-linux-aarch64 \
|
|
-c qsctl-config.yaml
|
|
|
|
fi
|
|
done
|
|
|
|
rm -rf binaries
|
|
fi
|
|
|
|
rm -rf qsctl-config.yaml
|
|
|
|
# Sync NodeLocalDns Images
|
|
if [ $NODE_LOCAL_DNS_VERSION ]; then
|
|
skopeo sync --src docker --dest docker registry.k8s.io/dns/k8s-dns-node-cache:$NODE_LOCAL_DNS_VERSION docker.io/$DOCKERHUB_NAMESPACE/k8s-dns-node-cache:$NODE_LOCAL_DNS_VERSION --all
|
|
skopeo sync --src docker --dest docker registry.k8s.io/dns/k8s-dns-node-cache:$NODE_LOCAL_DNS_VERSION registry.cn-beijing.aliyuncs.com/$ALIYUNCS_NAMESPACE/k8s-dns-node-cache:$NODE_LOCAL_DNS_VERSION --all
|
|
fi
|
|
|
|
# Sync Coredns Images
|
|
if [ $COREDNS_VERSION ]; then
|
|
skopeo sync --src docker --dest docker docker.io/coredns/coredns:$COREDNS_VERSION registry.cn-beijing.aliyuncs.com/$ALIYUNCS_NAMESPACE/coredns:$COREDNS_VERSION --all
|
|
fi
|
|
|
|
# Sync Calico Images
|
|
if [ $CALICO_VERSION ]; then
|
|
skopeo sync --src docker --dest docker docker.io/calico/kube-controllers:$CALICO_VERSION registry.cn-beijing.aliyuncs.com/$ALIYUNCS_NAMESPACE/kube-controllers:$CALICO_VERSION --all
|
|
skopeo sync --src docker --dest docker docker.io/calico/cni:$CALICO_VERSION registry.cn-beijing.aliyuncs.com/$ALIYUNCS_NAMESPACE/cni:$CALICO_VERSION --all
|
|
skopeo sync --src docker --dest docker docker.io/calico/node:$CALICO_VERSION registry.cn-beijing.aliyuncs.com/$ALIYUNCS_NAMESPACE/node:$CALICO_VERSION --all
|
|
skopeo sync --src docker --dest docker docker.io/calico/pod2daemon-flexvol:$CALICO_VERSION registry.cn-beijing.aliyuncs.com/$ALIYUNCS_NAMESPACE/pod2daemon-flexvol:$CALICO_VERSION --all
|
|
skopeo sync --src docker --dest docker docker.io/calico/typha:$CALICO_VERSION registry.cn-beijing.aliyuncs.com/$ALIYUNCS_NAMESPACE/typha:$CALICO_VERSION --all
|
|
fi
|
|
|
|
# Sync Kube-OVN Images
|
|
if [ $KUBE_OVN_VERSION ]; then
|
|
skopeo sync --src docker --dest docker docker.io/kubeovn/kube-ovn:$KUBE_OVN_VERSION registry.cn-beijing.aliyuncs.com/$ALIYUNCS_NAMESPACE/kube-ovn:$KUBE_OVN_VERSION --all
|
|
skopeo sync --src docker --dest docker docker.io/kubeovn/vpc-nat-gateway:$KUBE_OVN_VERSION registry.cn-beijing.aliyuncs.com/$ALIYUNCS_NAMESPACE/vpc-nat-gateway:$KUBE_OVN_VERSION --all
|
|
fi
|
|
|
|
# Sync Cilium Images
|
|
if [ $CILIUM_VERSION ]; then
|
|
skopeo sync --src docker --dest docker docker.io/cilium/cilium:$CILIUM_VERSION registry.cn-beijing.aliyuncs.com/$ALIYUNCS_NAMESPACE/cilium:$CILIUM_VERSION --all
|
|
skopeo sync --src docker --dest docker docker.io/cilium/cilium-operator-generic:$CILIUM_VERSION registry.cn-beijing.aliyuncs.com/$ALIYUNCS_NAMESPACE/cilium-operator-generic:$CILIUM_VERSION --all
|
|
fi
|
|
|
|
# Sync OpenEBS Images
|
|
if [ $OPENEBS_VERSION ]; then
|
|
skopeo sync --src docker --dest docker docker.io/openebs/provisioner-localpv:$OPENEBS_VERSION registry.cn-beijing.aliyuncs.com/$ALIYUNCS_NAMESPACE/provisioner-localpv:$OPENEBS_VERSION --all
|
|
skopeo sync --src docker --dest docker docker.io/openebs/linux-utils:$OPENEBS_VERSION registry.cn-beijing.aliyuncs.com/$ALIYUNCS_NAMESPACE/linux-utils:$OPENEBS_VERSION --all
|
|
fi
|
|
|
|
# Sync Haproxy Images
|
|
if [ $HAPROXY_VERSION ]; then
|
|
skopeo sync --src docker --dest docker docker.io/library/haproxy:$HAPROXY_VERSION registry.cn-beijing.aliyuncs.com/$ALIYUNCS_NAMESPACE/haproxy:$HAPROXY_VERSION --all
|
|
fi
|
|
|
|
# Sync Kube-vip Images
|
|
if [ $KUBEVIP_VERSION ]; then
|
|
skopeo sync --src docker --dest docker docker.io/plndr/kubevip:$KUBEVIP_VERSION registry.cn-beijing.aliyuncs.com/$ALIYUNCS_NAMESPACE/kubevip:$KUBEVIP_VERSION --all
|
|
fi
|