脚本批量获取及修改命名空间下容器的镜像tag
在 k8s 运维过程中,批量更新或回退版本的操作,可能只需修改 pod 中容器的镜像版本。但如果 pod 数量较多,重复的操作就可以考虑交给脚本来批量处理。
·
前言
在 k8s 运维过程中,批量更新或回退版本的操作,可能只需修改 pod 中容器的镜像版本。但如果 pod 数量较多,重复的操作就可以考虑交给脚本来批量处理。
获取tag的脚本
# !/bin/bash
#set -x
ns=$1
file=$ns-tags.txt
# 检查
if [ -z "$1" ]; then
echo -e "\033[41;30m [ERROR]: Please specify the namespace! \033[0m"
echo -e "Usage: $0 namespace"
exit 1
fi
# 获取namespace下的deployments
deployments=`kubectl get deployments.apps -n $ns |tail -n +2 |awk -F ' ' '{print $1}'`
# 循环获取各个deployment中的镜像tag
for i in $deployments; do
tag=`kubectl describe deployments.apps $i -n $ns |grep Image |awk -F ':' '{print $NF}' |awk '{print $1}'`
echo -e "$i\t:$tag" >> tmp.txt
done
# 格式化
cat tmp.txt |column -t > $file
rm -rf tmp.txt
修改tag的脚本
#!/bin/bash
set -e
plain='\033[0m'
info='\033[32m'
error='\033[41;30m'
success='\033[42;30m'
ns=$1
file=$2
# 检查
if [ -z "$1" ]|[ -z "$2" ]; then
echo -e "${error} [ERROR]: Please specify the namespace and file! ${plain}"
echo -e "Usage: $0 namespace file"
exit 1
fi
if [ ! -f "$file" ]; then
echo -e "${error} [ERROR]: File does not exist! ${plain}"
exit 1
fi
# 读取tags.txt文件
DEPLOYMENTS=()
TAGS=()
while read line; do
deployment=$(echo $line | cut -d ":" -f1)
tag=$(echo $line | cut -d ":" -f2)
DEPLOYMENTS[${#DEPLOYMENTS[*]}]=${deployment}
TAGS[${#TAGS[*]}]=${tag}
done < $file
# 修改deployment中的tag
echo -e "${info} [INFO]:Begin... ${plain}"
for ((i = 0; i < ${#DEPLOYMENTS[@]}; i++)); do
deployment=${DEPLOYMENTS[$i]}
tag=${TAGS[$i]}
echo -e "${info} DEPLOYMENT:${deployment} ${plain}"
cur_tag=`kubectl get deployment -n ${ns} ${deployment} -o jsonpath="{.spec.template.spec.containers[].image}" |awk -F ':' '{print $NF}'`
KUBE_EDITOR="sed -i '/image:/s/$cur_tag/$tag/'" kubectl edit deployments.apps -n ${ns} ${deployment}
done
echo -e "${success} [SUCCESS]:All done,please check it! ${plain}"
补充
修改 tag 的命令还可以使用 kubectl set
命令,如:
kubectl set image -n sentry deployment/sentry-nginx nginx=1.22.0-debian-11-r3-testtest
更多推荐
已为社区贡献3条内容
所有评论(0)