背景:使用cosmicstudio进行服务管理或者构建部署时,因为工具权限的受限,无法重启k8s上的苍穹服务。
解决方案:cosmicsudio默认的功能无法实现服务的管理时,我们提供了自定义脚本,用户可以通过维护自定义脚本,来替换系统默认脚本,来扩大工具的功能权限。因为是k8s的服务,所以自定义脚本可以通过安装kubectl的命令来实现。
操作步骤:
首先我们需要安装kubectl的命令。到kubectl版本发布页面(https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/README.md ),下载kubectl工具,若已下载,可跳过该步骤。
下载完成后,直接解压文件,取出压缩包里的kubectl文件,上传到cosmicstudio所在的服务器上,复制到/usr/bin
在当前用户目录下创建目录.kube,创建文件config
将k8s集群的master节点上的config文件(/root/.kube/config),复制到第三步创建的config文件中,这样就可以在cosmicstudio服务器上调用kubectl的命令管理k8s服务了。
确认命令是否生效:执行命令kubectl get nodes,判断是否能获取到k8s下的节点机器
kubectl命令安装好之后,访问cosmicstudio服务,找到苍穹服务管理,选中服务,点击“管理”,在打开的苍穹服务中,点击“高级配置”
在输入框中输入如下脚本,并调整部分参数:
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,请联系我!
推荐阅读