容器镜像搬运范例
背景
正在使用的外部容器镜像仓库告之将不能使用了,需要将集群中运行的容器迁移到内部的容器镜像仓库系统。这时我们就需要做些搬运工作。
实现要点
获取集群所运行的容器镜像
$ kubectl -n $NAMESPACE get po -o jsonpath={..image}|tr -s '[[:space:]]' '\n'|sort -ru > img.list
搬运脚本
#!/usr/bin/env bash
# 文件名: image_migrate.sh
# 功 能: 容器镜像复制迁移
dest_registry=registry.xx.cn # 目标镜像仓库
dest_project=prod-fc2-xx-sfqglb-ypt-qzzcrjkfzpt-znyy # 目标仓库项目
txtbld=$(tput bold) # Bold
bldred=${txtbld}$(tput setaf 1) # red
bldgre=${txtbld}$(tput setaf 2) # green
bldylw=${txtbld}$(tput setaf 3) # yellow
txtrst=$(tput sgr0) # Reset
err=${bldred}ERROR${txtrst}
info=${bldgre}INFO${txtrst}
warn=${bldylw}WARNING${txtrst}
usage()
{
cat << EOF
用法: $(basename $0) 文件名
EOF
}
if [ -z $1 ]; then
printf "\n$err : 需要传入镜像文件参数\n"
usage
exit 2
fi
while read image
do
printf "\n$info: [ ${image##*/} ] 镜像处理中...\n"
/usr/local/bin/skopeo copy --insecure-policy docker://${image} docker://${dest_registry}/${dest_project}/${image##*/}
done < $1
正式搬运
# ./image_migrate.sh img.list
创建镜像拉取secret
kubectl -n gitee create secret docker-registry vqiu-hub \
--docker-server=xxx \
--docker-username=xx \
--docker-password=xx
更新控制器中的镜像地址及镜像拉取凭证:
for name in $(kubectl get deploy,sts -oname)
do
kubectl get $name -oyaml | sed -e 's@旧容器镜像镜像@新容器镜像镜像@' -e 's@旧secret@新secret@' | kubectl apply -f -
done
操作完毕后使用以下命令来查看当前Pod使用的镜像地址
$ kubectl get pods -o jsonpath="{.items[*].spec.containers[*].image}" |tr -s '[[:space:]]' '\n' |sort |uniq -c