深度解讀Helm 3: 猶抱琵琶半遮面

自去年年初開始放風Helm v3將要開始開發,到去年年末KubeConn 上海被一堆人追問到底啥時候發版本。今年五月份,Helm v3 終於發佈了第一個alpha版本,讓咱們來一窺新版本的Helm 到底帶來了什麼。git

Removal of Tiller

Helm 3最大的期待莫過於移除掉Tiller。很難想象一個開源項目,移除其中的一個核心組件會受到如此巨大的歡迎,其實絕不吝嗇的說,Helm v3 alpha 1最大的功能就是去除了tiller。github

因爲歷史緣由,tiller 在集羣應用版本管理和查詢上扮演了重要的角色。可是隨着RBAC等權限控制體系的組件完善,多租戶和安全的需求日益興起,tiller變得愈來愈不安全,社區在權限控制領域遇到了極大的阻礙。docker

移除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。api

    一樣的緣由,若是已經使用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爲例子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)是安全穩定的企業級容器平臺,支持高性能網絡和存儲,提供面向應用的異構資源統一管理,爲企業上雲提供最佳雲原生支持。

 

原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索