0、安裝Helm
安裝Helm
下載helm安裝包,releases
解壓tar.gz文件
mv linux-amd64/helm /usr/bin/helm
接着就可以使用helm。
一、 什么是Helm
Helm是針對K8s的包管理器,使得打包、配置、部署應用/微服務到K8s集群中,變得簡單容易。如果沒有Helm, K8s的各種資源相互依賴,必須被手動的創建,這樣將會復雜又浪費時間。 Helm由1個命令行的Helm client組成, 用戶可以通過命令行的helm client去接入Kubernets API server。 用戶的Helm permissions通過用戶的kubeconfig file進行配置和定義。
Helm所使用的打包格式叫Chart。1個Chart是一系列文件的集合,定義了部署微服務所需要的k8s resources。所有的chart文件被添加到1個目錄中,這個目錄的名字就是helm chart的名字。
Example:
tree
.
├── Chart.yaml
├── README.md
├── templates
│ ├── Kafka-zk-tls-cert-client.yaml
│ ├── _helpers.tpl
│ ├── _logshipper-helpers.tpl
│ ├── configmap.yaml
│ ├── kafka-client-ca-certificate.yaml
│ ├── kafka-client-client-ca-certificate.yaml
│ ├── kafka-server-certificate.yaml
│ ├── kafka-ss.yaml
│ ├── kafka-svc-client.yaml
│ ├── kafka-svc.yaml
│ ├── logshipper-configmap.yaml
│ ├── logshipper-tls-cert-lt-client.yaml
│ ├── pdb.yaml
│ ├── rolebinding.yaml
│ ├── sasl-secret.yaml
│ ├── service-account.yaml
│ └── service-nodeport.yaml
├── values.schema.json
└── values.yaml
1 directory, 21 files
1) 必須的文件
Chart.yaml 描述chart, chart的name和version必須被定義。
values.yaml 包含chart的所有參數和默認值,默認值可以被覆蓋,當微服務部署的時候。
2)可選的文件
LICENSE 普通的明文表示license的信息。
README.md 1個README文件。
requirements.yaml 列出對於其他charts的依賴。
子目錄templates下面包含以下文件:
YAML-files: 定義要create的k8s resources。
NOTES.txt: 當chart部署的時候,顯示的文本。
_helpers.tpl:可以用到YAML-files中templates
二、Helm是如何工作的
每當執行Helm install命令,charts被發送給Helm中的Go template 渲染機,解析chart結構。提供chart的方式由.tar.gz文件或者目錄。
當Helm命令執行的時候,chart可以存儲到本地也可以是remote repo。通過templates files, Helm對象被創建在機器中,使得通過helm對象去訪問templates之間的values提供了可能。
YAML-files最終被生成,helm調用適當的k8s api去創建resource,就像chart中所定義/指定的那樣。
Helm對象有:
Chart:Chart.yaml 的內容
Values:values.yaml文件提供的傳給template的和用戶提供的(用戶提供指的是通過helm install or helm upgrade操作提供。)
Release:release對象本身。release name和類似的東西,這些可以在deploy時候被創建,通過release對象被訪問到。
Files:用該對象訪問/接入charts中除template files外的一般文件。
Capabilities:k8集群的Capabilities,包含類似於k8s版本信息的東西。
Template:主要是關於當前正在執行的template的信息。
更多helm內置對象,https://helm.sh/docs/chart_template_guide/#built-in-objects
Helm簡單的命令:
helm list
helm status serviceName
helm get all serviceName
helm upgrade
helm history serviceName
helm rollback serviceName 1
helm version
version.BuildInfo{Version:"v3.6.2", GitCommit:"ee407bdf364942bcb8e8c665f82e15aa28009b71", GitTreeState:"clean", GoVersion:"go1.16.5"}
helm --help
The Kubernetes package manager
........
export NAMESPACE="schema-registry-sr-install"
helm list -n $NAMESPACE
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
eric-data-coordinator-zk eric-schema-registry-sr-install 1 2021-07-20 16:42:13.0619995 +0800 CST deployed eric-data-coordinator-zk-1.17.0+17
eric-data-message-bus-kf eric-schema-registry-sr-install 1 2021-08-12 20:57:50.0334071 +0800 CST deployed eric-data-message-bus-kf-1.16.0+27
kubectl get pods -n $NAMESPACE
NAME READY STATUS RESTARTS AGE
eric-data-coordinator-zk-0 1/1 Running 56 98d
eric-data-message-bus-kf-0 1/1 Running 45 75d
eric-data-message-bus-kf-1 1/1 Running 42 75d
eric-data-message-bus-kf-2 1/1 Running 42 75d
三、Helm chart設計原則(如何創建簡單的Helm chart)
https://docs.bitnami.com/kubernetes/how-to/create-your-first-helm-chart/