自去年年初开始放风Helm v3将要开始开发,到去年年末KubeConn 上海被一堆人追问到底啥时候发版本。今年五月份,Helm v3 终于发布了第一个alpha版本,让咱们来一窥新版本的Helm 到底带来了什么。git
Helm 3最大的期待莫过于移除掉Tiller。很难想象一个开源项目,移除其中的一个核心组件会受到如此巨大的欢迎,其实绝不吝啬的说,Helm v3 alpha 1最大的功能就是去除了tiller。github
因为历史缘由,tiller 在集群应用版本管理和查询上扮演了重要的角色。可是随着RBAC等权限控制体系的组件完善,多租户和安全的需求日益兴起,tiller变得愈来愈不安全,社区在权限控制领域遇到了极大的阻碍。docker
移除tiller的好处主要有一下几点:后端
helm delete
---> helm uninstall
: 曾经彻底删除一个release须要helm delete xxx --purge
, 如今只须要uninstall
就能够,purge
会做为一个默认的行为helm inspect
---> helm show
: 这里能够查看Chart的具体信息helm fetch
---> helm pull
: 与docker pull
看齐,为下一步兼容registry 作铺垫,像拉取镜像同样拉取Chart部署Helm v2 只使用tiller 的namespace 做为release信息的存储,这样全集群的release名字都不能重复。Helm v3只会在release安装的所在namespace记录对应的信息,这样不一样的namepsace就能够出现相同名字的release。api
一样的缘由,若是已经使用Helm v2建立了release,那么就没法使用helm v3来进行升级操做,由于没法将原来的单一namespace信息迁移到所属namespace 下。这一块的迁移功能,社区正在紧锣密鼓的开发中安全
dependencies: - name: mariadb version: 5.x.x repository: https://kubernetes-charts.storage.googleapis.com/ condition: mariadb.enabled tags: - database
dependencies: - name: mariadb version: 5.x.x repository: https://kubernetes-charts.storage.googleapis.com/ condition: mariadb.enabled tags: - database
老版本Helm 能够直接安装chart 并不须要指定名称,Helm v3须要指定名称网络
咱们来试用一下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为例子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很不相同的地方。
已经使用v2安装的release,不能经过v3来升级,查看
在如何远程托管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的功能。这个功能目前处于实验性质,社区仍是但愿将来你们可以都转到这种存储方式上来。
阿里云容器服务是 Kubernetes 认证服务提供商(KCSP),国内惟一进入 Gartner 竞争格局的公有云容器平台。容器服务 Kubernetes 版(ACK)是安全稳定的企业级容器平台,支持高性能网络和存储,提供面向应用的异构资源统一管理,为企业上云提供最佳云原生支持。
原文连接 本文为云栖社区原创内容,未经容许不得转载。