1.helm install
helm install命令可以从多个来源安装:
- 通过chart仓库: helm install stable/mariadb
- 通过本地 chart 压缩包: helm install ./nginx-1.2.3.tgz
- 通过解压后的chart目录 helm install ./nginx
- 通过完整URL: helm install https://example.com/charts/nginx-1.2.3.tgz
命令:
helm install /home/nginx-1.2.3.tgz --version 1.1 --namespace nginx --name nginx --values=/home/nginx.conf
有用参数:
--name release的名字
--namespace release的命名空间
-dry-run 模拟一次安装,常和--debug一起使用,调试chart模板是否正常
--no-hooks 在安装过程中不使用hooks
--values 使用YAML文件中指定值
2. helm upgrade的策略
Helm会尝试执行最小侵入式升级。它只会更新自上次发布以来发生更改的内容。
helm upgrade --install prometheus --namespace prometheus prometheus -f /tmp/prometheus \
--set manifests.job=true \
--set storege.requests.size=100Gi
3.helm upgrde 的时候无法修改job的标签
当部署一个Chart,其中部署了Job和CronJob等。我们需要更新部署为Job/CronJob的容器的标签,并且在update --install --atomic收到此错误期间:
Error: UPGRADE FAILED: release X failed, and has been rolled back due to atomic being set: cannot patch "X" with kind Job: Job.batch "Y" is invalid: spec.template: Invalid value: [skipped]: field is immutable
- 原因:
问题是Kubernetes认为某些事情是不可变的。您不能在某些类型的Kubernetes对象上升级某些值。但是,Helm不知道这些值是什么值,因为它们不会被架构公开。因此,Helm将清单发送给Kubernetes,Kubernetes会以不可变的字段列表作为响应。部署失败,因为无法升级对象。
解决方案是让您的图表不尝试修改不可变字段。您可以在Kubernetes文档https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/中找到更多信息
如果确定要重新运行该Job,我们建议在Job名称后添加一个随机字符串
metadata:
name: {{ template "fullname" . }}-{{ randAlphaNum 5 | lower }}
4. helm 加上--dry-run --debug做调试
我们用模板来生成资源文件的清单,但是如果我们想要调试就非常不方便了,不可能我们每次都去部署一个release实例来校验模板是否正确,所幸的时 Helm 为我们提供了--dry-run --debug这个可选参数,在执行helm install的时候带上这两个参数就可以把对应的 values 值和生成的最终的资源清单文件打印出来,而不会真正的去部署一个release实例,比如我们来调试上面创建的 chart 包:
helm install /home/ceilometer-6.0.1-beta.164.tgz --dry-run --debug --version 6.0.1-beta.164 --namespace openstack --name ceilometer --values=/tmp/ceilometer