helm这工具在做CICD的过程中,如果是用默认的install,或者upgrade的话,会出现各种报错,主要原因是helm的release在作怪,原本kubectl apply玩得很哈皮,到helm这里就各种水土不服了,于是产生了以下骚操作。有没有什么办法让helm像kubectl apply一样酸爽,我用helm做CICD的目的只是因为它比sed可以更舒服的替换变量。
好的通过查看helm的帮助信息,可以发现--dry-run 这个参数,这个不就跟kubectl一样,不会实际安装,只是用来测试语法问题的神器么,并且它会输出yaml格式的结果。very good!
有了--dry-run之后,但仍有一个问题,假如你当前集群已经安装过应用,即使--dry-run也会出现一些冲突错误,真是极其恶心,于是它来了。
首先用最快,并且最省资源的办法搭建一个全新的集群,我是用rancher的k3s,1核2g内存安装的,并且得和实际环境安装相同的插件,比如我用上了istio,那么k3s也得装上istio,否则,因为istio是crd的资源,不装helm就无法识别istio的crd资源格式。
然后把k3s的config文件搞出来。好了定义两个常用的变量吧,我这里是shell里面的
CLI="/usr/bin/kubectl --kubeconfig /root/.kube/config" (这里是实际要安装应用的k8s集群config)
HELM="/usr/bin/helm --kubeconfig /root/.kube/k3s" (这里是使用的k3s的config)
好了执行的安装命令如下:
$HELM install --set replicas=$replicas --set image.tag=$tag $service-$env . --dry-run |tail -n +9 |$CLI apply -f -
用helm的--dry-run测试语法参数,同时使用k3s的干净环境(因为--dry-run永远不会安装任何应用,避免了release各种冲突),生成yaml文件,最后只用kubectl在实际集群apply yaml就可以了