Helm常用用法和遇到的一些问题

1.helm install

helm install命令可以从多个来源安装:

  1. 通过chart仓库: helm install stable/mariadb
  2. 通过本地 chart 压缩包: helm install ./nginx-1.2.3.tgz
  3. 通过解压后的chart目录 helm install ./nginx
  4. 通过完整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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容