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