helm 概述
Helm
1. Helm 引入
-
之前方式部署應用的基本過程:
- 編寫 YAML 文件:
- Deployment
- Service
- Ingress
- 編寫 YAML 文件:
-
如果使用之前方式部署單一應用,少數服務的應用,比較合適:
- 例如部署微服務項目,可能有幾十個服務,每個服務都有一套 YAML 文件,需要維護大量 YAML 文件,版本管理特別不方便。
2. 使用 Helm 可以解決哪些問題?
- 使用 Helm 可以把這些 YAML 作為一個整體管理。
- 實現 YAML 高效複用。
- 使用 Helm 應用級別的版本管理。
3. Helm 介紹
Helm 是一個 Kubernetes 的包管理工具,類似於 Linux 下的包管理器,如 yum/apt 等,可以很方便地將之前打包好的 YAML 文件部署到 Kubernetes 上。
4.Helm 有 3 個重要概念:
-
Helm:
一個命令行客戶端工具,主要用於 Kubernetes 應用 Chart 的創建、打包、發布和管理。 -
Chart:
應用描述,一系列用於描述 Kubernetes 資源相關文件的集合。 -
Release:
基於 Chart 的部署實體。一個 Chart 被 Helm 運行後將會生成對應的一個 Release;
它會在 Kubernetes 中創建出真實運行的資源對象。
5.Helm 在 2019 年發布 V3 版本,和之前版本相比有變化
- V3 版本刪除 Tiller,架構變化。
- Release 可以在不同命名空間重用。
- 將 Chart 推送到 Docker 倉庫中。
以下是圖片內容的文字辨識及翻譯成繁體中文:
1. Helm 安裝
-
下載 Helm 安裝壓縮文件,上傳到 Linux 系統中
[root@k8smaster ~]# tar zxvf helm-v3.0.0-linux-amd64.tar.gz linux-amd64/helm linux-amd64/README.md linux-amd64/LICENSE
-
解壓 Helm 壓縮文件,將解壓後的 Helm 目錄複製到
/usr/bin
目錄下[root@k8smaster linux-amd64]# mv helm /usr/bin [root@k8smaster linux-amd64]# helm
2. 配置 Helm 倉庫
(1) 添加倉庫
helm repo add 倉庫名稱 倉庫地址
示例:
[root@k8smaster linux-amd64]# helm repo add stable http://mirror.azure.cn/kubernetes/charts
"stable" has been added to your repositories
檢查倉庫列表:
[root@k8smaster linux-amd64]# helm repo list
NAME URL
stable http://mirror.azure.cn/kubernetes/charts
(2) 更新倉庫地址
[root@k8smaster linux-amd64]# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "aliyun" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. Happy Helming!
(3) 刪除倉庫
[root@k8smaster linux-amd64]# helm repo remove aliyun
"aliyun" has been removed from your repositories
說明:
- 使用
helm repo remove <倉庫名稱>
可以刪除已添加的 Helm 倉庫。 - 這樣可以清理不再需要的倉庫條目,保持倉庫列表整潔。
以下是圖片內容的文字辨識及翻譯成繁體中文:
[root@k8smaster linux-amd64]# helm search repo weave
NAME CHART VERSION APP VERSION DESCRIPTION
stable/weave-cloud 0.3.7 1.4.0 Weave Cloud is a add-on...
stable/weave-scope 1.1.10 1.12.0 A Helm chart for the We...
[root@k8smaster linux-amd64]# helm install ui stable/weave-scope
NAME: ui
LAST DEPLOYED: Mon Sep 7 14:22:47 2020
NAMESPACE: default
STATUS: deployed
[root@k8smaster linux-amd64]# helm list
NAME NAMESPACE REVISION UPDATED STATUS
ui default 1 2020-09-07 14:22:47.383427149 +0800 CST deployed
[root@k8smaster linux-amd64]# helm status ui
NAME: ui
LAST DEPLOYED: Mon Sep 7 14:22:47 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
-
搜索 Helm 倉庫中的 Weave 應用
- 使用命令
helm search repo weave
,顯示兩個可用的應用:- stable/weave-cloud:版本 0.3.7,應用版本 1.4.0。
- stable/weave-scope:版本 1.1.10,應用版本 1.12.0。
- 使用命令
-
安裝 Weave Scope
- 使用命令
helm install ui stable/weave-scope
將 Weave Scope 安裝到 Kubernetes 中,並命名為 ui。
- 使用命令
-
查看已安裝的 Helm 應用列表
- 使用命令
helm list
,顯示應用 ui 已成功部署,位於命名空間 default。
- 使用命令
-
查看應用狀態
- 使用命令
helm status ui
,顯示應用名稱 ui,狀態為 deployed,部署版本為 1。
- 使用命令
以下是圖片內容的文字辨識及翻譯成繁體中文:
如何自己創建 Chart
1. 使用命令創建 Chart
helm create chart名稱
示例:
[root@k8smaster ~]# helm create mychart
Creating mychart
[root@k8smaster mychart]# ls
charts Chart.yaml templates values.yaml
- Chart.yaml:當前 Chart 屬性配置信息。
- templates:編寫 YAML 文件放到這個目錄中。
- values.yaml:YAML 文件可以使用全局變量。
2. 在 templates 文件夾創建兩個 YAML 文件
- deployment.yaml
- service.yaml
示例:
[root@k8smaster templates]# ls
deployment.yaml service.yaml
說明:
- Helm create 命令自動生成 Chart 的目錄結構和必要文件,方便進一步編輯。
- templates 文件夾 是放置 Kubernetes 配置文件(如 Deployment、Service 等 YAML 文件)的地方。
- values.yaml 文件允許定義變量,提供動態和靈活的配置支持。
以下是圖片內容的文字辨識及翻譯成繁體中文:
3. 安裝 mychart
[root@k8smaster ~]# helm install web1 mychart/
NAME: web1
LAST DEPLOYED: Mon Sep 7 15:03:17 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
說明:
-
命令解釋:
helm install
:用於安裝 Chart。web1
:為此次安裝命名為web1
。mychart/
:指定需要安裝的 Chart 目錄。
-
輸出信息:
- NAME:安裝的應用名稱,這裡是
web1
。 - LAST DEPLOYED:最後部署的時間。
- NAMESPACE:部署的命名空間,默認為
default
。 - STATUS:應用部署狀態,這裡是
deployed
(已部署)。 - REVISION:部署的版本號,這裡是
1
。 - TEST SUITE:測試套件信息,這裡是
None
(沒有測試)。
- NAME:安裝的應用名稱,這裡是
4. 應用升級
helm upgrade chart名稱
示例:
[root@k8smaster ~]# helm upgrade web1 mychart/
Release "web1" has been upgraded. Happy Helming!
說明:
-
命令解釋:
helm upgrade
:用於升級已部署的 Chart 應用。web1
:需要升級的應用名稱。mychart/
:指定升級所基於的 Chart 目錄。
-
輸出信息:
- Release "web1" has been upgraded:表示應用
web1
已成功升級。
- Release "web1" has been upgraded:表示應用
以下是圖片內容的文字辨識及翻譯成繁體中文:
實現 YAML 高效複用
- 通過傳遞參數,動態渲染模板,YAML 內容動態傳入參數生成。
[root@k8smaster mychart]# ls
charts Chart.yaml templates values.yaml
- 在 Chart 中有
values.yaml
文件,定義 YAML 文件全局變量。
操作步驟:
- 在
values.yaml
定義變量和值。 - 在具體 YAML 文件中,獲取定義變量值。
說明:
- YAML 文件大體有幾個地方不同的參數:
- image
- tag
- label
- port
- replicas
說明:
使用 values.yaml
提高了 Chart 的靈活性,可以輕鬆實現模板的複用和參數化,方便不同環境配置。