深度解读Helm 3: 犹抱琵琶半遮面

简介: 自去年年初开始放风Helm v3将要开始开发,到去年年底KubeConn 上海被一堆人追问到底啥时候发版本。今年五月份,Helm v3 终于发布了第一个alpha版本,让我们来一窥新版本的Helm 到底带来了什么。

自去年年初开始放风Helm v3将要开始开发,到去年年底KubeConn 上海被一堆人追问到底啥时候发版本。今年五月份,Helm v3 终于发布了第一个alpha版本,让我们来一窥新版本的Helm 到底带来了什么。

Removal of Tiller

Helm 3最大的期待莫过于移除掉Tiller。很难想象一个开源项目,移除其中的一个核心组件会受到如此巨大的欢迎,其实毫不吝啬的说,Helm v3 alpha 1最大的功能就是去除了tiller。

由于历史原因,tiller 在集群应用版本管理和查询上扮演了重要的角色。但是随着RBAC等权限控制体系的组件完善,多租户和安全的需求日益兴起,tiller变得越来越不安全,社区在权限控制领域遇到了极大的阻碍。

移除tiller的好处主要有一下几点:

  • 更加简单和灵活的架构
  • 可以直接使用Kubernetes API交互
  • 客户端渲染Chart, 在Kubernetes集群中存储release信息
  • 客户使用壁垒更加的降低

CLI changes

  • helm delete ---> helm uninstall: 曾经完全删除一个release需要helm delete xxx --purge, 现在只需要uninstall就可以,purge会作为一个默认的行为
  • helm inspect ---> helm show: 这里可以查看Chart的具体信息
  • helm fetch ---> helm pull: 与docker pull看齐,为下一步兼容registry 做铺垫,像拉取镜像一样拉取Chart部署

Breaking Changes (Warning)

  • Namespaces changes

    Helm v2 只使用tiller 的namespace 作为release信息的存储,这样全集群的release名字都不能重复。Helm v3只会在release安装的所在namespace记录对应的信息,这样不同的namepsace就可以出现相同名字的release。

    同样的原因,如果已经使用Helm v2创建了release,那么就无法使用helm v3来进行升级操作,因为无法将原来的单一namespace信息迁移到所属namespace 下。这一块的迁移功能,社区正在紧锣密鼓的开发中

  • Chart dependency management

    • 老版本通过requirements.yaml和requirements.lock 来管理Chart的依赖,一个requirements.yaml 一般长相如下
    dependencies:
    - name: mariadb
      version: 5.x.x
      repository: https://kubernetes-charts.storage.googleapis.com/
      condition: mariadb.enabled
      tags:
    - database
    • 新版本直接使用Chart.yaml 来记录依赖信息,新的Chart.yaml格式和requirements.yaml 基本相同
      dependencies:
      - name: mariadb
        version: 5.x.x
        repository: https://kubernetes-charts.storage.googleapis.com/
        condition: mariadb.enabled
        tags:
          - database
  • Generate Name

    老版本Helm 可以直接安装chart 并不需要指定名称,Helm v3需要指定名称

Try

我们来试用一下Helm v3, 下载地址在这里https://github.com/helm/helm/releases/tag/v3.0.0-alpha.1。 为了防止与已经安装的Helm v2冲突,我们需要设置一下
$HELM_HOME set an alternative location for Helm files. By default, these are stored in ~/.helm,比如放到/tmp目录下。安装完毕后,helmv3 init初始化一下就可以使用。

我们使用wordpress为例子

[root@iZ8vbbnhdit552y4lytxpiZ ~]# ./helmv3 install stabel/wordpress

[root@iZ8vbbnhdit552y4lytxpiZ ~]# ./helmv3 ls
NAME       NAMESPACE    REVISION    UPDATED                                    STATUS      CHART
test-v3    default      1           2019-05-27 16:50:46.100265945 +0800 CST    deployed    wordpress-0.6.13

可以看到,目前已经存在的Chart可以完全无缝迁移到helmv3 ,完全兼容。只是不需要tiller 来协助安装。以前Helm v2存储的release 都在tiller 所在的namespace。

[root@iZ8vbbnhdit552y4lytxpiZ ~]# kubectl get cm -n kube-system -l OWNER=TILLER
NAME                   DATA   AGE
wordpress-default.v1   1      26h
wordpress-default.v2   1      26h
wordpress-default.v3   1      26h

这就是Helm v2存储release 信息的地方,可以看到都在kube-system命名空间下。

[root@iZ8vbbnhdit552y4lytxpiZ ~]# kubectl get secret | grep word
test-v3-wordpress                                 Opaque                                2      26h
wordpress-default-mariadb                         Opaque                                2      26h
wordpress-default-wordpress                       Opaque                                2      26h

在看Helm v3,所有的信息都存储在release对应的namespace 下,而且以secret存储。这是v2和v3很不相同的地方。

Migrate from v2 to v3

  • 针对目前已经存在的chart, helm v3可以无缝安装,无需迁移
  • v2与v3可以共存,tiller 可以继续存在
  • 已经使用v2安装的release,不能通过v3来升级,查看

Pushing Charts to OCI Registries

在如何远程托管Chart这件事上,经历了很多次的发展。最初是保存在本地,然后是打成压缩包,上传到oss 等远程存储,然后社区出现了Chartmuseum 这样的开源工具,提供公共的Chart托管。但是关于权限认证等方便并没有很好的解决方案。同时在后端存储方面,也没有能像Docker Registry 那样很好的节省空间避免重复存储的功能。

因此所有的目光都转向了Docker Registry,毕竟目前各大厂商都已经提供了镜像托管功能,能否复用这个能力来托管Chart是一个很好的方向。由此微软推出了 OCI Registry As Storage。根据镜像 OCI 标准规范,复用Registry 来存储Chart。这个目前已经集成到Helm v3试验版本里面。

我们来试用一下这个功能.
首先本地启动一个registry
docker run -dp 5000:5000 --restart=always --name registry registry:2

然后下载一个chart包helm fetch stable/wordpress

[root@iZ8vbbnhdit552y4lytxpiZ ~]# ./helmv3 chart save wordpress localhost:5000/wordpress:latest
Name: wordpress
Version: 0.6.13
Meta: sha256:83c48dd3c01a2952066ead67023ea14963a88db4287650baad5ea1ddd8ff9590
Content: sha256:248c8c68f4f614003c8b1a9d78787e5f07e979e9b996981df993cf380f498c97
latest: saved


[root@iZ8vbbnhdit552y4lytxpiZ ~]# ./helmv3 chart list
REF                                NAME         VERSION    DIGEST     SIZE        CREATED
localhost:5000/wordpress:latest    wordpress    0.6.13     248c8c6    12.0 KiB    11 seconds


[root@iZ8vbbnhdit552y4lytxpiZ ~]# ./helmv3 chart push localhost:5000/wordpress:latest
The push refers to repository [localhost:5000/wordpress]
Name: wordpress
Version: 0.6.13
Meta: sha256:83c48dd3c01a2952066ead67023ea14963a88db4287650baad5ea1ddd8ff9590
Content: sha256:248c8c68f4f614003c8b1a9d78787e5f07e979e9b996981df993cf380f498c97
latest: pushed to remote (2 layers, 12.6 KiB total)

这样就完成了将Chart 推送到Registry的功能。这个功能目前处于实验性质,社区还是希望未来大家能够都转到这种存储方式上来。

What's Next

  • alpha1: 移除Tiller, 提供Library charts, 存储格式改成secret, 开始OCI集成工作
  • alpha2: 更好的 OCI 集成,Lua 模板支持
  • alpha3: 重构更新策略(可能是客户端侧进行,也可能是服务端侧进行)

容器服务 Kubernetes 版(ACK)

阿里云容器服务是 Kubernetes 认证服务提供商(KCSP),国内唯一进入 Gartner 竞争格局的公有云容器平台。容器服务 Kubernetes 版(ACK)是安全稳定的企业级容器平台,支持高性能网络和存储,提供面向应用的异构资源统一管理,为企业上云提供最佳云原生支持。点击了解产品详情 https://www.aliyun.com/product/kubernetes ;Kuberentes爱好者这请加入钉钉技术群:
image

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
消息中间件 存储 算法
RocketMQ 重试机制详解及最佳实践
本文主要介绍在使用 RocketMQ 时为什么需要重试与兜底机制,生产者与消费者触发重试的条件和具体行为,如何在 RocketMQ 中合理使用重试机制,帮助构建弹性,高可用系统的最佳实践。
1709 0
RocketMQ 重试机制详解及最佳实践
|
存储 网络安全 对象存储
基于OSS搭建私有 Docker Registry
基于OSS搭建私有 Docker Registry Docker Registry 作为 Docker 的核心组件之一负责了镜像的存储以及分发。用户只需要使用 Docker 的客户端就可以直接和 Registry 进行交互,下载和上传镜像。
14093 0
|
6月前
|
Oracle Java 关系型数据库
java 入门学习视频_2025 最新 java 入门零基础学习视频教程
《Java 21 入门实操指南(2025年版)》提供了Java最新特性的开发指导。首先介绍了JDK 21和IntelliJ IDEA 2025.1的环境配置,包括环境变量设置和预览功能启用。重点讲解了Java 21三大核心特性:虚拟线程简化高并发编程,Record模式优化数据解构,字符串模板提升字符串拼接可读性。最后通过图书管理系统案例,展示如何运用Record定义实体类、使用Stream API进行数据操作,以及结合字符串模板实现控制台交互。该指南完整呈现了从环境搭建到实际项目开发的Java 21全流程实
284 1
|
7月前
|
Shell 应用服务中间件 nginx
docker 镜像的部分常用命令
docker镜像常用命令
239 16
|
9月前
|
开发工具 虚拟化 git
自学软硬件第755 docker容器虚拟化技术youtube视频下载工具
docker容器虚拟化技术有什么用?怎么使用?TubeTube 项目使用youtube视频下载工具
|
负载均衡 前端开发 网络协议
Keepalived+HAProxy 搭建高可用负载均衡(二)
Keepalived+HAProxy 搭建高可用负载均衡
861 0
|
负载均衡 前端开发 应用服务中间件
企业实战(22)基于Haproxy负载均衡+Keepalived高可用集群实战详解
企业实战(22)基于Haproxy负载均衡+Keepalived高可用集群实战详解
314 0
|
Python
雨痕大神的《学习笔记系列》
雨痕大神的《学习笔记》可以在他的GitHub(https://github.com/qyuhen/book)下载,7000+的Star,足以证明认可度。 笔记系列陆陆续续在出版,已出版的有: 《Python 3学习笔记(上卷)》https://www.
3998 0
|
消息中间件 存储 Apache
解析 RocketMQ 业务消息--“顺序消息”
本篇将继续业务消息集成的场景,从功能原理、应用案例、最佳实践以及实战等角度介绍 RocketMQ 的顺序消息功能。
767 0
解析 RocketMQ  业务消息--“顺序消息”
|
消息中间件 Java RocketMQ
RocketMQ-Spring学习
们可以它的一系列动作操作,会首先将相关配置MessageConverterConfiguration、ListenerContainerConfiguration、ExtProducerResetConfiguration、ExtConsumerResetConfiguration、RocketMQTransactionConfiguration、RocketMQListenerConfiguration进行导入。在自动注入前处理事务配置RocketMQTransactionConfiguration,在自动注入后处理消息转换器配置MessageConverterConfiguration。
1594 0
RocketMQ-Spring学习