大家在生产环境中用 Helm 么?大致用到什么程度?

vps网友提供 06-18 讨论归档 35

最近 Helm 官方跟我们团队沟通,希望从技术和社区多个渠道上合作在国内普及与推广 Helm。

对这个我们非常欢迎,国内 K8s 应用管理这块,跟社区差距还是有点大的。但是:

不知道大家在生产环境中用 Helm 么?大致用到什么程度?

先说我的看法:

  1. Helm 在国外的普及程度是非常高的,说是 CNCF 里除了 K8s,Prometheus 之外的 NO.3 应该没异议。
  2. Helm 本身在应用定义方面做得不错,但是它试图连整个应用的管理周期都管下来的做法是有问题的。我们和 Google 正在跟 Helm 聊 Helm 拆分,但还非常早期。
  3. 结合 2,Helm 对 Release 和“发布”的管理功能,堪称鸡肋。
  4. Templating 和 DSL 是定制应用参数比较差的做法,我们在用 Overlay ( Kustomize ) 做这件事情。

Feel free to feedback!

本文由 vps网友提供,转载请注明出处

本文链接: https://www.vpsvsvps.com/discuss/a/1676471990396915712.html

标签:
Ley
06-18

Helm 和 kubectl 似乎有不兼容之处。通过 Helm ungrade 更新的资源如果用 kubectl apply 之后就无法再次被 Helm 更新。诸如此类的问题遇到几个,给人感觉 Helm 成熟度还不够

artandlol
06-18

不用内置 tiller 版本出来了吗

recall704
06-18

没用,等 3

jade88
06-18

不用,自己封装了一个类似的

jessynt
06-18

用,但是会在需要 Helm 的各个 namespace 部署 tiller

sampeng
06-18

我一直纠结的是不是线上要用 helm 的 tiller …因为有近 40 个微服务。全是 template 会有点方。但 tiller 真的就像上面说的,这万一跟后门一样…纠结啊

twl007
06-18

@resouer 但是对于上百个重复生成的问题怎么解决呢? Kustomize 要是有上百个 overlay 也不好管理吧。我们现在对于一些不是要生成上百个,每个之间也仅仅是参数不同。

另外 jsonnet 也可以考虑下。

anubu
06-18

主要在 CI/CD 环节使用,helm template + kubectl,no tiller。真的只是替换一些环境参数,不管是 template 还是 overlay,不要搞太复杂。可能是程序规模较小,依赖完全可控,人工管理。回滚方面倾向于代码层面回滚,重新发布新的 release,发布流程不变。考虑重新编译时间较长,也可以制品回滚。

monsterxx03
06-18

第三方应用的 chart(jenkins,sonarqube...) 我的做法是直接 cp 到自己的 repo 里, 在里面加一个文件夹 helm_vars 用来 override values.yaml 里面的值, 更新时候直接再从上游拷过来覆盖一次,看 git diff, 没问题再 helm upgrade xx . -f helm_vars/prod.yaml( 这句写死在 Makefile 里). 这种应用更新频率很低直接让 helm 管理了.

自己的应用也用 helm 初始化, 后续更新一般都是代码的更新, 只更新 image tag, 不走 helm, 在 jenkins pipeline 用 kubeclt set image + kubectl rollout status 更新. image 都是时间戳, 每次发布新的 image 同时把 latest tag 指向最新的 tag. helm chart 里 image 永远写 latest.

自己的应用只有在改应用运行环境的时候才需要执行 helm upgrade (很少很少), 风险是此时 tag 变成了 latest, 如果之前线上做了 rollback 就会处问题(但只有我有这权限,所以问题不大)

helm 的依赖管理对我真的没啥用处,有的 chart 里有 requirements 的,我都想办法禁掉, 单独部署它的依赖

silenceshell
06-18

@binux tiller 可以部署在自己的 namespace 里,只是浪费一些资源
helm3 有改善

tontinme
06-18

用的 kustomize 管理 base,ansible template 生成 patch。

resouer
06-18

@YzSama 那么应用安装好之后的发布回滚流程,倾向于让 Helm 管么?

YzSama
06-18

我觉得这东西很好用啊,对于很多开发人员,他们根本不关心服务部署在哪,配置要怎么写。 用 helm 就可以随时调整配置文件,定义几套模板就好了。不必下发到各项目中,集中管理部署模版

binux
06-18

@resouer #6 是啊,terraform 对 k8s 支持不成熟,没办法啊。

resouer
06-18

@binux 那应用描述与应用依赖关系怎么定义? DIY 方案?

binux
06-18

@resouer #4 对于我们来说第三方应用非常非常少,自己的应用需要的不过是 staging/prod 的一些变量的替换罢了。用 template 可以一套变量用在多个地方(比如 SQS name 可以同时用在 k8s yaml 和 Cloudformation 上)。

resouer
06-18

@binux Tiller 这个东西确实变态。

> 要用 Helm 也是渲染出 yaml 去 apply

我们现在是将 Helm Charts Kustomize 化,这样 Base Charts 更新了,你的应用 YAML 就可以做 Rebase。感觉更符合你的使用场景?

binux
06-18

我们的 k8s 集群是我部署和定义的。我禁止在生产环境中使用 helm。
1. 我们主要用 k8s 部署我们自己的应用,既然要自己写 yaml,没有必要使用 helm。
2. Tiller 完全就是一个后门,它绕过 k8s 自己的权限认证。
3. chart 虽然方便,但是很难保证过一两年你安装的配置和原来的兼容。

既然这样,还不如直接管理 yaml,要用 Helm 也是渲染出 yaml 去 apply。

resouer
06-18

@dangyuluo 可以,我们就喜欢这个用法,helm 其它功能太鸡肋了

dangyuluo
06-18

半年用一次,部署完拉到