Helm 使用者指南-系列(5)-使用
使用Helm 本指南講述使用Helm(和Tiller)來管理Kubernetes群集上的軟體包的基礎知識。前提是假定你已經安裝了Helm客戶端和Tiller服務端(通常通過helm init)。 如果只是想執行一些簡單命令,可以從快速入門指南開始。本章將介紹Helm命令的具體內容,並解釋如何使用Helm。 我在網址 https://whmzsu.github.io/helm-doc-zh-cn/ 不斷更新,同時也會搬運到這裡,大家有興趣加入https://github.com/whmzsu/helm-doc-zh-cn/的可以給我提交意見和建議。 三大概念 Chart 是一個Helm包。它包含在Kubernetes叢集內部執行應用程式,工具或服務所需的所有資源定義。把它想像為一個自制軟體,一個Apt dpkg或一個Yum RPM檔案的Kubernetes環境裡面的等價物。 Repository 是Charts收集和共享的地方。它就像Perl的CPAN archive或Fedora軟體包repoFedora Package Database。 Release 是處於Kubernetes叢集中執行的Chart的一個例項。一個chart通常可以多次安裝到同一個群集中。每次安裝時,都會建立一個新 release 。比如像一個MySQL chart。如果希望在群集中執行兩個資料庫,則可以安裝該chart兩次。每個都有自己的 release,每個 release 都有自己的 release name。 有了這些概念,我們現在可以這樣解釋Helm: Helm將 charts 安裝到Kubernetes中,每個安裝建立一個新 release 。要找到新的chart,可以搜尋Helm charts 儲存庫 repositories。 ‘helm search’:查詢Charts 首次安裝Helm時,它已預配置為與官方Kubernetes chart 儲存庫repo。該repo包含許多精心策劃和維護的charts。此charts repo預設以stable命名。 可以通過執行helm search檢視哪些charts可用: $ helm search NAME VERSION DESCRIPTION stable/drupal 0.3.2 One of the most versatile open source content m... stable/jenkins 0.1.0 A Jenkins Helm chart for Kubernetes. stable/mariadb 0.5.1 Chart for MariaDB stable/mysql 0.1.0 Chart for MySQL ... 如果沒有使用過濾,helm search顯示所有可用的charts。可以通過使用過濾器進行搜尋來縮小搜尋結果範圍: $ helm search mysql NAME VERSION DESCRIPTION stable/mysql 0.1.0 Chart for MySQL stable/mariadb 0.5.1 Chart for MariaDB 現在只會看到過濾器匹配的結果。 為什麼mariadb在列表中?因為它的包描述與MySQL相關。我們可以使用helm inspect chart到這個: $ helm inspect stable/mariadb Fetched stable/mariadb to mariadb-0.5.1.tgz description: Chart for MariaDB engine: gotpl home: https://mariadb.org keywords: - mariadb
- mysql
- database
- sql ... 搜尋是找到可用軟體包的好方法。一旦找到想要安裝的軟體包,可以使用helm install它來安裝它。 ‘helm install’:安裝一個軟體包 要安裝新的軟體包,請使用該helm install命令。最簡單的方法,它只需要一個引數:chart的名稱。 $ helm install stable/mariadb Fetched stable/mariadb-0.3.0 to /Users/mattbutcher/Code/Go/src/k8s.io/helm/mariadb-0.3.0.tgz happy-panda Last Deployed: Wed Sep 28 12:32:28 2016 Namespace: default Status: DEPLOYED
Resources: ==> extensions/Deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
happy-panda-mariadb 1 0 0 0 1s ==> v1/Secret
NAME TYPE DATA AGE
happy-panda-mariadb Opaque 2 1s ==> v1/Service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
happy-panda-mariadb 10.0.0.70
kubectl run happy-panda-mariadb-client --rm --tty -i --image bitnami/mariadb --command -- mysql -h happy-panda-mariadb 當mariadb chart已安裝,請注意,安裝chart會建立一個新 release 物件。上面的release被命名 為happy-panda。(如果想使用自己的release名稱,只需使用 –name 引數 配合helm install。) 在安裝過程中,helm客戶端將列印有關建立哪些資源的有用資訊,release的狀態以及是否可以或應該採取其他的配置步驟。 Helm不會一直等到所有資源都執行完成才退出。許多charts需要大小超過600M的Docker 映象,並且可能需要很長時間才能安裝到群集中。 要跟蹤release狀態或重新讀取配置資訊,可以使用helm status: $ helm status happy-panda Last Deployed: Wed Sep 28 12:32:28 2016 Namespace: default Status: DEPLOYED
Resources: ==> v1/Service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
happy-panda-mariadb 10.0.0.70
kubectl run happy-panda-mariadb-client --rm --tty -i --image bitnami/mariadb --command -- mysql -h happy-panda-mariadb 以上顯示了release的當前狀態。 在安裝前自定義chart 上面的安裝方式使用chart的預設配置選項。很多時候,我們需要自定義chart以使用自定義配置。 要檢視chart上可配置的選項,請使用helm inspect values: helm inspect values stable/mariadb Fetched stable/mariadb-0.3.0.tgz to /Users/mattbutcher/Code/Go/src/k8s.io/helm/mariadb-0.3.0.tgz ## Bitnami MariaDB image version ## ref: https://hub.docker.com/r/bitnami/mariadb/tags/ ## ## Default: none imageTag: 10.1.14-r3
Specify a imagePullPolicy ## Default to 'Always' if imageTag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images ## # imagePullPolicy: ## Specify password for root user ## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#setting-the-root-password-on-first-run ## # mariadbRootPassword: ## Create a database user ## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#creating-a-database-user-on-first-run ## # mariadbUser: # mariadbPassword: ## Create a database ## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#creating-a-database-on-first-run ## # mariadbDatabase:
然後,可以在YAML格式的檔案中覆蓋任何這些設定,然後在安裝過程中傳遞該檔案。 $ echo '{mariadbUser: user0, mariadbDatabase: user0db}' > config.yaml $ helm install -f config.yaml stable/mariadb 以上將建立一個名稱為MariaDB的預設使用者user0,並授予此使用者對新建立user0db資料庫的訪問許可權,其他使用該chart的預設值。 在安裝過程中有兩種方式傳遞自定義配置資料:
–values(或-f):指定一個overrides的YAML檔案。可以指定多次,最右邊的檔案將優先使用 –set:在命令列上指定overrides。
如果兩者都使用,則將--set值合併到--values更高的優先順序中。指定的override --set將儲存在configmap中。--set可以通過使用特定的版本檢視已經存在的值 helm get values
--set格式和限制 --set選項使用零個或多個name/value對。最簡單的用法:–set name=value。YAML體現是: name: value 多個值由,字元分隔。因此–set a=b,c=d變成: a: b c: d 支援更復雜的表示式。例如,–set outer.inner=value變成這樣: outer: inner: value 列表可以通過在{和}中包含值來表示。例如, –set name={a, b, c}轉化為: name: - a
- c 從Helm 2.5.0開始,可以使用陣列索引語法訪問列表項。例如,–set servers[0].port=80變成: servers: - port: 80 可以通過這種方式設定多個值。該行–set servers[0].port=80,servers[0].host=example變成: servers: - port: 80 host: example 有時候你需要在--set行中使用特殊字元。可以使用反斜槓來轉義字元; –set name=value1,value2會變成: name: "value1,value2" 同樣,也可以轉義點序列,這可能在chart中使用toYaml函式解析註釋,標籤和節點選擇器時派上用場 。–set nodeSelector.”kubernetes.io/role”=master變為的語法 : nodeSelector: kubernetes.io/role: master 使用深層巢狀的資料結構可能很難用--set表達。鼓勵chart設計師在設計values.yaml檔案格式時考慮--set使用情況。 更多的安裝方法 helm install命令可以從多個來源安裝:
一個chart repository (像上面看到的) 一個本地 chart 壓縮包 (helm install foo-0.1.1.tgz) 一個解壓後的chart目錄 (helm install path/to/foo) 一個完整URL (helm install https://example.com/charts/foo-1.2.3.tgz)
‘helm upgrade’ and ‘helm rollback’:升級版本和失敗時恢復 當新版本的chart釋出時,或者當你想要更改release配置時,可以使用helm upgrade 命令。 升級需要已有的release並根據提供的資訊進行升級。由於Kubernetes chart可能很大而且很複雜,因此Helm會嘗試執行最小侵入式升級。它只會更新自上次釋出以來發生更改的內容。 $ helm upgrade -f panda.yaml happy-panda stable/mariadb Fetched stable/mariadb-0.3.0.tgz to /Users/mattbutcher/Code/Go/src/k8s.io/helm/mariadb-0.3.0.tgz happy-panda has been upgraded. Happy Helming! Last Deployed: Wed Sep 28 12:47:54 2016 Namespace: default Status: DEPLOYED ... 在上面的例子中,happy-panda release使用相同的chart進行升級,但使用新的YAML檔案: mariadbUser: user1 我們可以使用helm get values看看這個新設定是否生效。 $ helm get values happy-panda mariadbUser: user1 該helm get命令是檢視叢集中的release的有用工具。正如我們上面所看到的,它表明我們的新值 panda.yaml已被部署到群集中。 現在,如果在釋出過程中某些事情沒有按計劃進行,那麼使用回滾到以前的版本很容易helm rollback [RELEASE] [REVISION]。 $ helm rollback happy-panda 1 上述回滾我們的“happy-panda”到它的第一個release版本。release版本是增量修訂。每次安裝,升級或回滾時,修訂版本號都會增加1.第一個修訂版本號始終為1.我們可以使用helm history [RELEASE]檢視特定版本的修訂版號。 安裝/升級/回滾的有用選項 在安裝/升級/回滾期間,可以指定幾個其他有用的選項來定製Helm的行為。請注意,這不是cli引數的完整列表。要檢視所有引數的說明,請執行 helm –help。
--timeout:等待Kubernetes命令完成的超時時間值(秒),預設值為300(5分鐘)
--wait:等待所有Pod都處於就緒狀態,PVC繫結完,將release標記為成功之前,Deployments有最小(Desired-maxUnavailable)Pod處於就緒狀態,並且服務具有IP地址(如果是LoadBalancer,則為Ingress )。它會等待 --timeout的值。如果達到超時,release將被標記為 FAILED。注意:在部署replicas設定為1 maxUnavailable且未設定為0,作為滾動更新策略的一部分的情況下, --wait它將返回就緒狀態,因為它已滿足就緒狀態下的最小Pod。
--no-hooks:這會跳過命令的執行鉤子
--recreate-pods(僅適用於upgrade和rollback):此引數將導致重新建立所有pod(屬於deployment的pod除外)
‘helm delete’:刪除Release 在需要從群集中解除安裝或刪除release時,請使用以下helm delete命令: $ helm delete happy-panda 這將從叢集中刪除該release。可以使用以下helm list命令檢視當前部署的所有release: $ helm list NAME VERSION UPDATED STATUS CHART inky-cat 1 Wed Sep 28 12:59:46 2016 DEPLOYED alpine-0.1.0 從上面的輸出中,我們可以看到該happy-panda release已被刪除。 儘快如此,Helm總是保留記錄發生了什麼。需要檢視已刪除的版本?helm list --deleted 可顯示這些內容,並helm list --all顯示了所有release(已刪除和當前部署的,以及失敗的版本): ⇒ helm list --all NAME VERSION UPDATED STATUS CHART happy-panda 2 Wed Sep 28 12:47:54 2016 DELETED mariadb-0.3.0 inky-cat 1 Wed Sep 28 12:59:46 2016 DEPLOYED alpine-0.1.0 kindred-angelf 2 Tue Sep 27 16:16:10 2016 DELETED alpine-0.1.0 由於Helm保留已刪除release的記錄,因此不能重新使用release名稱。(如果 確實 需要重新使用此release名稱,則可以使用此 --replace引數,但它只會重用現有release並替換其資源。) 請注意,因為release以這種方式儲存,所以可以回滾已刪除的資源並重新啟用它。 ‘helm repo’:使用儲存庫 到目前為止,我們一直只從stable儲存庫repo安裝chart。但是可以配置helm使用其他repo。Helm在該helm repo命令下提供了多個repo工具。 可以使用helm repo list以下命令檢視配置了哪些repo: $ helm repo list NAME URL stable https://kubernetes-charts.storage.googleapis.com local http://localhost:8879/charts mumoshu https://mumoshu.github.io/charts 新的repo可以通過helm repo add新增: $ helm repo add dev https://example.com/dev-charts 由於chart repo經常更改,因此可以隨時通過執行helm repo updat確保Helm客戶端處於最新狀態。 建立你自己的charts 該chart開發指南Chart Development Guide 介紹瞭如何開發自己的charts。也可以通過使用以下helm create 命令快速入門: $ helm create deis-workflow Creating deis-workflow 現在有一個chart./deis-workflow。可以編輯它並建立自己的模板。 在編輯chart時,可以通過helm lint驗證它是否格式正確。 當將chart打包分發時,可以執行以下 helm package命令: $ helm package deis-workflow deis-workflow-0.1.0.tgz 現在可以通過helm install以下方式輕鬆安裝該chart: $ helm install ./deis-workflow-0.1.0.tgz ... 可以將已歸檔的chart載入到chart repo中。請參閱chart repo伺服器的文件以瞭解如何上傳。 注意:stable repo在Kubernetes Charts GitHub/">GitHub儲存庫上進行管理。該專案接受chart原始碼,並且(在審計後)自動打包。 Tiller,Namespaces和RBAC 在某些情況下,可能希望將Tiller的範圍或將多個Tillers部署到單個群集。以下是在這些情況下操作的一些最佳做法。
Tiller可以安裝到任何namespace。預設情況下,它安裝在kube-system中。可以執行多個Tillers,只要它們各自在自己的namespace中執行。
限制Tiller只能安裝到特定的namespace和/或資源型別由Kubernetes RBAC角色和角色繫結控制。可以通過在配置Helm時通過helm init --service-account
本章介紹了helm客戶端的基本使用模式,包括搜尋,安裝,升級和刪除。它也涵蓋了有用的工具命令類似如helm status,helm get和 helm repo。 有關這些命令的更多資訊,請檢視Helm的內建幫助:helm help。 在後面的章節中,我們將會講述開發chart的過程。
本文轉自kubernetes中文社群-Helm 使用者指南-系列(5)-使用