1. helm 基本介紹
1.1 helm 項目
Helm 幫助您管理 Kubernetes 應用—— Helm Chart,即使是最復雜的 Kubernetes 應用程序,都可以幫助您定義,安裝和升級。Helm Chart 易于創建、發版、分享和發布,所以停止復制粘貼,開始使用 Helm 吧。Helm 是 CNCF 的畢業項目,由 Helm 社區維護。
優勢:
復雜性管理:
即使是最復雜的應用,Helm Chart 依然可以描述, 提供使用單點授權的可重復安裝應用程序。
易于升級:
隨時隨地升級和自定義的鉤子消除您升級的痛苦。
分發簡單:
Helm Chart 很容易在公共或私有化服務器上發版,分發和部署站點。
回滾:
使用 helm rollback 可以輕松回滾到之前的發布版本。
1.2 helm 基本原理
- helm cli: 一個命令行工具,用于本地開發及管理chart,chart倉庫管理等
- tiller: 是 Helm 的服務端。Tiller 負責接收 Helm 的請求,與 k8s 的 apiserver 交互,根據chart 來生成一個 release 并管理 release. helm V3 版本已廢棄
- chart: Helm的打包格式叫做chart,所謂chart就是一系列文件, 它描述了一組相關的 k8s 集群資源
- release : 使用 helm install 命令在 Kubernetes 集群中部署的 Chart 稱為 Release.
?
Helm3 可以支持所有的 Kubernetes 認證及鑒權等全部安全特性。Helm和本地的 kubeconfig flie 中的配置使用一致的權限。管理員可以按照自己認為合適的粒度來管理用戶權限,下圖可詳細看出helm2到helm3的改變
2. helm 安裝和使用
安裝須知:
【1】 保證你的helm 和 k8s/k3s 在一臺機器上,或helm 在機器或者容器能夠直接調用kubectl命令
【2】安裝k8sHelm與您的集群兼容
2.1. 使用二進制文件安裝
#1.本人機器是mac m1, m1
cd /home/
tar zxvf helm-v3.10.0-linux-arm64.tar.gz
cp linux-arm64/helm /usr/local/bin/helm
# 源配置,使用國內源
helm repo add aliyun
helm repo add stable
helm repo update
root@master:~# helm repo list
NAME URL
stable
aliyun
2.2 helm 常用使用命令
#查看環境信息
helm env
#查看版本信息
helm version
#查找軟件
helm search repo nginx
helm search hub nginx
#查看已有倉庫列表
helm repo list
#更新倉庫資源
helm repo update
#刪除一個倉庫
helm repo remove bitnami
#創建倉庫索引
helm repo index /root/helm/repo
#部署chart
helm install centos-nginx bitnami/nginx
#chart狀態查看
helm status centos-nginx
#卸載chart
helm uninstall centos-nginx
#查看chart列表 -A 表所有namespace
helm list -A
#chart部署記錄
helm history centos-nginx
#chart更新
helm upgrade --set image.tag=nginx.18 centos-nginx bitnami/nginx
#chart回滾
helm rollback centos-nginx 1
3. helm chart 包快速構建和調試
root@master:~/helm# tree -L 2 airflow
airflow
├── Chart.yaml
├── README.md
├── charts
│ ├── postgresql
│ └── redis
├── requirements.lock
├── requirements.yaml
├── templates
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── config
│ ├── extra-manifests.yaml
│ ├── flower
│ ├── pvc-logs.yaml
│ ├── pvc.yaml
│ ├── rbac
│ ├── scheduler
│ ├── webserver
│ └── worker
└── values.yaml
# ------------------------------------ #
# Chart.yaml:用于描述這個 Chart 的基本信息,包括名字、描述信息以及版本等。
# values.yaml:用于存儲 templates 目錄中模板文件中用到變量的值。
# Templates:目錄里面存放所有 yaml 模板文件, 。
# charts:目錄里存放這個 chart 依賴的所有子 chart。
# requirements.lock, requirements.yaml helm v2 將模塊依賴注冊在這里,V3 版本部署以來注冊在Charts.yaml
# NOTES.txt:用于介紹 Chart 幫助信息,helm install 部署后展示給用戶。例如:如何使用這個 Chart、列出缺省的設置等。
# _helpers.tpl:放置模板助手的地方,可以在整個 chart 中重復使用。
3.1 快速開始,hello world demo
- 快速構建一個 簡單實例
helm create mychart
rm -rf mychart/templates/*
創建一個名為 mychart/templates/configmap.yaml的文件開始,模板命令 {{ .Release.Name }} 將發布名稱注入了模板。值作為一個 命名空間對象 傳給了模板,用點(.)分隔每個命名空間的元素。
Release前面的點表示從作用域最頂層的命名空間開始(稍后會談作用域)。這樣.Release.Name就可解讀為“通頂層命名空間開始查找 Release對象,然后在其中找Name對象.
- Chart.yaml 定義
核心關注參數:
- version: chart 包版本,必需要參數
- apiVersion: helm api server 調用的版本,必需要參數
- name: 包名稱, 必需要參數
- appVersion: 應用版本,非必需參數
從開發維護角度來說,可添加如下參數:
- maintainers: 開發和維護者信息
- description: 包的用途和描述說明
- Vayaml 定義
主要定義參數:
- 副本集定義
- 鏡像 :倉庫地址和版本tag 定義
- service 定義
- 服務探活: readiness, liveness
- 資源限制:resouce
- 機器標簽: nodeSelector
- 資源親和:Affinity
3.2 chart 快速調試
- 可以使用 helm install --debug --dry-run <helm-release-name> <helm-chart-path>
- 現在安裝資源,可以立即看到模板命令的結果
4. helm + chart的最佳實踐(gostack-api)
4.1 命名規范
|
類型 |
定義格式 |
示例 |
|
node label |
region級別: ${svc_name}.ctyun.io/${region_group}: ${region_group} AZ級別: ${svc_name}.ctyun.io/${az_group}: ${az_group} |
region: haproxy.ctyun.io/region-control: region-control az: gostack.ctyun.io/group-control: {{ .Release.Namespace }}-control-group |
|
sevice label |
io.kompose.service: ${service_name} |
labels: io.kompose.service: gostack-api name: gostack-api |
|
svc |
region級別: ${svc_name}.default.svc.cluster.netaz級別: ${svc_name}.${az_namespace}.svc.cluster.net |
|
4.2 chart 模版快速創建
- 快速構建chart包模版
4.3 chart 編寫
- configmap 定義:對應模版文件 {{xx}}-configmap.yaml
- service 定義:對應模版文件 {{xx}}-service.yaml
- deployment定義:對應模版文件 {{xx}}-deployment.yaml
- values定義:對應模版文件 yaml
- chart 包調試(dryrun 模式)
調試結束后,可以下發真是的安裝