kubernetes實踐之五十二:Helm
一:簡介
在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的安裝
在執行get_helm.sh指令碼的過程中,如果無法獲取helm安裝包,可以提前通過https://github.com/kubernetes/helm/releases下載當前最新穩定版本的安裝包到當前目錄,再執行get_helm.sh檔案。 這裡使用的是helm-v2.9.1-linux-amd64.tar.gz。
3.客戶端tiller安裝
建立serviceaccount和clusterrolebinding
安裝tiller
為tiller設定serviceaccount
檢查是否安裝成功
四: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 ./: 驗證模板和配置
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 : 列出所有倉庫
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 建立索引
在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的安裝
點選(此處)摺疊或開啟
-
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
-
-
chmod 755 get_helm.sh
-
- ./get_helm.sh
3.客戶端tiller安裝
建立serviceaccount和clusterrolebinding
點選(此處)摺疊或開啟
-
kubectl create serviceaccount --namespace kube-system tiller
-
- kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
點選(此處)摺疊或開啟
- helm init -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.1
點選(此處)摺疊或開啟
- kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
點選(此處)摺疊或開啟
-
kubectl -n kube-system get pods|grep tiller
-
- tiller-deploy-59c7578f9b-qqwpm 1/1 Running 0 17h
點選(此處)摺疊或開啟
-
helm version
-
-
Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
- 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 ./: 驗證模板和配置
點選(此處)摺疊或開啟
-
[debug] Created tunnel using local port: '44785'
-
-
[debug] SERVER: "127.0.0.1:44785"
-
-
[debug] Original chart version: ""
-
[debug] CHART PATH: /root/helm/nginx
-
-
NAME: listless-blackbird
-
REVISION: 1
-
RELEASED: Wed Jun 6 10:00:49 2018
-
CHART: nginx-0.1.0
-
USER-SUPPLIED VALUES:
-
{}
-
-
COMPUTED VALUES:
-
affinity: {}
-
image:
-
pullPolicy: IfNotPresent
-
repository: nginx
-
tag: stable
-
ingress:
-
annotations: {}
-
enabled: false
-
hosts:
-
- chart-example.local
-
path: /
-
tls: []
-
nodeSelector: {}
-
replicaCount: 1
-
resources: {}
-
service:
-
port: 80
-
type: ClusterIP
-
tolerations: []
-
-
HOOKS:
-
MANIFEST:
-
-
---
-
# Source: nginx/templates/service.yaml
-
apiVersion: v1
-
kind: Service
-
metadata:
-
name: listless-blackbird-nginx
-
labels:
-
app: nginx
-
chart: nginx-0.1.0
-
release: listless-blackbird
-
heritage: Tiller
-
spec:
-
type: ClusterIP
-
ports:
-
- port: 80
-
targetPort: http
-
protocol: TCP
-
name: http
-
selector:
-
app: nginx
-
release: listless-blackbird
-
---
-
# Source: nginx/templates/deployment.yaml
-
apiVersion: apps/v1beta2
-
kind: Deployment
-
metadata:
-
name: listless-blackbird-nginx
-
labels:
-
app: nginx
-
chart: nginx-0.1.0
-
release: listless-blackbird
-
heritage: Tiller
-
spec:
-
replicas: 1
-
selector:
-
matchLabels:
-
app: nginx
-
release: listless-blackbird
-
template:
-
metadata:
-
labels:
-
app: nginx
-
release: listless-blackbird
-
spec:
-
containers:
-
- name: nginx
-
image: "nginx:stable"
-
imagePullPolicy: IfNotPresent
-
ports:
-
- name: http
-
containerPort: 80
-
protocol: TCP
-
livenessProbe:
-
httpGet:
-
path: /
-
port: http
-
readinessProbe:
-
httpGet:
-
path: /
-
port: http
-
resources:
- {}
在安裝過程中,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 : 列出所有倉庫
點選(此處)摺疊或開啟
-
NAME URL
-
stable https://kubernetes-charts.storage.googleapis.com
- local http://127.0.0.1:8879/charts
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- kubernetes實戰篇之helm完整示例
- kubernetes實戰篇之helm使用技巧
- kubernetes實戰篇之helm安裝
- kubernetes實戰篇之helm填坑與基本命令
- kubernetes實踐之十一:EFK
- kubernetes實踐之六十:Cabin-Manage Kubernetes
- kubernetes實踐之五十七:PodPreset
- kubernetes實踐之五十八:CronJob
- kubernetes實踐之五十九:NetworkPolicy
- kubernetes實踐之十九:API概述API
- kubernetes實踐之十七:架構架構
- kubernetes實踐之八:TLS bootstrappingTLSbootAPP
- [kubernetes]helm安裝
- kubernetes實踐之十:Kubernetes-dashboard+Heapster+InfluxDB+GrafanaUXGrafana
- kubernetes實踐之四十二:StatefulSet
- kubernetes實踐之六十四:CoreDNSDNS
- kubernetes實踐之五十六:雲原生
- kubernetes實踐之五:網路模型模型
- kubernetes實踐之十二:部署Traefik Ingress
- kubernetes實踐之九:kube-dnsDNS
- GitOps實踐之kubernetes安裝argocdGitGo
- kubernetes實踐之五十五:kubectl之配置kubeconfig
- Kubernetes Helm入門指南
- Kubernetes雲原生儲存解決方案openebs部署實踐-3.10.0版本(helm部署)
- kubernetes實戰篇之helm示例yaml檔案檔案詳細介紹YAML
- kubernetes實踐之十四:Service Account與Secret
- kubernetes實踐之四十七:ResourceQuota ControllerController
- kubernetes實踐之六十五:Service Mesh
- kubernetes實踐之六十二:Secret 使用
- kubernetes實踐之六十三:使用技巧
- kubernetes生產實踐之redis-clusterRedis
- 從Helm2遷移到 Helm v3 的最佳實踐
- kubernetes實踐之七十二:Istio之策略與遙測
- kubernetes實踐之七十三:Istio之配置請求路由路由
- kubernetes實踐之七十:Istio之流量管理(上)
- kubernetes實踐之十六:RBAC 角色訪問控制
- kubernetes實踐之四十九:Scheduler原理分析
- kubernetes實踐之四十四:Ingress詳解