天天看點

Why Helm? - 每天5分鐘玩轉 Docker 容器技術(160)

本章我們将學習 Helm,Kubernetes 的包管理器。

每個成功的軟體平台都有一個優秀的打包系統,比如 Debian、Ubuntu 的 apt,Redhat、Centos 的 yum。而 Helm 則是 Kubernetes 上的包管理器。

本章我們将讨論為什麼需要 Helm,它的架構群組件,以及如何使用 Helm。

Why Helm

Helm 到底解決了什麼問題?為什麼 Kubernetes 需要 Helm?

答案是:Kubernetes 能夠很好地組織和編排容器,但它缺少一個更高層次的應用打包工具,而 Helm 就是來幹這件事的。

先來看個例子。

比如對于一個 MySQL 服務, Kubernetes 需要部署下面這些對象:

  1. Service,讓外界能夠通路到 MySQL。
    Why Helm? - 每天5分鐘玩轉 Docker 容器技術(160)
  2. Secret,定義 MySQL 的密碼。
    Why Helm? - 每天5分鐘玩轉 Docker 容器技術(160)
  3. PersistentVolumeClaim,為 MySQL 申請持久化存儲空間。
    Why Helm? - 每天5分鐘玩轉 Docker 容器技術(160)
  4. Deployment,部署 MySQL Pod,并使用上面的這些支援對象。
    Why Helm? - 每天5分鐘玩轉 Docker 容器技術(160)

我們可以将上面這些配置儲存到對象各自的檔案中,或者集中寫進一個配置檔案,然後通過 

kubectl apply -f

 部署。

到目前為止,Kubernetes 對服務的部署支援得都挺好,如果應用隻由一個或幾個這樣的服務組成,上面的部署方式完全足夠了。

但是,如果我們開發的是微服務架構的應用,組成應用的服務可能多達十個甚至幾十上百個,這種組織和管理應用的方式就不好使了:

  1. 很難管理、編輯和維護如此多的服務。每個服務都有若幹配置,缺乏一個更高層次的工具将這些配置組織起來。
  2. 不容易将這些服務作為一個整體統一釋出。部署人員需要首先了解應用都包含哪些服務,然後按照邏輯順序依次執行 

    kubectl apply

    。即缺少一種工具來定義應用與服務,以及服務與服務之間的依賴關系。
  3. 不能高效地共享和重用服務。比如兩個應用都要用到 MySQL 服務,但配置的參數不一樣,這兩個應用隻能分别拷貝一套标準的 MySQL 配置檔案,修改後通過 

    kubectl apply

     部署。也就是說不支援參數化配置和多環境部署。
  4. 不支援應用級别的版本管理。雖然可以通過 

    kubectl rollout undo

     進行復原,但這隻能針對單個 Deployment,不支援整個應用的復原。
  5. 不支援對部署的應用狀态進行驗證。比如是否能通過預定義的賬号通路 MySQL。雖然 Kubernetes 有健康檢查,但那是針對單個容器,我們需要應用(服務)級别的健康檢查。

Helm 能夠解決上面這些問題,Helm 幫助 Kubernetes 成為微服務架構應用理想的部署平台。

下一節我們讨論 Helm 的架構。

書籍:

1.《每天5分鐘玩轉Kubernetes》

https://item.jd.com/26225745440.html

2.《每天5分鐘玩轉Docker容器技術》

https://item.jd.com/16936307278.html

3.《每天5分鐘玩轉OpenStack》

https://item.jd.com/12086376.html

繼續閱讀