自去年年初开始放风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)是安全稳定的企业级容器平台,支持高性能网络和存储,提供面向应用的异构资源统一管理,为企业上云提供最佳云原生支持。

本文作者:xianlubird

原文链接

本文为云栖社区原创内容,未经允许不得转载。

深度解读Helm 3: 犹抱琵琶半遮面的更多相关文章

  1. 我就是认真:Linux SWAP 深度解读(必须收藏)

    我就是认真:Linux SWAP 深度解读(必须收藏) http://mp.weixin.qq.com/s?__biz=MzA4Nzg5Nzc5OA==&mid=2651660097& ...

  2. AI 新技术革命将如何重塑就业和全球化格局?深度解读 UN 报告(上篇)

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 张钦坤 腾讯研究院秘书长蔡雄山 腾讯研究院法律研究中心副主任祝林华 腾讯研究院法律研究中心助理研究员曹建峰 腾讯研究院法律研究中心高级研究员 ...

  3. 如何用区块链技术解决信任问题?Fabric 架构深度解读

    阿里妹导读:区块链技术,随着比特币的兴起而为大家所知.但是具体到技术本身,大家相对熟悉的几个词可能是“数据不可篡改”.“公开链”.“分布式数据”.“共识机制”等. 这篇文章将抛砖引玉,通过深度解读Hy ...

  4. 深度解读 AlphaGo 算法原理

    http://blog.csdn.net/songrotek/article/details/51065143 http://blog.csdn.net/dinosoft/article/detail ...

  5. 重写equal()时为什么也得重写hashCode()之深度解读equal方法与hashCode方法渊源

    今天这篇文章我们打算来深度解读一下equal方法以及其关联方法hashCode(),我们准备从以下几点入手分析: 1.equals()的所属以及内部原理(即Object中equals方法的实现原理) ...

  6. SQL Server 2019 深度解读:微软数据平台的野望

    本文为笔者在InfoQ首发的原创文章,主要利用周末时间陆续写成,也算近期用心之作.现转载回自己的公众号,请大家多多指教. 11 月 4 日,微软正式发布了其新一代数据库产品 SQL Server 20 ...

  7. 【转载】深度解读 java 线程池设计思想及源码实现

    总览 开篇来一些废话.下图是 java 线程池几个相关类的继承结构: 先简单说说这个继承结构,Executor 位于最顶层,也是最简单的,就一个 execute(Runnable runnable) ...

  8. Appium+python自动化(七)- 初识琵琶女Appium(千呼万唤始出来,犹抱琵琶半遮面)- 上(超详解)

    简介 “千呼万唤始出来,犹抱琵琶半遮面”,经过前边的各项准备工作,终于才把appium这位琵琶女请出来.那么下边就由宏哥给各位看官.小伙伴们和童鞋们来引荐这位美女(帅哥).这一篇主要是对前边的内容做一 ...

  9. 深度解读Facebook刚开源的beringei时序数据库——数据压缩delta of delta+充分利用内存以提高性能

    转自:https://yq.aliyun.com/topic/58?spm=5176.100239.blogcont69354.9.MLtp4T 摘要: Facebook最近开源了beringei时序 ...

随机推荐

  1. 直接删除mysql的日志导致mysql无法启动

    --02T08::.750000Z [Warning] [MY-] [Server] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION ...

  2. django中的聚合索引

    Django(元信息)元类建索引 ORM查询(sql优化)优化 自定义聚合函数 Django的元类建索引————索引:索引的一个主要目的就是加快检索表中数据,索引是经过某种算法优化过的,因而查找次数要 ...

  3. idea添加jar包

    之前一直使用eclipse,现在使用idea,发现两者引用外部jar的时候不太一样,分享一下. 使用eclipse引用外部jar的时候,我们可以在工程下新建一个lib包来存放,然后add to bui ...

  4. selenium(2):环境搭建完成后,初步运行遇到的问题

    检验是否搭建成功. . 问题一:运行时候,报错:请停用以开发者模式运行的扩展程序 出现错误如下: 原因:chromedriver的版本号过低了. 解决办法:应该安装与chrome版本对应的chrome ...

  5. 几种支持REST的Java框架

    目前宣称支持REST的Java框架包括以下这些: Restlet(http://www.restlet.org/) Cetia4(https://cetia4.dev.java.net/) Apach ...

  6. POJ 1150 The Last Non-zero Digit 数论+容斥

    POJ 1150 The Last Non-zero Digit 数论+容斥 题目地址: id=1150" rel="nofollow" style="colo ...

  7. [J2EE规范]RMI简单实例 标签: j2ee实例 2017-06-29 18:05 217人阅读 评论(13)

    RMI是什么? RMI是指Java Remote Method Invocation,远程方法调用,RMI是Java的一组拥护开发分布式应用程序的API.RMI使用Java语言接口定义了远程对象,它集 ...

  8. Leetcode874.Walking Robot Simulation模拟行走的机器人

    机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方.该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 <= x <= 9:向 ...

  9. RapidMiner Studio 入门

    http://docs.rapidminer.com/studio/getting-started/ RapidMiner Studio 入门 FEIFEI MA 2015-12-07RAPIDMIN ...

  10. Spring_Aop_(二)

    切面的优先级 @Order(1)注解 指定切面的优先级,值越小优先级越高 @Order(1) @Aspect @Component public class VlidationAspect { @Be ...