你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
输入关键字进行搜索
搜索:
没有找到相关结果
nccloud
提醒:如基于2020年9月28日后的基础镜像制作的front镜像,已原生支持同其他服务。
背景:结合云原生补丁方案http://nccloud.yytimes.com/q_206.html ,但front服务没有预置脚本,且不支持bash命令。故为front服务特殊配置一个通版的补丁方案。
本方案支持当前资源池,指定环境类型的front补丁自动安装,支持多实例场景。
复制下述内容,保存为auto_front_patch.sh,上传脚本到安装器主机,赋予执行权限。修改前20行必须要修改的内容,如环境类型,补丁目录、补丁服务器等,这块的路径同步应用属性里的配置即可。
#!/bin/bash##注意:# 1、请修改curr_type为对应的环境类型# 2、请修改patch_server_path为对应的补丁服务器文件夹# 3、其他修改项慎动#curr_type="online"patch_server_path="patch_S0522"#获取脚本绝对路径shellfullpath=$(readlink -f "$0")#以下内容在NCC测试部环境原则上不需修改curr_svcname="front"patch_server="10.16.226.131"docker_path="/usr/share/nginx/"curr_fullname=$curr_type'-'$curr_svcname#确认是否存在计划任务grep -wq "$shellfullpath" /etc/crontab && echo "已检测到计划任务脚本,不做脚本添加。" ||echo -e "\n#未检测到计划任务脚本,将脚本添加至计划任务,默认5分钟执行1次。\n*/5 * * * * root ${shellfullpath} >> /tmp/auto_front_patch.log" >> /etc/crontab#生成初始化脚本ts=`date +"%Y-%m-%d_%H_%M"`echo "当前获取到的时间戳:$ts"echo "生成临时脚本.../tmp/tmp_$ts.sh"cat > /tmp/tmp_$ts.sh << EOFtouch /tmp/tmp_$ts.logecho "初始化系统变量.." >> /tmp/tmp_$ts.logyum install wget -yecho "export patch_server=$patch_server" >> ~/.bash_profileecho "export patch_server_path=$patch_server_path" >> ~/.bash_profileecho "export curr_svcname=$curr_svcname" >> ~/.bash_profileecho "export docker_path=$docker_path" >> ~/.bash_profilesource ~/.bash_profile >> /tmp/tmp_$ts.logmkdir -p \${docker_path}/nccloud#清除重复的环境变量awk '!array[\$0]++' ~/.bash_profile > /tmp/bash_profilecat /tmp/bash_profile > ~/.bash_profileecho "下载补丁文件" >> /tmp/tmp_$ts.logwget ftp://\${patch_server}/\${patch_server_path}/patch_\${curr_svcname}/WEB-INF/ -c -r -m -np -nH -P \$docker_path --cut-dirs=3echo "获取容器ID...." >> /tmp/tmp_$ts.logcontainerid=\`docker ps |grep \$curr_svcname |grep -v k8s_POD_ |awk -F " " '{print \$1}'\`echo "获取容器ID为:\$containerid" >> /tmp/tmp_$ts.logecho "创建补丁时间戳...正式环境可剔除,减少垃圾数据..."cd /usr/share/nginx/nccloudtouch $tsecho "启动补丁上传..." >> /tmp/tmp_$ts.logdocker cp /usr/share/nginx/nccloud \${containerid}:/usr/share/nginx/echo "补丁上传完成..." >> /tmp/tmp_$ts.logecho "准备清理补丁目录.." >> /tmp/tmp_$ts.logcd /usr/share/nginx/rm -rf nccloudecho "补丁目录清理完成.." >> /tmp/tmp_$ts.logecho "准备清理补丁脚本.." >> /tmp/tmp_$ts.logrm -f /tmp/tmp_*.shecho "补丁脚本清理完成.." >> /tmp/tmp_$ts.logrm -f /tmp/tmp_*.logEOFecho "为脚本赋权..."chmod +x /tmp/tmp_$ts.sh#开始寻找实例,准备脚本推送if [ $curr_svcname ]thenecho "正在寻找,实例ID为$curr_svcname的容器..."#注释内容仅适用单实例#containerid=`docker ps |grep $imageid |grep -v k8s_POD_ |awk -F " " '{print $1}'`#nodeip=`kubectl get pods -o wide -A |grep $curr_fullname |awk -F " " '{print $8}'`#imageid=`kubectl get pods -o wide -A |grep $curr_fullname |awk -F " " '{print $2}'`#以下支持多实例#初始化函数SendAndExec(){echo "将脚本发送至宿主机...${loopsvcip}/tmp"scp /tmp/tmp_$ts.sh root@${loopsvcip}:/tmp/echo "远程执行脚本..."ssh root@${loopsvcip} "/tmp/tmp_$ts.sh"echo "远端执行情况可到:${loopsvcip}/tmp/tmp_$ts.log查看"}#获取有多少个实例num=`kubectl get pods -o wide -A |grep $curr_fullname |wc -l`echo "获取到"$num"个有效实例,正在准备批量分发..."#遍历实例for ((curnum=1;curnum <= $num;curnum++))doinfo=`kubectl get pods -o wide -A |grep $curr_fullname |awk "NR==$curnum"`echo $info > /tmp/currinfoloopsvcname=`cat /tmp/currinfo |awk -F " " '{print $2}'`loopsvcip=`cat /tmp/currinfo |awk -F " " '{print $8}'`echo "找到实例$curr_fullname的资源池主机:"$loopsvcipecho "找到实例$curr_fullname的实例ID:"$loopsvcname#执行函数SendAndExecdoneecho "清理本地脚本.."rm -f /tmp/tmp_$ts.shecho "清理本地脚本清理完成.."elseecho "输入无效!"fi
要回复问题请先登录或注册
1 个回复
nccloud
提醒:如基于2020年9月28日后的基础镜像制作的front镜像,已原生支持同其他服务。
背景:结合云原生补丁方案http://nccloud.yytimes.com/q_206.html ,但front服务没有预置脚本,且不支持bash命令。故为front服务特殊配置一个通版的补丁方案。
本方案支持当前资源池,指定环境类型的front补丁自动安装,支持多实例场景。
复制下述内容,保存为auto_front_patch.sh,上传脚本到安装器主机,赋予执行权限。修改前20行必须要修改的内容,如环境类型,补丁目录、补丁服务器等,这块的路径同步应用属性里的配置即可。
#!/bin/bash
#
#注意:
# 1、请修改curr_type为对应的环境类型
# 2、请修改patch_server_path为对应的补丁服务器文件夹
# 3、其他修改项慎动
#
curr_type="online"
patch_server_path="patch_S0522"
#获取脚本绝对路径
shellfullpath=$(readlink -f "$0")
#以下内容在NCC测试部环境原则上不需修改
curr_svcname="front"
patch_server="10.16.226.131"
docker_path="/usr/share/nginx/"
curr_fullname=$curr_type'-'$curr_svcname
#确认是否存在计划任务
grep -wq "$shellfullpath" /etc/crontab && echo "已检测到计划任务脚本,不做脚本添加。" ||echo -e "\n#未检测到计划任务脚本,将脚本添加至计划任务,默认5分钟执行1次。\n*/5 * * * * root ${shellfullpath} >> /tmp/auto_front_patch.log" >> /etc/crontab
#生成初始化脚本
ts=`date +"%Y-%m-%d_%H_%M"`
echo "当前获取到的时间戳:$ts"
echo "生成临时脚本.../tmp/tmp_$ts.sh"
cat > /tmp/tmp_$ts.sh << EOF
touch /tmp/tmp_$ts.log
echo "初始化系统变量.." >> /tmp/tmp_$ts.log
yum install wget -y
echo "export patch_server=$patch_server" >> ~/.bash_profile
echo "export patch_server_path=$patch_server_path" >> ~/.bash_profile
echo "export curr_svcname=$curr_svcname" >> ~/.bash_profile
echo "export docker_path=$docker_path" >> ~/.bash_profile
source ~/.bash_profile >> /tmp/tmp_$ts.log
mkdir -p \${docker_path}/nccloud
#清除重复的环境变量
awk '!array[\$0]++' ~/.bash_profile > /tmp/bash_profile
cat /tmp/bash_profile > ~/.bash_profile
echo "下载补丁文件" >> /tmp/tmp_$ts.log
wget ftp://\${patch_server}/\${patch_server_path}/patch_\${curr_svcname}/WEB-INF/ -c -r -m -np -nH -P \$docker_path --cut-dirs=3
echo "获取容器ID...." >> /tmp/tmp_$ts.log
containerid=\`docker ps |grep \$curr_svcname |grep -v k8s_POD_ |awk -F " " '{print \$1}'\`
echo "获取容器ID为:\$containerid" >> /tmp/tmp_$ts.log
echo "创建补丁时间戳...正式环境可剔除,减少垃圾数据..."
cd /usr/share/nginx/nccloud
touch $ts
echo "启动补丁上传..." >> /tmp/tmp_$ts.log
docker cp /usr/share/nginx/nccloud \${containerid}:/usr/share/nginx/
echo "补丁上传完成..." >> /tmp/tmp_$ts.log
echo "准备清理补丁目录.." >> /tmp/tmp_$ts.log
cd /usr/share/nginx/
rm -rf nccloud
echo "补丁目录清理完成.." >> /tmp/tmp_$ts.log
echo "准备清理补丁脚本.." >> /tmp/tmp_$ts.log
rm -f /tmp/tmp_*.sh
echo "补丁脚本清理完成.." >> /tmp/tmp_$ts.log
rm -f /tmp/tmp_*.log
EOF
echo "为脚本赋权..."
chmod +x /tmp/tmp_$ts.sh
#开始寻找实例,准备脚本推送
if [ $curr_svcname ]
then
echo "正在寻找,实例ID为$curr_svcname的容器..."
#注释内容仅适用单实例
#containerid=`docker ps |grep $imageid |grep -v k8s_POD_ |awk -F " " '{print $1}'`
#nodeip=`kubectl get pods -o wide -A |grep $curr_fullname |awk -F " " '{print $8}'`
#imageid=`kubectl get pods -o wide -A |grep $curr_fullname |awk -F " " '{print $2}'`
#以下支持多实例
#初始化函数
SendAndExec(){
echo "将脚本发送至宿主机...${loopsvcip}/tmp"
scp /tmp/tmp_$ts.sh root@${loopsvcip}:/tmp/
echo "远程执行脚本..."
ssh root@${loopsvcip} "/tmp/tmp_$ts.sh"
echo "远端执行情况可到:${loopsvcip}/tmp/tmp_$ts.log查看"
}
#获取有多少个实例
num=`kubectl get pods -o wide -A |grep $curr_fullname |wc -l`
echo "获取到"$num"个有效实例,正在准备批量分发..."
#遍历实例
for ((curnum=1;curnum <= $num;curnum++))
do
info=`kubectl get pods -o wide -A |grep $curr_fullname |awk "NR==$curnum"`
echo $info > /tmp/currinfo
loopsvcname=`cat /tmp/currinfo |awk -F " " '{print $2}'`
loopsvcip=`cat /tmp/currinfo |awk -F " " '{print $8}'`
echo "找到实例$curr_fullname的资源池主机:"$loopsvcip
echo "找到实例$curr_fullname的实例ID:"$loopsvcname
#执行函数
SendAndExec
done
echo "清理本地脚本.."
rm -f /tmp/tmp_$ts.sh
echo "清理本地脚本清理完成.."
else
echo "输入无效!"
fi