階段一:了解 Helm 的基礎(chǔ)知識和概念
Helm 簡介:
- Helm 是 Kubernetes 的一個包管理工具,用于簡化應(yīng)用程序在 Kubernetes 上的部署和管理過程。
- 它允許您使用預(yù)定義的模板(Charts)來描述應(yīng)用程序的組件、依賴關(guān)系和配置。
- Helm Charts 可以重復(fù)使用,提高了應(yīng)用程序的可維護(hù)性和可擴(kuò)展性。
Helm 架構(gòu)
- Helm 包含兩個主要組件:Helm 客戶端和 Tiller(在 Helm 3 中已移除)。
- Helm 客戶端用于與用戶交互,管理 Charts 和發(fā)布 Releases。
- Tiller 是 Helm 的服務(wù)端組件,負(fù)責(zé)在 Kubernetes 集群中創(chuàng)建和管理資源。
Helm Charts
- Helm Chart 是一個預(yù)定義的應(yīng)用程序模板,用于描述如何在 Kubernetes 上部署應(yīng)用程序。
- Chart 包含 Kubernetes 資源定義文件(YAML 格式),如 Deployment、Service、ConfigMap 等。
- Chart 中使用模板引擎(Go 的 text/template 和 sprig 函數(shù)庫)來生成可配置的 Kubernetes 資源。
- Chart 還包含 values.yaml 文件,用于存儲配置選項和參數(shù)化的值,使 Chart 可以根據(jù)不同的環(huán)境進(jìn)行配置。
階段二:安裝和配置 Helm
安裝 Helm
- 按照 Helm 官方網(wǎng)站的安裝指南進(jìn)行安裝。通常,您可以從 Helm GitHub 存儲庫下載適用于您的操作系統(tǒng)的最新版本。
- 安裝完成后,確保將 Helm 可執(zhí)行文件添加到系統(tǒng) PATH 中,以便在任何目錄下都可以運行 Helm 命令。
初始化 Helm(對于 Helm 2)
- 使用?helm init?命令在 Kubernetes 集群上初始化 Helm,并部署 Tiller。
- 在 Helm 3 中,Tiller 已被移除,初始化過程變得更加簡單,您不再需要執(zhí)行?helm init。
添加 Helm 倉庫
- Helm 倉庫是存儲 Helm Charts 的地方。您可以從默認(rèn)的公共倉庫獲取 Charts,也可以添加自定義的倉庫。
- 使用
helm repo add
- 命令添加倉庫,比如添加 stable 倉庫:
helm repo add stable https://charts.helm.sh/stable
階段三:使用 Helm 管理應(yīng)用程序
搜索和查看 Charts
- 使用?helm search repo?命令來搜索 Helm 倉庫中的 Charts,并查看 Charts 的詳細(xì)信息。
- 例如,搜索 WordPress Chart:
helm search repo wordpress
- 查看 Chart 的詳細(xì)信息:
helm show chart stable/wordpress
安裝應(yīng)用程序
- 使用?helm install?命令安裝 Helm Chart 到 Kubernetes 集群。
- 例如,安裝 WordPress Chart:
helm install my-wordpress stable/wordpress
- 上述命令會將 WordPress 安裝為一個 Helm Release,Release 名稱為 my-wordpress。
查看已安裝的應(yīng)用程序
- 使用?helm list?命令查看已安裝的 Helm Releases 及其狀態(tài)。
- 例如,查看已安裝的 Releases:
helm list
卸載應(yīng)用程序
- 使用?helm uninstall?命令卸載已安裝的 Helm Release。
- 例如,卸載名為 my-wordpress 的 Release:
helm uninstall my-wordpress
更新應(yīng)用程序
- 使用?helm upgrade?命令更新已安裝的 Helm Release。
- 例如,更新 my-wordpress Release 的 Chart 版本:
helm upgrade my-wordpress stable/wordpress --version 9.0.0
回滾應(yīng)用程序
- 使用?helm rollback?命令回滾到之前的 Helm Release 版本。
- 例如,回滾 my-wordpress Release 到第一個版本:
helm rollback my-wordpress 1
階段四:編寫自定義的 Helm Charts
Chart 結(jié)構(gòu)
- Helm Chart 的目錄結(jié)構(gòu)非常重要,它影響了 Chart 的可讀性和維護(hù)性。
- 典型的 Chart 目錄結(jié)構(gòu)如下:
├── Chart.yaml # Chart 的元信息,包括版本、名稱、描述等
├── values.yaml # 默認(rèn)的配置值
├── charts/ # 用于存放其他依賴的 Helm Charts
└── templates/ # 存放模板文件,生成 Kubernetes 資源
Chart 模板
- Helm 使用 Go 的 text/template 和 sprig 函數(shù)庫作為模板引擎,模板中包含注釋和代碼。
- 模板中的重要變量有?.Values、.Release?和?.Template。
.Values
- 可用于訪問 values.yaml 中定義的值,例如:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.appName }}
Values 文件
- Values 文件用于存儲配置選項和參數(shù)化 Chart 的部署,使 Chart 可以在不同環(huán)境中進(jìn)行配置。
- 在 values.yaml 文件中,您可以定義默認(rèn)的配置值,并且在模板文件中使用這些值。
- 例如,在 values.yaml 中定義:
appName: my-app
replicas: 3
image:
repository: myregistry/my-app
tag: latest
依賴管理
- Helm 允許您在 Chart 中管理依賴關(guān)系,這樣您可以更好地組織和復(fù)用 Charts。
- 可以在 Chart.yaml 中使用?dependencies?字段指定依賴的 Charts。
- 通過?helm dependency?命令下載和更新依賴的 Charts。
- 了解如何在 Chart 中使用依賴的資源,例如,將其他 Chart 中的服務(wù)作為子 Chart 部署到您的應(yīng)用程序中。
階段五:高級主題
使用 Helm Hooks
Helm Hooks 允許您在特定階段執(zhí)行腳本,例如在安裝、升級或刪除 Helm Release 的不同生命周期中。這對于執(zhí)行應(yīng)用程序初始化、數(shù)據(jù)庫遷移、配置更新等操作非常有用。
使用 Helm Hooks 的一般步驟:
- 在 Chart 中定義 Hooks:在 Chart 的?templates?目錄中,創(chuàng)建一個或多個以?.yaml?結(jié)尾的文件,這些文件將包含 Hook 的定義。例如,templates/pre-install.yaml?文件定義了一個在安裝 Release 前執(zhí)行的 Hook。
- 使用 Hook 模板:在 Hook 模板中,您可以使用 Helm 的模板引擎來生成 Kubernetes 資源,就像您在其他模板中所做的那樣。
- 在 Chart 的?Chart.yaml?文件中指定 Hook:在?Chart.yaml?文件的?hooks?部分,您可以為每個 Hook 文件定義一個條目,以指定何時執(zhí)行該 Hook。
使用示例:
假設(shè)您有一個?pre-install.yaml?文件,其中包含以下內(nèi)容:
apiVersion: batch/v1
kind: Job
metadata:
name: {{ .Release.Name }}-pre-install-job
spec:
template:
spec:
containers:
- name: pre-install
image: busybox
command: ['sh', '-c', 'echo "Pre-install hook executed"']
restartPolicy: Never
在?Chart.yaml?文件的?hooks?部分,添加以下內(nèi)容:
hooks:
pre-install:
- name: pre-install-job
manifest: templates/pre-install.yaml
這樣,在安裝 Release 之前,Helm 將創(chuàng)建一個名為?pre-install-job?的 Job,并在其中執(zhí)行定義的操作。
使用 Helm Secrets
Helm Secrets 是一個 Helm 插件,用于管理加密的敏感信息,如密碼、證書等。它使用 PGP 密鑰對敏感數(shù)據(jù)進(jìn)行加密,確保在 Chart 中不明文存儲敏感信息。
使用 Helm Secrets 的一般步驟:
- 安裝 Helm Secrets:首先,您需要安裝 Helm Secrets 插件。您可以通過在 Helm 客戶端上執(zhí)行以下命令來安裝它:
helm plugin install https://github.com/zendesk/helm-secrets
- 初始化 Helm Secrets:在 Helm Chart 中使用 Helm Secrets 插件之前,需要對 Chart 進(jìn)行初始化,以確保密鑰環(huán)境正確設(shè)置。
helm secrets init <path/to/your/chart>
- 加密敏感信息:在 Chart 的 values.yaml 文件中,您可以使用 Helm Secrets 提供的?helm secrets enc?命令加密敏感信息。
helm secrets enc values.yaml
- 解密敏感信息:在需要訪問敏感信息的時候,您可以使用 Helm Secrets 提供的?helm secrets dec?命令解密它們。
helm secrets dec values.yaml
使用示例:
假設(shè)您在 values.yaml 文件中有以下敏感信息:
password: mysecretpassword
使用以下命令對其進(jìn)行加密:
helm secrets enc values.yaml
這將生成一個名為?values.yaml.dec?的加密文件。在使用 Chart 時,Helm Secrets 會自動解密這些敏感信息。
使用 Helm Plugins
Helm 插件是一種擴(kuò)展 Helm 功能的方式,它允許您添加自定義命令或功能??梢允褂?Helm 插件來擴(kuò)展 Helm 的能力,實現(xiàn)特定的自動化或增強用戶體驗。
編寫 Helm 插件
首先,您需要編寫自己的 Helm 插件,這通常是一個獨立的可執(zhí)行文件。
編寫 Helm 插件需要以下步驟:
- 創(chuàng)建一個新的目錄,并命名為您的插件名稱,例如?helm-plugin-example。
- 在該目錄下創(chuàng)建一個名為?helm-plugin-example.go?的 Go 語言源代碼文件。
- 在?helm-plugin-example.go?文件中編寫插件的代碼。一個簡單的 Helm 插件需要實現(xiàn)以下接口:
go
package main
import (
"fmt"
"os"
"github.com/mitchellh/cli"
)
type Plugin struct{}
func (p *Plugin) Help() string {
return "This is a Helm plugin example"
}
func (p *Plugin) Synopsis() string {
return "A brief description of the plugin"
}
func (p *Plugin) Run(args []string) int {
fmt.Println("Running the Helm plugin example")
return 0
}
func main() {
plugin := &Plugin{}
cli := &cli.CLI{
Args: os.Args[1:],
Commands: map[string]cli.CommandFactory{},
HelpFunc: cli.BasicHelpFunc("helm-plugin-example"),
Synopsis: "A brief description of the plugin",
}
exitCode, err := cli.Run()
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %s\n", err)
}
os.Exit(exitCode)
}
這是一個非常簡單的例子,實際的 Helm 插件可能包含更多復(fù)雜的邏輯和功能。
構(gòu)建 Helm 插件
編寫完 Helm 插件的代碼后,您需要構(gòu)建它,生成一個可執(zhí)行的二進(jìn)制文件。
- 在插件目錄中執(zhí)行以下命令,使用 Go 語言的編譯器構(gòu)建插件:
go build -o helm-plugin-example
- 這將在插件目錄中生成一個名為?helm-plugin-example?的可執(zhí)行文件。
安裝 Helm 插件
將編寫的插件二進(jìn)制文件放置在 Helm 客戶端可以訪問的位置,例如將其添加到系統(tǒng) PATH 或放在 Helm 客戶端所在目錄。
在構(gòu)建好插件后,您需要將它安裝到 Helm 客戶端,以便 Helm 可以識別并調(diào)用您的插件。
- 將插件二進(jìn)制文件復(fù)制到 Helm 客戶端可以訪問的位置,例如將其放在 Helm 客戶端所在目錄,或?qū)⑵涮砑拥较到y(tǒng) PATH。
- 確保插件可執(zhí)行權(quán)限,以便 Helm 可以執(zhí)行它。
使用 Helm 插件
現(xiàn)在您的 Helm 插件已經(jīng)安裝,您可以在 Helm 命令前加上插件名稱,調(diào)用您編寫的自定義 Helm 命令。
使用示例:
假設(shè)您編寫了一個名為?helm-plugin-example?的 Helm 插件,并將其安裝到系統(tǒng) PATH。然后,您可以執(zhí)行以下命令運行插件:
helm plugin-example
插件將輸出 "Running the Helm plugin example"。
更復(fù)雜的 Helm 插件功能:文章來源:http://www.zghlxwxcb.cn/news/detail-634205.html
您可以通過編寫更復(fù)雜的 Helm 插件來實現(xiàn)更多功能,例如:文章來源地址http://www.zghlxwxcb.cn/news/detail-634205.html
- 調(diào)用 Kubernetes API:您的插件可以與 Kubernetes API 交互,獲取資源信息、執(zhí)行操作等。
- 增強 Helm 命令:您可以擴(kuò)展 Helm 命令,添加自定義的參數(shù)、選項或子命令。
- 與外部系統(tǒng)集成:您的插件可以與其他系統(tǒng)進(jìn)行集成,例如配置管理工具、CI/CD 系統(tǒng)等。
- 讀取和操作 Helm Charts:您的插件可以讀取和操作 Helm Charts 的內(nèi)容,例如解析 Chart 文件、獲取資源信息等。
到了這里,關(guān)于學(xué)習(xí)Helm來提高K8S運維效率的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!