自定义脚本之重启k8s服务原创
金蝶云社区-吴辉宇
吴辉宇
2人赞赏了该文章 2,205次浏览 未经作者许可,禁止转载编辑于2022年11月21日 15:30:45

背景:使用cosmicstudio进行服务管理或者构建部署时,因为工具权限的受限,无法重启k8s上的苍穹服务。


解决方案:cosmicsudio默认的功能无法实现服务的管理时,我们提供了自定义脚本,用户可以通过维护自定义脚本,来替换系统默认脚本,来扩大工具的功能权限。因为是k8s的服务,所以自定义脚本可以通过安装kubectl的命令来实现。


操作步骤:

  1. 首先我们需要安装kubectl的命令。到kubectl版本发布页面(https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/README.md ),下载kubectl工具,若已下载,可跳过该步骤。

    图片.png



    图片.png

    图片.png


  2. 下载完成后,直接解压文件,取出压缩包里的kubectl文件,上传到cosmicstudio所在的服务器上,复制到/usr/bin

    图片.png


  3. 在当前用户目录下创建目录.kube,创建文件config

    图片.png


  4. 将k8s集群的master节点上的config文件(/root/.kube/config),复制到第三步创建的config文件中,这样就可以在cosmicstudio服务器上调用kubectl的命令管理k8s服务了。

  5. 确认命令是否生效:执行命令kubectl get nodes,判断是否能获取到k8s下的节点机器

    图片.png


  6. kubectl命令安装好之后,访问cosmicstudio服务,找到苍穹服务管理,选中服务,点击“管理”,在打开的苍穹服务中,点击“高级配置”

    图片.png

    图片.png

  7. 在输入框中输入如下脚本,并调整部分参数:

    namespace:服务所在的命名空间,可以通过“kubectl get pods -A|grep 服务名”获取

    mservice: 服务名。默认是mservice

#-------------------------------------------------------
#苍穹服务的命名空间
namespace=
mservice=

#-------------------------------------------------------


# 获取服务yaml文件
echo "修改${mservice}的env, 更新CUSLIBS值"
export mservicetype=${mservicetype:-deployment}
export mservice=${mservice:-mservice}
jarName=${jarName}
if [ ! -z ${jarName} ]; then
	kubectl get ${mservicetype} ${mservice} -n ${namespace} -o yaml >> /tmp/${mservice}.yaml

	cuslibs=$(cat /tmp/${mservice}.yaml|grep "name: CUSLIBS" -A 1|grep "value")
	if [ -z "${cuslibs}" ]; then
		cuslibs=${jarName}
		sed -i "/- env:/a\        - name: CUSLIBS\n          value: ${cuslibs}" /tmp/${mservice}.yaml
	else
		if [[ ! ",${cuslibs}," =~ ",${jarName}," ]]; then
			newcuslibs=${cuslibs},${jarName}
			sed -i "s/${cuslibs}/${newcuslibs}/g" /tmp/${mservice}.yaml
		fi
	fi
    kubectl apply -f /tmp/${mservice}.yaml && rm -rf /tmp/${mservice}.yaml	
else
	# 滚动重启
	kubectl rollout restart ${mservicetype} ${mservice} -n ${namespace}
	# 若资源不足,可先kill pod后,直接重启,将上面命令注释,打开下面命令即可
	#kubectl get pods -n ${namespce}|grep ${mservice}|xargs kubectl delete pod -n ${namespace}
fi


针对非苍穹服务,只需要关注重启的命令,也就是脚本中的kubectl rollout xxx这一行即可。


最后。如果脚本中有bug,请联系我!

赞 2