脚本批量获取及修改命名空间下容器的镜像tag

前言

在 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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值