程序员老鬼

helm v3 中为什么要弃用 tiller?

跑路的可能是企业,弃用的却是 Tiller。说起这个 Helm v3 干掉 Tiller 的事,我真的是一把辛酸泪,做了好几年的 Kubernetes,真心觉得这是一次“技术人员集体解气”的升级。

在 Kubernetes 的世界里,有很多东西第一眼看着挺牛,但深入一用就发现它其实是个定时炸弹。Tiller 就是这种存在。

什么是 Tiller?为啥它那么招人烦?

Tiller 是 Helm v2 中的“魔法使者”,它驻扎在集群里,用来接收 helm install 等命令,通过 gRPC 通信部署各种 Chart,也就是 K8s 应用模板。说得直白点儿,Tiller 就像是你请来的保姆,结果这个保姆自己把你家钥匙配了十把,给了整个小区。

为啥这么说?权限问题太大了!

一个 Tiller,全员 root

Tiller 本身运行在 Kubernetes 集群里,并且通常附带 集群管理员(cluster-admin)权限,这就很尴尬了。开发、测试、运维、小黑子……都可以通过 Helm client 操作 Tiller,结果就是所有人都可以用最高权限往集群里塞资源。这场面,就像是公司 WiFi 密码贴在了厕所门口,谁都能来蹭两下。

说个真实段子,有同事测试个新服务,不小心 helm 安装了个 Chart,结果给生产集群装了一套 Redis,还开着 NodePort。我看监控眼都要瞪裂了:怎么公网上有人在连我们 Redis?

后来排查才知道,是 Tiller 的锅。

Tiller 的两个致命缺陷

  1. 1. 权限不可控: 所有 Helm 操作都绕不过 Tiller,一旦部署了 Tiller,就像是把所有部署入口交到了一个不设防的门口。尤其是在多租户环境下,简直是个灾难。
  2. 2. 通信不透明: Helm Client 是通过 gRPC 和 Tiller 通信的,配置和部署逻辑都是由 Tiller来执行。对开发者来说,这中间发生了什么你根本不知道。你以为执行的是这张 Chart,其实已经在半路变形了……

这就像你在写 Java 接口调用,结果中间加了个黑盒子代理,谁知道它是不是偷偷加了个 if else?

Helm v3:终于干掉了这个大雷包

到了 Helm v3,开发团队做了一个艰难但正确的决定:砍掉 Tiller,回归本地执行。

这个改动我举双手双脚赞成:

  • • 所有部署逻辑在 Helm Client 本地完成,不再通过 Tiller 远程控制集群。
  • • 权限控制彻底交给 kubeconfig,谁能干啥,由集群管理员根据 kubeconfig 设置的角色权限说了算。
  • • 安全性直线上升,再也不会有“我测试个服务差点把生产炸了”的情况了。

比如现在执行 helm install:

helm install my-app ./my-chart --kubeconfig ~/.kube/config

整个流程就走的是你自己的 kubeconfig,权限清清楚楚,谁该管啥,不能越界。

这就像原来是大家共用一台 root 服务器,现在每人一台虚拟机,各玩各的,出事也不会互相殃及池鱼。

用代码看看 v2 和 v3 的对比:

Helm v2 部署逻辑(伪代码):

// v2 通过 gRPC 发命令给 Tiller
GrpcClientclient=newGrpcClient(tillerEndpoint);
client.send(newInstallCommand(chart, config));

Helm v3 部署逻辑:

// v3 本地直接渲染 + 调用 kubectl API
Chartchart= ChartLoader.load("/charts/my-app");
Manifestmanifest= HelmRenderer.render(chart, config);
KubeClient.apply(manifest, kubeconfig);

是不是一目了然?你手里拿的是啥,你部署的是啥,清清楚楚,再也不是“把 Chart 丢进 Tiller 宠物小精灵球里,祈祷它别变异”。

那么 Helm v3 没有缺点吗?

当然也有,最直观的一个就是需要配置 kubeconfig 权限,对于刚接触 Kubernetes 的小白来说,配置权限这件事比写 YAML 还痛苦。不过从长远来看,这是个“短痛换长安”的策略。

另外就是 Tiller 本来还支持多人共享状态,比如 release 的状态存在 Tiller 那边,多个客户端共享。但 v3 需要大家自己协调状态,虽然 Helm v3 引入了更完善的 release 管理机制,也算是及时补上了这个洞。

讲个程序员的“后遗症”

我记得 Helm v3 出来那会儿,我刚好换工作,入职第一天 leader 说:“部署直接用 Helm v3 就行。”我手一哆嗦,心说这公司啥都上最新版本,不怕踩坑?

结果一用,贼舒服,终于摆脱了每天用 Tiller 的“被控”感,就像是从租房搬进了自己的房子,连窗帘杆都能自己装。

总的来说,我觉得 Helm v3 最大的优点,就是它让 Helm 变得真正“像人话”了。不再绕远路,不再藏黑盒,谁操作、谁负责、谁有权限,一清二楚。对于程序员来说,这种“你写的代码你自己布”的感觉,才叫安全。

反正我是彻底不想再碰 Tiller 了,删得越干净,心里越舒服。说白了,K8s 本身已经够复杂了,再来个 Tiller 搅局,那真是雪上加霜。Helm v3,确实是干掉了一个“历史包袱”,也给了我们一个更清爽的部署世界。

你怎么看?你还在用 v2 吗?要不要我顺手给你执行个 helm uninstall tiller,就当做个祓除仪式了

最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:https://www.songshuhezi.com/deepseek

也可以看我写的这篇文章《DeepSeek满血复活,直接起飞!》来进行本地搭建。

-END-

ok,今天先说到这,老规矩,给大家分享一份不错的副业资料,感兴趣的同学可以链接我,微信:hls404 找我领取。

以上,就是今天的分享了,看完文章记得右下角点赞,也欢迎在评论区写下你的留言。