Helm 是一個 Kubernetes 應(yīng)用的包管理工具艇挨,用來管理 chart——預(yù)先配置好的安裝包資源缩滨,有點(diǎn)類似于 Ubuntu 的 APT 和 CentOS 中的 YUM泉瞻。2019 年 11 月 13 日袖牙,Helm 3 發(fā)布,2020 年 4 月 30 日司忱,從 CNCF 中畢業(yè)坦仍。本文基于 Helm 3叨襟。
移除 Tiller
helm
在 helm v2 時(shí)分為客戶端 (helm client,即命令行工具) 與服務(wù)端 (helm server) 兩部分梳玫,在服務(wù)端又叫 Tiller
提澎,安裝 Tiller
時(shí)會在集群中部署一個 Pod
念链,用以接替資源部署积糯。
在 Helm 3 中移除了 Tiller
, 版本相關(guān)的數(shù)據(jù)直接存儲在了 Kubernetes 中絮宁。移除原因是 Tiller 存在一些安全隱患服协,因?yàn)樗枰汗芾韱T的ClusterRole才能創(chuàng)建偿荷。
基本概念
先了解下helm中的基本概念
helm和yum一樣也有源(repo)跳纳、包的概念:
- chart:類似于yum的rpm包,里面定義了部署資源以及一些依賴的信息(deployment艾蓝,service等)赢织。和rpm包作用上類似馍盟,我們需要部署那些服務(wù),按照格式定義好就行了八毯。
- repo:類似于yum源话速,helm也有自己的源尿孔,存放chart。
- Release:是運(yùn)行在 Kubernetes 集群中的 chart 的實(shí)例雏婶。一個 chart 通沉敉恚可以在同一個集群中安裝多次。每一次安裝都會創(chuàng)建一個新的 release奖地。以 MySQL chart為例参歹,如果你想在你的集群中運(yùn)行兩個數(shù)據(jù)庫,你可以安裝該chart兩次僧界。每一個數(shù)據(jù)庫都會擁有它自己的 release 和 release name捂襟。
安裝
$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh
Downloading https://get.helm.sh/helm-v3.5.4-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm
Helm Chart編寫
這是針對自己寫/修改 chart 文件欢峰。
利用helm create命令,創(chuàng)建一個簡單的示例宠漩。helm create的示例chart也并不是一無所有哄孤,它包含了大部分的資源抽象瘦陈,例如kubernetes deployment晨逝,service捉貌,ingress趁窃,serviceaccount等資源醒陆。
$ helm create hello-world
Creating hello-world
$ tree hello-world
hello-world
├── Chart.yaml # 存儲一些元數(shù)據(jù)刨摩,例如chart的信息澡刹,描述等等
├── charts # 該目錄保存其他依賴的 chart(子 chart)
├── templates # chart 配置模板罢浇,用于渲染最終的 Kubernetes YAML 文件
│ ├── NOTES.txt # 用戶運(yùn)行 helm install 時(shí)候的提示信息
│ ├── _helpers.tpl # 用于創(chuàng)建模板時(shí)的幫助類
│ ├── deployment.yaml # Kubernetes deployment 配置
│ ├── ingress.yaml # Kubernetes ingress 配置
│ ├── service.yaml # Kubernetes service 配置
│ ├── serviceaccount.yaml # Kubernetes serviceaccount 配置
│ └── tests
│ └── test-connection.yaml
└── values.yaml # 定義 chart 模板中的自定義配置的默認(rèn)值陆赋,可以在執(zhí)行 helm install 或 helm update 的時(shí)候覆蓋
3 directories, 10 files
做一個最基礎(chǔ)的測試,我們清空template文件下的內(nèi)容己莺,以及value.yaml中的內(nèi)容
我們添加一個configmap.yaml文件到template目錄下
apiVersion: v1
kind: ConfigMap
metadata:
name: hellworld-configmap
data:
myvalue: "Hello World"
helm install命令奏甫,看到已經(jīng)部署到集群中了
$ helm install helloworld ./hello-world/
NAME: helloworld
LAST DEPLOYED: Thu May 6 07:16:17 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
$ oc get cm hellworld-configmap
NAME DATA AGE
hellworld-configmap 1 30m
使用
添加helm chart 源 (helm3 中不再有預(yù)定義中心倉庫,需要手工添加)
$ helm repo add stable https://charts.helm.sh/stable
"stable" has been added to your repositories
$ helm repo list
NAME URL
stable https://charts.helm.sh/stable
查看源里可安裝的包(chart)
$ helm search repo stable
NAME CHART VERSION APP VERSION DESCRIPTION
stable/acs-engine-autoscaler 2.2.2 2.1.1 DEPRECATED Scales worker nodes within agent pools
stable/aerospike 0.3.5 v4.5.0.5 DEPRECATED A Helm chart for Aerospike in Kubern...
stable/airflow 7.13.3 1.10.12 DEPRECATED - please use: https://github.com/air...
stable/ambassador 5.3.2 0.86.1 DEPRECATED A Helm chart for Datawire Ambassador
stable/anchore-engine 1.7.0 0.7.3 Anchore container analysis and policy evaluatio...
...<snip>...
上面的例子是從 repo 里面搜索凌受,還可以從hub 搜索阵子。
Helm 自帶一個強(qiáng)大的搜索命令,可以用來從兩種來源中進(jìn)行搜索:
-
helm search hub
從 Artifact Hub 中查找并列出 helm charts胜蛉。 Artifact Hub中存放了大量不同的倉庫挠进。 -
helm search repo
從你添加(使用helm repo add
)到本地 helm 客戶端中的倉庫中進(jìn)行查找。該命令基于本地?cái)?shù)據(jù)進(jìn)行搜索誊册,無需連接互聯(lián)網(wǎng)领突。
你可以通過運(yùn)行 helm search hub
命令找到公開可用的charts:
$ helm search hub wordpress
URL CHART VERSION APP VERSION DESCRIPTION
https://hub.helm.sh/charts/bitnami/wordpress 7.6.7 5.2.4 Web publishing platform for building blogs and ...
https://hub.helm.sh/charts/presslabs/wordpress-... v0.6.3 v0.6.3 Presslabs WordPress Operator Helm Chart
https://hub.helm.sh/charts/presslabs/wordpress-... v0.7.1 v0.7.1 A Helm chart for deploying a WordPress site on ...
安裝一個chart
To install the chart with the release name my-release
:
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm install my-release bitnami/mysql
參考
https://helm.sh/zh/docs/intro/quickstart/
https://helm.sh/zh/docs/intro/using_helm/
https://jimmysong.io/kubernetes-handbook/practice/helm.html
https://blog.csdn.net/weixin_36938307/article/details/105226395