k8s自动升级脚本

时间:2022-01-06 01:07:43

该脚本实现的功能是通过输入(服务名称)以及(版本号)匹配开发给的jar包,放到指定的服务目录下后通过Dockerfile打包镜像,然后自动修改yaml文件版本号进行更新升级。弊端是在服务名相同且更长的时候,需要先升级服务名更长的,不然会将相同服务名的包全都拉过去。

使用该脚本需要满足的条件是

1,有yaml文件启动的服务

2,使用dockerfile进行打jar包的服务

各位可自行更改,最后调用的查看服务启动状态脚本也附上了

#!/bin/bash
#服务路径
servicen="/home/bxyd"
new1="/home/newfile"

#查询/home/usert下所有jar包
echo -e    "\033[32m #################################################################################################### \033[0m"
echo -e    "\033[32m #                         注意:多个服务名多字段相同的情况下先升级包名更长的                        # \033[0m"
echo -e    "\033[32m #                         注意:打包中途ctrl+C会导致dockerfile文件未注释                            # \033[0m"
echo -e    "\033[32m #################################################################################################### \033[0m"
echo -e    "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>所有已上传的包名<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
find /home/usert/ -name '*.jar'

#请输入服务名称
#read -p "请输入服务名称:" name
read -p "请输入需要升级的服务名:" name1
echo $name1 > /root/file/files5
find1=`find /home/usert/ -name $name1'*.jar'`


#移动jar包到升级目录
echo -e    "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>jar包正在拼命移动中请稍等<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
mv $find1 $new1

#获取新包名称
dl=$(ls /home/newfile/)
path=$(find  /home/bxyd/ -name  ${dl} | awk -F"/" '{print $4}')
new3="/home/bxyd/$path/$dl"
new2="/home/newfile/$dl"


#设置yaml路径变量
path4=/root/service-pod/

#判断是否有对应yaml
if [ -f  "$path$name1.yaml" ];then
    echo -e "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改服务版本号<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
else
	mv $new2 /home/usert/baaa
    echo -e "\033[31m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改dockerfile失败<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
    exit 255
fi

#获取版本号-版本号自动+1
version=`cat $path4$name1.yaml  | grep image: | awk -F "-" '{print $NF}'`
a=$((1+${version//$'\r'}))



#替换dockerfile包
if [ -f  "$new2" ];then
    sed -i "s/#ADD $dl/ADD $dl/" /$servicen/$path/Dockerfile
    sed -i "s/#$dl/$dl/" /$servicen/$path/Dockerfile
    echo -e "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改dockerfile成功<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
else
    mv $new2 /home/usert/baaa
    echo -e "\033[31m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改dockerfile失败<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
    exit 255
fi

#删除旧包
if [ -f  "$new3" ];then
    rm -rf $new3
    echo -e "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>删除旧包成功<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
else
    mv $new2 /home/usert/baaa
    echo -e "\033[31m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>删除旧包失败<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
    exit 255
fi

##移动新包
if [ -f "$new2" ]; then
    cp /$new1/$dl /$servicen/$path/
    echo -e "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>复制新包成功<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
else
    mv $new2 /home/usert/baaa
    echo -e "\033[31m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>文件不存在,已退出脚本<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
    exit 255
fi

#打包上传
cd  /$servicen/$path/
docker build  -t cr.registry.sd-1.res.sgmc.sgcc.com.cn/dwzyywzt-nari/dwzyywzt-nari:$name1-$a .
if [ $? -eq 0 ];then
    echo -e "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>docker build打包成功<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
else
    mv $new2 /home/usert/baaa
    echo -e "\033[31m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>docker build打包失败,已退出 脚本<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
    exit 255
fi
docker push  cr.registry.sd-1.res.sgmc.sgcc.com.cn/dwzyywzt-nari/dwzyywzt-nari:$name1-$a
if [ $? -eq 0 ];then
    echo -e "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>上传仓库成功<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
else
    mv $new2 /home/usert/baaa
    echo -e "\033[31m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>上传失败,已退出脚本<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
    exit 255
fi

#注释dockerfile
if [ -f  "$new3" ];then
    sed -i "s/ADD $dl/#ADD $dl/" /$servicen/$path/Dockerfile
    sed -i -z "s/$dl/#$dl/3" /$servicen/$path/Dockerfile
    echo -e "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改dockerfile成功<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
else
    mv $new2 /home/usert/baaa
    echo -e "\033[31m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改dockerfile失败<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
    exit 255
fi

echo -e     "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改版本号<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"

rm -f  /$new1/$dl

sed -i "22s/${version}/${a}/g" $path4$name1.yaml

#开始升级
kubectl -n dwzy apply -f $path4$name1.yaml
echo -e     "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>$name1升级完成<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"

sh ~/select/pod-status5.sh



#!/bin/bash
name=`cat /root/file/files5`
           echo -e "--------------------------------------------------开始检查pod启动状态------------------------------------------"
n=0
    while(($n<=100))
        do kubectl -n dwzy  get  pods | grep  ${name} 
           echo -e "---------------------------------------------------------------------------------------------------------------"
        n=$((n + 1))
    sleep 6
done