关于通过Xshell脚本进行yaml文件批量更新的脚本

k8s-镜像拉取策略

1、imagePullPolicy: Always 无论镜像是否更新,都pull

2、imagePullPolicy: IfNotPresent 本地不存在,去pull

3、imagePullPolicy: Never  只用本地镜像,从不pull

运行一段时间后,发现业务变动不是很频繁了,基本稳定了,没有必要扩容时每次都去服务器端拉起,这样对网络的消耗也降低

于是通过指定命名空间批量的更新deployment对象的镜像拉取策略,

在百度了xshell脚本的基本语法后,根据实际应用场景改造后,记录如下,方便后期查找

---------------------------------------------------------------------------------------------------------------------

#!/bin/bash

# 在操作时,要确认好也是所属的空间,禁止输入系统命名空间(kube-system),否则此操作将不可逆

namespaces=admin
#deploy=tomcat1

version=$(date +%Y%m%d%H%M)

print() {
    echo -e "\033[0;32m $1 \033[0m \n"
}
echo ""

read -r -p "第一步:是否要改动镜像拉取策略? y全部更新、n指定更新 [Y/N]" input

echo ""

case $input in
[yY][eE][sS] | [yY])
        echo ""
    read -r -p "第二步:是否将所有应用的镜像拉取策略都改成IfNotPresent? [Y/n] " input
        echo ""
    case $input in
    [yY][eE][sS] | [yY])

        print "------------------------镜像拉取策略更新开始-------------------------------"

        kubectl get deploy -n ${namespaces} -o yaml >update_${namespaces}_${version}.yaml

        print "1. get document arrangement success (获取编排文件成功)"

        cp update_${namespaces}_${version}.yaml update_${namespaces}_${version}_bak.yaml

        print "2. backup document arrangement success (备份编排文件成功)"

        sed -i "s/imagePullPolicy\: Always/imagePullPolicy\: IfNotPresent/g" update_${namespaces}_${version}.yaml

        print "3. replace document arrangement success (镜像拉取策略编排文件IfNotPresent替换成功)"

        kubectl apply -f update_${namespaces}_${version}.yaml
                echo ""
        print "4. update success (镜像更新策略已全部完成)"
                echo ""
        print "------------------------镜像拉取策略更新完成-------------------------------"

        echo "第三步:更新已经完成,进入监控环节"
              
                echo ""
              
        print "------------------------监控更新开始,可以通过Ctrl+C结束,退出监控-------------------------------"

        kubectl get pod -n ${namespaces} -o wide -w

        #print "----------------可以通过Ctrl+C结束,退出监控----------------------------"
        ;;

    [nN][oO] | [nN])
        print "命令终止,系统退出"
        exit 1
        ;;

    *)
        print "输入内容非法,命令终止"
        exit 1
        ;;
    esac
    ;;

    [nN][oO] | [nN])

    read -r -p "第二步:更新指定应用的镜像拉取策略为IfNotPresent? [Y/n] " input

    case $input in
    [yY][eE][sS] | [yY])
                
        echo ""

        read -r -p "第三步:请输入指定的业务名称?  " appName
        
        echo ""
    
        kubectl get deploy ${appName} -n ${namespaces}
        
        if [ $? -ne 0 ]; then
        
           echo "业务名称不存在,请通过kubectl相关命令查询后输入"
           exit 1
           
        else
                echo ""
        print "------------------------镜像拉取策略更新开始-------------------------------"

        kubectl get deploy ${appName} -n ${namespaces} -o yaml >update_${appName}_${namespaces}_${version}.yaml

        print "1. get document arrangement success (获取编排文件成功)"

        cp update_${appName}_${namespaces}_${version}.yaml update_${appName}_${namespaces}_${version}_bak.yaml

        print "2. backup document arrangement success (备份编排文件成功)"

        sed -i "s/imagePullPolicy\: Always/imagePullPolicy\: IfNotPresent/g" update_${appName}_${namespaces}_${version}.yaml

        print "3. replace document arrangement success (镜像拉取策略编排文件IfNotPresent替换成功)"

        kubectl apply -f update_${appName}_${namespaces}_${version}.yaml
        echo ""
        print "4. update success (镜像更新策略已全部完成)"
                echo ""
        print "------------------------镜像拉取策略更新完成-------------------------------"
                echo ""
        echo "第三步:更新已经完成,进入监控环节"

                echo ""
        print "------------------------监控更新开始,可以通过Ctrl+C结束,退出监控-------------------------------"

        kubectl get pod -n ${namespaces} -o wide -w

        #print "----------------可以通过Ctrl+C结束,退出监控----------------------------"
         fi
        ;;
      

    [nN][oO] | [nN])
        print "命令终止,系统退出"
        exit 1
        ;;

    *)
        print "输入内容非法,命令终止"
        exit 1
        ;;
    esac
    ;;

*)
    print "输入内容非法,命令终止"
    exit 1
    ;;
esac
 

猜你喜欢

转载自blog.csdn.net/qq_16481385/article/details/113255552