KubeSphere闭源后流水线构建与镜像拉取问题解决方案
问题背景
近期KubeSphere从开源转为闭源后,部分用户反馈以下问题:
- 流水线构建时Pod持续处于Creating状态
- 其他Pod卡在镜像拉取步骤(ImagePullBackOff)
结合闭源转型背景,问题核心源于镜像仓库配置变更及私有仓库适配问题。本文提供系统性解决方案,涵盖配置调整、风险规避及操作实践。
问题根源分析
1. 镜像仓库配置失效
KubeSphere闭源后,默认公共镜像仓库服务被移除,需手动配置私有仓库(如Harbor、阿里云镜像服务)。若未及时调整,将导致Pod无法拉取镜像。
2. Docker配置兼容性问题
原daemon.json
配置中registry-mirrors
字段指向的公共镜像源(如阿里云)在闭源后失效,需替换为可靠的私有仓库地址。示例配置如下:
{
"registry-mirrors": [
"http://k8s-harbor:30002",
"https://docker.1ms.run",
"https://docker.m.daocloud.io",
"https://docker.1panel.top"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {"max-size": "100m"},
"storage-driver": "overlay2"
}
操作步骤:
- 修改
/etc/docker/daemon.json
文件,替换为上述配置。 - 执行以下命令重载服务:
参考文档:Docker服务重启与容器持久化指南sudo systemctl reload docker
3. 闭源后的镜像库风险
KubeSphere官方在7月底清空了代码库、文档库及镜像库,导致部分镜像无法拉取。建议立即执行本地镜像备份,避免业务中断。
解决方案
批量备份与恢复镜像
(1) 批量打包镜像
在服务器上执行以下脚本,将所有本地镜像保存为.tar
文件:
tee save.sh <<'EOF'
#!/bin/bash
set -x
# 指定保存镜像的目录
OUTPUT_DIR="./images"
mkdir -p "$OUTPUT_DIR"
# 获取所有本地镜像列表
IMAGE_LIST=$(docker images --format "{{.Repository}}:{{.Tag}}")
# 遍历每个镜像并保存为 tar 文件
for IMAGE in $IMAGE_LIST; do
IMAGE_NAME=$(echo "$IMAGE" | sed 's/.*\///' | sed 's/:/-/')
IMAGE_TAR="$OUTPUT_DIR/$IMAGE_NAME.tar"
echo "Saving $IMAGE to $IMAGE_TAR"
docker save -o "$IMAGE_TAR" "$IMAGE"
done
echo "All images saved to $OUTPUT_DIR"
EOF
(2) 批量加载镜像
在目标服务器上执行以下脚本,从.tar
文件恢复镜像:
tee load.sh <<'EOF'
#!/bin/bash
set -x
# 指定包含镜像 tar 包的目录
IMAGES_DIR="./images"
# 循环处理目录下的所有 tar 包
for TAR_FILE in ${IMAGES_DIR}/*.tar; do
# 输出正在加载的镜像文件
echo "Loading image from: ${TAR_FILE}"
# 使用 docker load 加载镜像
docker load -i ${TAR_FILE}
# 检查 docker load 的返回状态
if [ $? -eq 0 ]; then
echo "Image loaded successfully."
else
echo "Failed to load image."
fi
done
echo "All images loaded from ${IMAGES_DIR}"
EOF
脚本参考:Docker镜像批量备份与恢复实践
批量删除已有的问题pod
当前集群存在几十个因无法拉取镜像的问题镜像,当个pod删比较耗时,因此使用一个命令统一删除。
# 一键删除所有关键字的pod
kubectl get pods --all-namespaces | grep -E 'Complete|CrashLoopBackOff|Evicted|Error|ImagePullBackOff|Terminating' |awk '{print $1,$2}' | xargs -n2 kubectl delete pods --grace-period=0 --force -n
命令参考:Docker镜像批量管理工具:打包、加载、打Tag与推送脚本
总结
通过配置私有镜像仓库、备份本地镜像,可系统性解决KubeSphere闭源后的Pod创建与镜像拉取问题。建议立即执行镜像备份,并密切关注KubeSphere官方动态,确保业务连续性。如问题持续,可联系张师傅寻求帮助。
评论区