Helm
Kubernetes 包管理工具
Helm 可以幫助我們管理 Kubernetes 應用程序 - Helm Charts 可以定義、安裝和升級復雜的 Kubernetes 應用程序,Charts 包很容易創建、版本管理、分享和分布。Helm 對於 Kubernetes 來說就相當於 yum 對於 Centos 來說,如果沒有 yum 的話,我們在 Centos 下面要安裝一些應用程序是極度麻煩的,同樣的,對於越來越復雜的 Kubernetes 應用程序來說,如果單純依靠我們去手動維護應用程序的 YAML 資源清單文件來說,成本也是巨大的。接下來我們就來了解了 Helm 的使用方法。
安裝
首先當然需要一個可用的 Kubernetes 集群,然后在我們使用 Helm 的節點上已經配置好可以通過 kubectl 訪問集群,因為 Helm 其實就是讀取的 kubeconfig 文件來訪問集群的
下載到本地解壓后,將 helm 二進制包文件移動到任意的 PATH 路徑下即可:
$ helm version
version.BuildInfo{Version:"v3.6.1", GitCommit:"61d8e8c4a6f95540c15c6a65f36a6dd0a45e7a2f", GitTreeState:"clean", GoVersion:"go1.16.5"}
Helm 客戶端准備好了,我們就可以添加chart 倉庫,當然最常用的就是官方的 Helm stable charts 倉庫,但是由於官方的 charts 倉庫地址需要FQ,我們可以使用微軟的 charts 倉庫代替:
$ helm repo add stable http://mirror.azure.cn/kubernetes/charts/
$ helm repo list
NAME URL
stable http://mirror.azure.cn/kubernetes/charts/
安裝完成后可以用 search 命令來搜索可以安裝的 chart 包:
helm search repo stable // 查詢
helm repo list // 列出所有的資源
helm show values xxx 命令來查看一個 chart 包的所有可配置的參數選項:
升級和回滾
當新版本的 chart 包發布的時候,或者當你要更改 release 的配置的時候,你可以使用 helm upgrade 命令來操作。升級需要一個現有的 release,並根據提供的信息對其進行升級。因為 Kubernetes charts 可能很大而且很復雜,Helm 會嘗試以最小的侵入性進行升級,它只會更新自上一版本以來發生的變化:
$ helm upgrade -f panda.yaml mysql stable/mysql
helm upgrade -f panda.yaml mysql stable/mysql
Release "mysql" has been upgraded. Happy Helming!
NAME: mysql
LAST DEPLOYED: Fri Dec 6 21:06:11 2019
NAMESPACE: default
STATUS: deployed
REVISION: 2
...
我們可以使用 helm get values 來查看新設置是否生效:
helm get values mysql
USER-SUPPLIED VALUES:
mysqlDatabase: user0db
mysqlPassword: user0pwd
mysqlRootPassword: passw0rd
mysqlUser: user0
persistence:
enabled: false
helm get 命令是查看集群中 release 的非常有用的命令,正如我們在上面看到的,它顯示了 panda.yaml 中的新配置值被部署到了集群中,現在如果某個版本在發布期間沒有按計划進行,那么可以使用 helm rollback [RELEASE] [REVISION] 命令很容易回滾到之前的版本:
helm rollback mysql 1
可以看到 values 配置已經回滾到之前的版本了。上面的命令回滾到了 release 的第一個版本,每次進行安裝、升級或回滾時,修訂號都會加 1,第一個修訂號始終為1,我們可以使用 helm history [RELEASE] 來查看某個版本的修訂號。
可以運行
helm <command> --help來查看,這里我們介紹幾個有用的參數:
--timeout: 等待 Kubernetes 命令完成的時間,默認是 300(5分鍾)--wait: 等待直到所有 Pods 都處於就緒狀態、PVCs 已經綁定、Deployments 具有處於就緒狀態的最小 Pods 數量(期望值減去 maxUnavailable)以及 Service 有一個 IP 地址,然后才標記 release 為成功狀態。它將等待與--timeout值一樣長的時間,如果達到超時,則 release 將標記為失敗。注意:在 Deployment 將副本設置為 1 並且作為滾動更新策略的一部分,maxUnavailable 未設置為0的情況下,--wait將返回就緒狀態,因為它已滿足就緒狀態下的最小 Pod 數量--no-hooks: 將會跳過命令的運行 hooks--recreate-pods: 僅適用於 upgrade 和 rollback,這個標志將導致重新創建所有的 Pods。(Helm3 中啟用了)
