kubernetes實踐之五十二:Helm

百聯達發表於2018-06-06
一:簡介
在Kubernetes上進行容器化部署並非易事,通常需要先研究Docker映象的執行需求,環境變數等內容,並能為這些容器定製儲存,網路等裝置,最後設計和編寫Deployment,Configmap,Service及Ingress等相關yaml配置檔案,再提交給Kubernetes進行部署。這些複雜的過程將逐步被Helm應用包管理工具實現。

Helm是一個由CNCF孵化和管理的專案,用於對需要在Kubernetes上部署複雜應用進行定義,安裝和更新。Helm以Chart的方式對應用軟體資訊描述,可以方便地建立,版本化,共享和釋出複雜的應用軟體。

二:Helm的主要概念
1. Chart:是Helm管理的安裝包,裡面包含需要部署的安裝包資源。類似於yum中的rpm檔案。每個Chart包含下面兩部分:包的基本描述檔案Chart.yaml放在templates目錄中的一個或多個Kubernetes manifest檔案模板。
2.Release:在Kubernetes叢集上執行的一個Chart例項。在同一個叢集上,一個Chart可以安裝多次。例如一個MySQL Chart,如果想在伺服器上執行兩個MySQL資料庫,就可以基本這個Chart安裝兩次。每次安裝都會生成新的Release,會有獨立的Release名稱。
3.Repository: 用於存放和共享Chart的倉庫。


三:Helm的安裝

1.Helm由兩部分組成,客戶端helm和服務的tiller.

2.客戶端helm的安裝

點選(此處)摺疊或開啟

  1. curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh

  2. chmod 755 get_helm.sh

  3. ./get_helm.sh
在執行get_helm.sh指令碼的過程中,如果無法獲取helm安裝包,可以提前透過下載當前最新穩定版本的安裝包到當前目錄,再執行get_helm.sh檔案。    這裡使用的是helm-v2.9.1-linux-amd64.tar.gz。

3.客戶端tiller安裝

建立serviceaccount和clusterrolebinding

點選(此處)摺疊或開啟

  1. kubectl create serviceaccount --namespace kube-system tiller

  2. kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
安裝tiller

點選(此處)摺疊或開啟

  1. helm init -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.1
為tiller設定serviceaccount

點選(此處)摺疊或開啟

  1. kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
檢查是否安裝成功

點選(此處)摺疊或開啟

  1. kubectl -n kube-system get pods|grep tiller

  2. tiller-deploy-59c7578f9b-qqwpm 1/1 Running 0 17h

點選(此處)摺疊或開啟

  1. helm version

  2. Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
  3. Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}

四:Helm的使用

1.helm search: 搜尋可用的Chart
Helm初始化完成之後,預設配置為使用官方的Kubernetes Chart倉庫。官方倉庫包含大量的經過組織和持續維護的Chart,這個倉庫通常命名為stable。
可以用helm inspect <chart_name>命令檢視Chart的詳細資訊。

2.helm create:建立一個chart
helm create nginx

templates目錄下的deployment.yaml是部署應用的yaml檔案,其中的雙?括號包擴起來的部分是Go template,其中的Values是在 values.yaml ?件中定義。

a.charts目錄中是本chart依賴的chart,當前是空的
b.Chart.yaml這個yaml檔案用於描述Chart的基本資訊,如名稱版本等
c.templates是Kubernetes manifest檔案模板目錄,模板使用chart配置的值生成Kubernetes manifest檔案。模板檔案使用的Go語言模板語法
d.templates/NOTES.txt 純文字檔案,可在其中填寫chart的使用說明
e.value.yaml 是chart配置的預設值

3. helm install –dry-run –debug ./: 驗證模板和配置

點選(此處)摺疊或開啟

  1. [debug] Created tunnel using local port: '44785'

  2. [debug] SERVER: "127.0.0.1:44785"

  3. [debug] Original chart version: ""
  4. [debug] CHART PATH: /root/helm/nginx

  5. NAME: listless-blackbird
  6. REVISION: 1
  7. RELEASED: Wed Jun 6 10:00:49 2018
  8. CHART: nginx-0.1.0
  9. USER-SUPPLIED VALUES:
  10. {}

  11. COMPUTED VALUES:
  12. affinity: {}
  13. image:
  14.   pullPolicy: IfNotPresent
  15.   repository: nginx
  16.   tag: stable
  17. ingress:
  18.   annotations: {}
  19.   enabled: false
  20.   hosts:
  21.   - chart-example.local
  22.   path: /
  23.   tls: []
  24. nodeSelector: {}
  25. replicaCount: 1
  26. resources: {}
  27. service:
  28.   port: 80
  29.   type: ClusterIP
  30. tolerations: []

  31. HOOKS:
  32. MANIFEST:

  33. ---
  34. # Source: nginx/templates/service.yaml
  35. apiVersion: v1
  36. kind: Service
  37. metadata:
  38.   name: listless-blackbird-nginx
  39.   labels:
  40.     app: nginx
  41.     chart: nginx-0.1.0
  42.     release: listless-blackbird
  43.     heritage: Tiller
  44. spec:
  45.   type: ClusterIP
  46.   ports:
  47.     - port: 80
  48.       targetPort: http
  49.       protocol: TCP
  50.       name: http
  51.   selector:
  52.     app: nginx
  53.     release: listless-blackbird
  54. ---
  55. # Source: nginx/templates/deployment.yaml
  56. apiVersion: apps/v1beta2
  57. kind: Deployment
  58. metadata:
  59.   name: listless-blackbird-nginx
  60.   labels:
  61.     app: nginx
  62.     chart: nginx-0.1.0
  63.     release: listless-blackbird
  64.     heritage: Tiller
  65. spec:
  66.   replicas: 1
  67.   selector:
  68.     matchLabels:
  69.       app: nginx
  70.       release: listless-blackbird
  71.   template:
  72.     metadata:
  73.       labels:
  74.         app: nginx
  75.         release: listless-blackbird
  76.     spec:
  77.       containers:
  78.         - name: nginx
  79.           image: "nginx:stable"
  80.           imagePullPolicy: IfNotPresent
  81.           ports:
  82.             - name: http
  83.               containerPort: 80
  84.               protocol: TCP
  85.           livenessProbe:
  86.             httpGet:
  87.               path: /
  88.               port: http
  89.           readinessProbe:
  90.             httpGet:
  91.               path: /
  92.               port: http
  93.           resources:
  94.             {}
4.helm install : 安裝Chart
在安裝過程中,Helm客戶端會輸出一些有用的資訊,例如Release的狀態,以及額外的配置步驟等。在helm install過程中,可以使用helm status命令來跟蹤release狀態。

5.自定義Chart配置
a.--values 或者-f: 使用yaml配置檔案進行引數配置,可以配置多個檔案,最後一個優先生效。多個檔案中重複的value會進行覆蓋操作,不同的value會疊加生效。
b.--set: 在命令列直接設定引數
舉例:
helm install stable/mariadb -f config.yaml -f config2.yaml
helm install stable/mariadb --set mariadbDatabase=firstdb,mariadbRootPassword=abcdefg

6.helm upgrade和helm rollback: 應用的更新或回滾

helm upgrade會利用使用者提供的更新資訊來對Release進行更新。應為Kubernetes Chart可能會有很大的規模或者相對複雜的關係,helm 會嘗試進行最小影響的更新,只更新相對於上一個release來說發生變化的內容。

7.helm delete : 刪除一個Release

8.helm repo : 倉庫的使用
a. helm repo list : 列出所有倉庫

點選(此處)摺疊或開啟

  1. NAME     URL
  2. stable    https://kubernetes-charts.storage.googleapis.com
  3. local     http://127.0.0.1:8879/charts
b. helm repo add : 新增倉庫

c.helm repo update : 更新倉庫中的Chart資訊

9.快速製作自定義的Chart
同其它軟體開發過程一樣,快速製作一個簡單Chart的方法,就是從其它專案中複製並修改。例如我們要簡單地改寫前面MariaDB的Chart 令其使用本地的私有映象倉庫,可以按照如下步驟進行:
a. 下載Chart: 使用helm fetch stable/mariadb命令下載這一Chart的壓縮包
b.編輯Chart
c.利用tar 解壓後,將目錄重新命名為mymariadb
d.修改templates中的deployment.yaml
e.將Chart.yaml 中的版本號修改為0.1.1 name為mymariadb
f.使用helm package mymariadb打包chart,並生成一個名為mymariadb-0.11.tgz的壓縮包
g.安裝chart 透過helm install mymariadb-0.1.1.tgz命令將新生成的Chart安裝到叢集當中。

10. 搭建私有Repository
Chart倉庫主要由Chart壓縮包和索引檔案構成,透過HTTP/HTTPS 對外提供服務。
透過 helm repo index 建立索引



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2155690/,如需轉載,請註明出處,否則將追究法律責任。

相關文章