Kubernetes——Helm包管理工具
目錄
一、概念
1.Helm核心概念
2.Helm工作流程
3.Helm 3 與 Helm 2的區別
二、Helm部署
1.安裝Helm
1.1下載 Helm 客戶端
1.2安裝Helm
1.3驗證安裝
1.4命令補全
2.使用Helm安裝Chart
2.1新增Helm倉庫
2.2更新Helm倉庫
2.3檢視 Helm 倉庫列表
2.4刪除Helm倉庫
2.5檢視Chart資訊
2.6安裝 Chart
2.7檢視所有Release
2.8檢視Release狀態
2.9刪除Release
三、Helm Chart 自定義模板
1.檢視Chart檔案細節
2.拉取 Helm Chart
3.檢視Chart結構
4.Helm Chart結構
4.1Chart.yaml
4.2模板
4.3具體模板檔案
5.建立自定義的Chart
5.1建立自定義Helm Chart
5.2修改Helm Chart
5.3打包和部署Helm Chart
5.4部署Ingress-Nginx
5.5升級Helm Chart
四、回滾
1.回滾Helm Release
1.1檢視Release歷史
1.2執行回滾操作
1.3維護Helm Chart
1.4使用-set引數部署或升級Release
五、Helm倉庫
1.安裝Harbor
2.安裝Helm Push外掛
3.配置Helm倉庫
4.推送Chart 到 Harbor
六、總結
1.Helm命令總結
一、概念
Helm 是 Kubernetes 的包管理工具,它允許開發者和系統管理員透過定義、打包和部署應用程式來簡化 Kubernetes 應用的管理工作。Helm 的出現是為了解決在 Kubernetes 環境中部署和管理複雜應用的挑戰。Helm命令列客戶端工具,主要用於Kubernetes應用中的Chart的建立、打包、釋出和管理。
Helm 的官方網站是 Helm,在這裡可以找到 Helm 的安裝指南、文件、Chart 倉庫和社群貢獻資訊。透過 Helm,使用者可以更高效地管理和部署 Kubernetes 應用,實現快速迭代和持續整合。
1.Helm核心概念
-
• Chart:Helm 的 Chart 是一個軟體包,它包含了一組定義 Kubernetes 資源的 YAML 檔案。Chart 可以看作是 Kubernetes 應用的模板,它描述瞭如何部署一個應用,包括所需的 Deployments、Services、ConfigMaps 等資源。 -
• Repository:Helm 的 Repository 是一個儲存 Chart 的倉庫。使用者可以從這些倉庫中搜索、下載和安裝 Chart。每個 Repository 都有一個索引檔案,列出了可用的 Chart 和它們的版本。 -
• Release:當使用 helm install 命令部署一個 Chart 到 Kubernetes 叢集時,Helm 會建立一個 Release。Release 是 Chart 在叢集中的一個例項,它代表了特定版本的應用部署;一個Chart被Helm執行後將生成對應的一個Release(將在K8S中創建出真實執行的資源物件)。使用者可以對同一個 Chart 建立多個 Release,每個 Release 都有自己的配置和狀態。
Chart:Helm程式包,一系列用於描述K8S資源和相關檔案的集合,比方說我們部署Nginx,需要Deployment的Yaml,需要Service的Yaml,這兩個清單檔案就是一個Helm程式包,在K8S中把這些Yaml清單檔案叫做Chart圖表。Vlues.yaml檔案為模板中的檔案賦值,可以實現我們自定義安裝Chart—->透過Values.yaml檔案賦值—->生成Release例項
總結:Helm把Kubernetes資源打包到一個Chart中,製作並完成各個Chart和Chart 本身依賴關係並利用Chart倉庫實現對外分發,而Helm還可以透過Values.yaml檔案完成可配置的釋出,如果Chart版本更新了,Helm自動支援滾動更新機制,還可以一鍵回滾,但是不適合在生產環境使用,除非具有定義自制Chart的能力
2.Helm工作流程
-
• 查詢 Chart:使用者可以在 Helm 的 Repository 中查詢所需的 Chart。 -
• 安裝 Chart:使用 helm install 命令安裝 Chart 到 Kubernetes 叢集,建立一個 Release。 -
• 管理 Release:使用者可以使用 helm upgrade、helm rollback、helm uninstall 等命令來管理 Release,包括更新、回滾或解除安裝應用。 -
• 維護 Repository:使用者可以新增、更新和刪除 Helm Repository,以管理可用的 Chart。
3.Helm 3 與 Helm 2的區別
-
• Helm 2:在 Helm 2 中,採用了客戶端-伺服器模型,其中客戶端是 Helm,伺服器端是 Tiller。Tiller 作為 Kubernetes 叢集中的一個 Deployment 執行,負責管理 Helm 的 Release 和執行 Kubernetes 操作。 -
• Helm 3:Helm 3 移除了 Tiller,簡化了架構。現在,Helm 客戶端直接與 Kubernetes API 伺服器通訊,執行所有的 Kubernetes 操作。這減少了複雜性,並提高了安全性,因為不再需要在叢集中執行一個具有廣泛許可權的 Tiller 服務。

架構變化:
-
• Helm服務端Tiller被刪除 -
• Release名稱可以在不同名稱空間重用 -
• 支援將Chart推送至Docker映象倉庫中 -
• 使用JSONChema驗證Chartvalues
Helm版本以及其對應支援的Kubernetes版本
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
二、Helm部署
包括如何安裝 Helm 客戶端、新增和更新 Helm 倉庫、搜尋和檢視 Chart 資訊、安裝和解除安裝應用
1.安裝Helm
1.1下載 Helm 客戶端
訪問 Helm 的 GitHub 標籤頁面 https://github.com/helm/helm/releases 來下載適合作業系統的 Helm 版本。例如,如果使用的是 Linux 系統,可以下載 helm-v3.6.0-linux-amd64.tar.gz。
1.2安裝Helm
解壓下載的 Helm 壓縮包,並將其移動到系統的可執行路徑中,例如
/usr/local/bin
。tar -zxvf helm-v3.6.0-linux-amd64.tar.gzmv linux-amd64/helm /usr/local/bin/helm

1.3驗證安裝
#執行 helm version 來檢查 Helm 是否已成功安裝。helm version

1.4命令補全
#為了提高使用 Helm 的效率,可以啟用命令補全功能echo"source <(helm completion bash)" >> ~/.bashrc

2.使用Helm安裝Chart
2.1新增Helm倉庫
#新增常用的 Helm 倉庫,以便可以搜尋和安裝各種 Charthelm repo add bitnami https://charts.bitnami.com/bitnamihelm repo add stable http://mirror.azure.cn/kubernetes/chartshelm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/chartshelm repo add incubator https://charts.helm.sh/incubator

2.2更新Helm倉庫
#更新 Helm 倉庫列表,以確保可以訪問最新的 Chart 版本helm repo update

2.3檢視 Helm 倉庫列表
#檢視已新增的 Helm 倉庫helm repo list

2.4刪除Helm倉庫
#如果不再需要某個 Helm 倉庫,可以將其從列表中刪除helm repo remove incubator
2.5檢視Chart資訊
#檢視特定 Chart 的基本資訊或所有資訊helm show chart stable/mysql# 檢視基本資訊helm show all stable/mysql# 獲取所有資訊


2.6安裝 Chart
#使用 helm install 命令安裝 Chart。可以指定一個 release 名稱,或者使用 --generate-name 讓 Helm 為生成一個隨機名稱helm install my-redis bitnami/redis [-n default]# 指定 release 名稱helm install bitnami/redis --generate-name# 自動生成 release 名稱
2.7檢視所有Release
#列出所有已安裝的 Helm releasehelm ls#helm list 來獲取更詳細的資訊helm list

2.8檢視Release狀態
#檢視特定 release 的狀態資訊helm status my-redis

2.9刪除Release
#使用 helm uninstall 命令刪除指定的 Helm releasehelm uninstall my-redis

三、Helm Chart 自定義模板
1.檢視Chart檔案細節
charts 除了可以在 repo 中下載,還可以自己自定義,建立完成後透過 helm 部署到 k8s
Helm Chart 是 Helm 用來部署 Kubernetes 應用的包。一個 Chart 包含一系列的 Kubernetes 資源定義檔案(YAML 格式),以及一個描述 Chart 的 Chart.yaml 檔案和一個用於配置的 values.yaml 檔案。自定義 Helm Chart 允許根據具體需求來建立和部署 Kubernetes 應用。
2.拉取 Helm Chart
mkdir /opt/helmcd /opt/helmhelm pull stable/mysqllsmysql-1.6.9.tgz

3.檢視Chart結構
tar xf mysql-1.6.9.tgzyum install -y treetree mysqlmysql├── Chart.yaml #包含 chart 的元資料├── README.md #提供關於 chart 的資訊和使用說明├── templates #包含 chart 的模板檔案│ ├── configurationFiles-configmap.yaml #配置檔案的 ConfigMap 模板│ ├── deployment.yaml #Deployment 資源的模板│ ├── _helpers.tpl #輔助模板檔案│ ├── initializationFiles-configmap.yaml #初始化檔案的 ConfigMap 模板│ ├── NOTES.txt #安裝後的說明和注意事項│ ├── pvc.yaml #PersistentVolumeClaim 資源的模板│ ├── secrets.yaml #Secret 資源的模板│ ├── serviceaccount.yaml #ServiceAccount 資源的模板│ ├── servicemonitor.yaml #ServiceMonitor 資源的模板│ ├── service.yaml #Service 資源的模板│ ├── ingress.yaml #Ingress 資源的模板│ └── tests #包含測試相關的模板檔案│ ├── test-configmap.yaml│ └── test.yaml└── values.yaml #包含 chart 的預設配置值#透過這個結構,我們可以看到 Helm chart 是如何組織和管理 Kubernetes 應用程式的部署配置的。使用者可以根據需要編輯這些檔案,以自定義應用程式的行為和配置。

4.Helm Chart結構
Helm chart 的關鍵組成部分的詳細說明
4.1Chart.yaml
-
• 這是 Helm chart 的自描述檔案,它包含了 chart 的基本資訊。 -
• 必須包含 name 欄位,用於指定 chart 的名稱。 -
• 必須包含 version 欄位,用於指定 chart 的版本號。 -
• 還可以包含其他元資料,如描述、圖示、維護者資訊等。
4.2模板
-
• Helm chart 包含一個或多個模板,這些模板是 Kubernetes 資源清單檔案的文字模板。 -
• 模板中可以包含 Go 模板 語法,用於動態生成 Kubernetes 清單檔案。 -
• 模板會根據 values.yaml 檔案中的值進行填充和處理,生成最終的 Kubernetes 資源清單。
4.3具體模板檔案
-
• NOTES.txt:這是一個文字檔案,包含安裝 chart 後顯示給使用者的資訊,通常包括配置提示、使用說明等。 -
• deployment.yaml:這個模板定義了一個 Kubernetes Deployment 資源,用於指定如何部署應用程式的副本。 -
• service.yaml:這個模板定義了一個 Kubernetes Service 資源,通常用於提供對 Deployment 的網路訪問。 -
• ingress.yaml:這個模板定義了一個 Kubernetes Ingress 資源,用於管理外部訪問到 Service 的路由。 -
• _helpers.tpl:這個檔案包含可重用的模板助手函式,可以在 chart 的其他模板中呼叫。
透過這些元件,Helm charts 為 Kubernetes 應用程式的部署提供了一種標準化和自動化的方法。使用者可以透過修改 values.yaml 檔案和模板來定製應用程式的部署,然後使用 Helm 命令進行部署和管理。
5.建立自定義的Chart
5.1建立自定義Helm Chart
helm create nginx#建立一個新的 Helm chart,例如 nginxtree nginxnginx├── charts├── Chart.yaml├── templates│ ├── deployment.yaml│ ├── _helpers.tpl│ ├── hpa.yaml│ ├── ingress.yaml│ ├── NOTES.txt│ ├── serviceaccount.yaml│ ├── service.yaml│ └── tests│ └── test-connection.yaml└── values.yamlcat nginx/templates/deployment.yaml#檢視 templates/deployment.yaml 檔案,瞭解如何在模板中使用 Go 模板語法引用 values.yaml 中的變數#在 templates 目錄下 yaml 檔案模板中的變數(go template語法)的值預設是在 nginx/values.yaml 中定義的,只需要修改 nginx/values.yaml 的內容,也就完成了 templates 目錄下 yaml 檔案的配置。比如在 deployment.yaml 中定義的容器映象:image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"cat nginx/values.yaml | grep repository repository: nginx#以上變數值是在 create chart 的時候就自動生成的預設值,你可以根據實際情況進行修改。



5.2修改Helm Chart
#修改 chartvim nginx/Chart.yamlapiVersion: v2name: nginx #chart名字description: A Helm chart for Kubernetestype: application #chart型別,application或libraryversion: 0.1.0 #chart版本appVersion: 1.16.0 #application部署版本vim nginx/values.yamlreplicaCount: 1image: repository: nginx pullPolicy: IfNotPresent tag: "latest"#設定映象標籤,加上該內容imagePullSecrets: []nameOverride: ""fullnameOverride: ""serviceAccount: create: true annotations: {} name: ""podAnnotations: {}podSecurityContext: {}# fsGroup: 2000securityContext: {}# capabilities:# drop:# - ALL# readOnlyRootFilesystem: true# runAsNonRoot: true# runAsUser: 1000service:type: ClusterIP port: 80ingress: enabled: true#開啟 ingress className: "" annotations: {}# kubernetes.io/ingress.class: nginx# kubernetes.io/tls-acme: "true" hosts: - host: www.cxk.com #指定ingress域名 paths: - path: / pathType: Prefix #指定ingress路徑型別 tls: []# - secretName: chart-example-tls# hosts:# - chart-example.localresources: limits: cpu: 100m memory: 128Mi requests: cpu: 100m memory: 128Miautoscaling: enabled: false minReplicas: 1 maxReplicas: 100 targetCPUUtilizationPercentage: 80# targetMemoryUtilizationPercentage: 80nodeSelector: {}tolerations: []affinity: {}

5.3打包和部署Helm Chart
helm lint nginx#檢查依賴和模版配置是否正確helm package nginx#打包 chart,會在當前目錄下生成壓縮包 nginx-0.1.0.tgz#部署 charthelm install nginx ./nginx --dry-run --debug#使用 --dry-run 引數驗證 Chart 的配置,並不執行安裝helm install nginx ./nginx -n default#部署 chart,release 版本預設為 1或者helm install nginx ./nginx-0.1.0.tgz#可根據不同的配置來 install,預設是 values.yamlhelm install nginx ./nginx -f ./nginx/values.yamlhelm lskubectl get pod,svc




5.4部署Ingress-Nginx
#部署 ingresswget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yamlwget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml#下載 Ingress-Nginx 的配置檔案 mandatory.yaml 和 service-nodeport.yamlkubectl apply -f mandatory.yamlkubectl apply -f service-nodeport.yaml#使用 kubectl apply 命令應用這些配置檔案,以部署 Ingress 控制器和 NodePort 型別的 Servicekubectl get pod,svc -n ingress-nginxkubectl get ingressvim /etc/hosts.....192.168.241.23 node02 www.cxk.comcurl http://www.cxk.com:32733



5.5升級Helm Chart
#修改為 NodePort 訪問後,升級vim nginx/values.yamlservice:type: NodePort#修改 values.yaml 檔案以更改 Service 型別為 NodePort 並設定 nodePort port: 80 nodePort: 30080ingress: enabled: falsevim nginx/templates/service.yaml#模板以反映 Service 型別的變化apiVersion: v1kind: Servicemetadata: name: {{ include "nginx.fullname" . }} labels: {{- include "nginx.labels" . | nindent 4 }}spec:type: {{ .Values.service.type }} ports: - port: {{ .Values.service.port }} targetPort: http protocol: TCP name: http nodePort: {{ .Values.service.nodePort }}#指定 nodePort selector: {{- include "nginx.selectorLabels" . | nindent 4 }}#升級 release,release 版本加 1helm upgrade nginx nginx kubectl get svccurl 192.168.241.23:30080

透過這些步驟,可以建立和部署自定義的 Helm charts,以及管理和配置 Kubernetes 叢集中的 Ingress 規則。這些步驟提供了一個從建立到部署再到升級的完整流程,有助於理解 Helm charts 的使用和管理。
四、回滾
使用 Helm 進行回滾操作以及如何在命令列中使用
--set
引數來部署或升級 Helm release 的資訊1.回滾Helm Release
1.1檢視Release歷史
helm history nginx#使用 helm history 命令檢視 Helm release 的歷史記錄,包括每次更新的詳細資訊和狀態

1.2執行回滾操作
helm rollback nginx 1#使用 helm rollback 命令加上 release 名稱和要回滾到的版本號來執行回滾操作。helm history nginx#執行回滾後,可以再次使用 helm history 命令確認 release 是否已經成功回滾到指定版本

1.3維護Helm Chart
在 Helm chart 的
templates
目錄下的 Kubernetes 清單檔案配置好後,通常的維護工作主要涉及修改 Chart.yaml
和 values.yaml
檔案。-
• Chart.yaml
:更新 chart 的元資料,如版本號、描述等。 -
• values.yaml
:調整或新增配置引數,這些引數將應用於模板中,以定製 Kubernetes 資源的行為。
1.4使用-set引數部署或升級Release
在部署或升級 Helm release 時,可以使用
--set
引數在命令列中直接指定配置值。這些值將覆蓋 values.yaml
檔案中的同名引數。#例如,要將 Nginx chart 的映象標籤升級到 1.15,可以使用以下命令helm upgrade nginx nginx --set image.tag='1.15'#這個命令會更新 Nginx chart 的映象標籤,而無需修改 values.yaml 檔案。這種快捷方式在需要快速更改配置或在沒有訪問 values.yaml 檔案的情況下非常有用。

總結來說,Helm 提供了靈活的方式來管理和維護 Kubernetes 應用程式的部署。透過回滾功能,可以輕鬆撤銷更改;透過--set
引數,可以在部署或升級時動態調整配置。這些功能使得 Helm 成為 Kubernetes 叢集中應用程式部署和維護的強有力工具。
五、Helm倉庫
使用 Harbor 作為本地 Helm 倉庫,並將自定義的 Helm chart 推送至 Harbor 倉庫的詳細步驟
1.安裝Harbor
-
1. 準備 Harbor 的離線安裝包 harbor-offline-installer-v1.9.1.tgz 和 docker-compose 檔案。 -
2. 配置 harbor.yml 檔案,設定 Harbor 的主機名、管理員密碼、資料儲存路徑等。 -
3. 使用 ./install.sh –with-clair –with-chartmuseum 命令安裝 Harbor,並啟用 Clair 服務和 chart 倉庫服務。
#上傳 harbor-offline-installer-v1.9.1.tgz 和 docker-compose 檔案到 /opt 目錄cd /optcp docker-compose /usr/local/bin/chmod +x /usr/local/bin/docker-composecurl -SL https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose#如果安裝最新版的Docker需要安裝高版本的Docker-Composewget https://storage.googleapis.com/harbor-releases/release-1.9.0/harbor-offline-installer-v1.9.1.tgztar zxf harbor-offline-installer-v1.9.1.tgzcd harbor/vim harbor.ymlhostname: 192.168.241.24harbor_admin_password: Harbor12345 #admin使用者初始密碼data_volume: /data #資料儲存路徑,自動建立chart: absolute_url: enabled #在chart中啟用絕對urllog: level: infolocal: rotate_count: 50 rotate_size: 200M location: /var/log/harbor #日誌路徑#安裝帶有 Clair service 和 chart 倉庫服務的 Harbor./install.sh --with-clair --with-chartmuseum


2.安裝Helm Push外掛
#線上安裝 Helm Push 外掛helm plugin install https://github.com/chartmuseum/helm-push
wget https://github.com/chartmuseum/helm-push/releases/download/v0.8.1/helm-push_0.8.1_linux_amd64.tar.gz#離線安裝 Helm Push 外掛:mkdir ~/.local/share/helm/plugins/helm-push -ptar -zxvf helm-push_0.8.1_linux_amd64.tar.gz -C ~/.local/share/helm/plugins/helm-pushhelm repo ls


3.配置Helm倉庫
helm repo add harbor http://192.168.241.24/chartrepo/chart_repo --username=admin --password=Harbor12345#登入到 Harbor 的 Web UI 介面,並建立一個新專案 chart_repo。#瀏覽器訪問:http://192.168.241.24 ,預設的管理員使用者名稱和密碼是 admin/Harbor12345 點選 “+新建專案” 按鈕 填寫專案名稱為 “chart_repo”,訪問級別勾選 “公開”,點選 “確定” 按鈕,建立新專案#新增 Harbor 專案作為 Helm 倉庫:#這裡的 repo 的地址是/chartrepo/,Harbor 中每個專案是分開的 repo。如果不提供專案名稱, 則預設使用 library 這個專案。



4.推送Chart 到 Harbor
cd /opt/helm push nginx harbor#使用 helm push 命令將 chart 推送到 Harbor 倉庫


在 Harbor 的 Web UI 介面中檢視
chart_repo
專案,確認已成功推送的 Helm Charts透過這些步驟,可以將自定義的 Helm charts 推送到本地的 Harbor 倉庫中,從而實現 Helm charts 的儲存、管理和分發。Harbor 作為一個企業級的 Docker Registry 管理專案,也支援 Helm charts 的儲存和分發,這使得它成為 Kubernetes 環境中管理 Helm charts 的理想選擇。
六、總結
1.Helm命令總結
Helm命令總結
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
連結:https://blog.csdn.net/weixin_46560589/article/details/135459378?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522f9585e78ffe4dac31371aa77b1734e14%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=f9585e78ffe4dac31371aa77b1734e14&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-135459378-null-null.142^v102^pc_search_result_base6&utm_term=helm&spm=1018.2226.3001.4187
(版權歸原作者所有,侵刪)
文末福利
就目前來說,傳統運維衝擊年薪30W+的轉型方向就是SRE&DevOps崗位。
為了幫助大家早日擺脫繁瑣的基層運維工作,給大家整理了一套高階運維工程師必備技能資料包,內容有多詳實豐富看下圖!
共有 20 個模組





······



以上所有資料獲取請掃碼
備註:最新運維資料

100%免費領取
(後臺不再回復,掃碼一鍵領取)