Helm 2 、Helm 3 比较

Helm 3 终于发布了。我们可以告别 Tiller 了,但 Helm 3 的改变不仅于此。让我们继续探讨其他的变化。

1. 告别 Tiller

Helm 3 移除了 Tiller ,是个不错的决定。但是要理解为什么不错,我们还需要了解一下 Tiller 产生的背景。Tiller 是 Helm 的服务端组件(运行在 Kubernetes 集群上),主要目的是为了让多个不同的操作者能够在同一个集群上操作。开发 Helm 2 时,由于 Kubernetes 没有基于角色的访问控制(RBAC),Helm 不得不自己控制谁、在哪里能够安装应用。直到 Kubernetes 1.6 中开启了 RBAC ,这件事就变得简单了。Helm 也不必与 Kubernetes 做重复的事情,因此 Helm 3 彻底移除了 Tiller 。Tiller 作为维护 Helm 应用信息和状态的核心。Helm 3 直接从 Kubernetes API Server 就可以获取到相同的信息,并且在客户端呈现 Charts 。对于 Kubernetes 来说,这种方式更加简单而原生。移除 Tiller 之后,Helm 的安全模型也变得简单(使用 RBAC 来控制生产环境 Tiller 的权限非常不易于管理)。Helm 3 使用 kubeconfig 鉴权。集群管理员针对应用,可以设置任何所需级别的权限控制,而其他功能保持不变。

2. 好吧,除了 Tiller ,还有什么改变?

正如前面提到的,移除 Tiller 是一件大事,但不是唯一的一件。让我们看看其他的。

2.1 三路合并补丁策略

Helm 2 使用的是两路合并补丁策略。也就是,当你想执行任何 helm 操作时,比较最新的 chart 包与期望的 chart 包配置。这两个包之间的不同,决定了应该调整 Kubernetes 中的哪些资源。听起来不错,对吗?但是没有考虑手动修改应用的情况(例如,使用 kubectl edit)。这将导致应用无法回滚到之前的状态,因为 Helm 2 将最新的 chart 包当做最新的状态,而最新的 chart 包里面没有改变(我们只是更新了应用在集群的状态),Helm 2 忽略了这一变化的回滚。三路策略合并补丁可以解决这个问题。Helm 3 是如何做的呢?它只是多考虑了应用的线上状态(使用三路替代两路,旧的配置,线上状态,新的配置)。例如,假设你部署了一个应用:

相关推荐

站点声明:本站部分内容转载自网络,作品版权归原作者及来源网站所有,任何内容转载、商业用途等均须联系原作者并注明来源。

相关侵权、举报、投诉及建议等,请发邮件至E-mail:service@mryunwei.com

回到顶部
1
helm install very_important_app ./very_important_app
kubectl scale -replicas=0 deployment/very_important_app
helm rollback very_important_app
containers:
- name: server
  image: my_app:2.0.0
containers:
- name: server
  image: my_app:2.0.0
- name: istio-sidecar
  image: istio-sidecar-proxy:1.0.0
containers:
- name: server
  image: my_app:2.1.0
containers:
- name: server
  image: my_app:2.1.0
- name: istio-sidecar
  image: istio-sidecar-proxy:1.0.0