53 lines
1.8 KiB
Bash
53 lines
1.8 KiB
Bash
#!/bin/bash/
|
||
|
||
# 设置 Kubernetes 版本和镜像仓库地址
|
||
K8S_VERSION="v1.28.2"
|
||
ALIYUN_REGISTRY="registry.aliyuncs.com/google_containers" # 阿里云 Kubernetes 镜像源
|
||
FLANNEL_REPO="ghcr.io/flannel-io" # Flannel 镜像仓库
|
||
NETWORK_PLUGIN="flannel"
|
||
NETWORK_PLUGIN_VERSION="v0.26.4"
|
||
NETWORK_PLUGIN_CNI="flannel-cni-plugin"
|
||
NETWORK_PLUGIN_CNI_VERSION="v1.6.2-flannel1"
|
||
|
||
# Kubernetes 控制平面镜像列表(阿里云镜像源)
|
||
KUBERNETES_IMAGES=(
|
||
"${ALIYUN_REGISTRY}/kube-apiserver:${K8S_VERSION}"
|
||
"${ALIYUN_REGISTRY}/kube-controller-manager:${K8S_VERSION}"
|
||
"${ALIYUN_REGISTRY}/kube-scheduler:${K8S_VERSION}"
|
||
"${ALIYUN_REGISTRY}/kube-proxy:${K8S_VERSION}"
|
||
"${ALIYUN_REGISTRY}/pause:3.9"
|
||
"${ALIYUN_REGISTRY}/etcd:3.5.9-0"
|
||
"${ALIYUN_REGISTRY}/coredns:v1.10.1"
|
||
)
|
||
|
||
# 网络插件镜像(Flannel)
|
||
NETWORK_IMAGES=(
|
||
"${FLANNEL_REPO}/${NETWORK_PLUGIN}:${NETWORK_PLUGIN_VERSION}"
|
||
)
|
||
NETWORK_CNI_IMAGES=(
|
||
"${FLANNEL_REPO}/${NETWORK_PLUGIN_CNI}:${NETWORK_PLUGIN_CNI_VERSION}"
|
||
)
|
||
|
||
# 合并所有镜像
|
||
ALL_IMAGES=("${KUBERNETES_IMAGES[@]}" "${NETWORK_IMAGES[@]}" "${NETWORK_CNI_IMAGES[@]}")
|
||
|
||
# 导出本地已存在的镜像(在源节点运行)
|
||
function export_images() {
|
||
echo "==> 正在导出本地已存在的 Kubernetes v${K8S_VERSION} 镜像..."
|
||
mkdir -p /opt/k8s-images
|
||
cd /opt/k8s-images || exit
|
||
|
||
for image in "${ALL_IMAGES[@]}"; do
|
||
echo "正在检查并导出镜像:${image}"
|
||
if ctr -n=k8s.io images list --quiet | grep -q "${image}"; then
|
||
output_file="${image//\//_}.tar"
|
||
ctr -n=k8s.io images export ${output_file} ${image} --platform=linux/amd64
|
||
echo "✅ 成功导出:${output_file}"
|
||
else
|
||
echo "⚠️ 镜像 ${image} 不存在于本地,跳过!"
|
||
fi
|
||
done
|
||
}
|
||
|
||
# 根据需要选择执行导出或导入
|
||
export_images # 在源节点运行,导出镜像 |