Helm是什么?
Helm是Kubernetes的软件包管理器,类似于yum、apt等包管理工具一样,Helm可以轻松的一键式部署出我们想要的应用。
编写Helm有三个主要目标:
1.轻松地实现从“从零到Kubernetes”;
2.提供与操作系统类似的软件包管理系统;
3.强调将应用程序部署到Kubernetes的安全性和可配置性。
Helm中一个很重要的元素:Chart
- chart是Helm的软件包,是航海图的意思。chart是遵循chart规范的一组文件和目录,用于定义要安装到kubernetes中的资源。
- chart中包含一个名为chart.yaml的文件,它描述了此chart的版本、名称、说明和作者的一些信息。
- chart包含模板,即kubernetes清单。
- chart中有一个提供默认配置的文件名字为values.yaml。此文件包含安装和升级期间可覆盖的参数,可以进行修改。
- 当你所见到一个chart的时候,它可能是一个压缩包,像这个样子
ingress-nginx-4.0.17.tgz
,也可以是一个目录ingress-nginx
。 - 它的目录构造可能是这个样子:
[root@k8s-master01 ingress-nginx]# ls CHANGELOG.md Chart.yaml ci OWNERS README.md README.md.gotmpl templates values.yaml
当一个chart被安装时,它的流程可能是这个样子的:
- Helm读取chart
- 将定义的值发送到模板,生成kubernetes清单
- 清单被发送到kubernetes
- kubernetes根据清单在集群中创建请求的资源
使用Helm
Helm拥有v2和v3版本,这里就忽略v2了,因为我是用的是v3。
Helm提供了一个名为helm的命令行工具,我们使用它进行操作。
安装helm客户端注意点
安装helm时要注意一点,helm的版本要匹配kubernetes的版本,如下图:
具体详细版本对应参考:https://helm.sh/docs/topics/version_skew/
下面我们通过二进制的方式安装helm客户端:
详细说明或其他方式安装参考:https://helm.sh/docs/intro/install/官方文档
目前到我安装的时候helm的最新版本为3.8.0,而我的k8s集群版本为1.23.x是完全符合的。
- 下载二进制包
wget https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz
- 解压二进制包
tar xf helm-v3.8.0-linux-amd64.tar.gz
- 将解压后目录中的helm目录移动到/usr/local/bin/helm下
mv linux-amd64/helm /usr/local/bin/helm
- 安装结束,灰常简单
添加chart存储库
只有一个客户端工具是没法干活的,我们还需要知道它的chart包从哪来,相当于yum安装的软件源。
- 添加一个官方存储库
- 注意:add 后面的名称是自定义的,方便你记住,不是固定的
helm repo add bitnami https://charts.bitnami.com/bitnami # 我的环境添加的存储库 [root@k8s-master01 ~]# helm repo list NAME URL ingress-nginx https://kubernetes.github.io/ingress-nginx nginx-stable https://helm.nginx.com/stable bitnami https://charts.bitnami.com/bitnami
- 查看是否添加成功?其实上面已经演示了,这条命令可以查看你添加过的存储库存不存在
helm repo list
搜索chart存储库
- 添加了库后,怎么能知道我想安装的chart包存不存在呢?使用下面这条命令
[root@k8s-master01 ~]# helm search repo apache NAME CHART VERSION APP VERSION DESCRIPTION bitnami/apache 9.0.2 2.4.52 Apache HTTP Server is an open-source HTTP serve... bitnami/airflow 12.0.1 2.2.3 Apache Airflow is a tool to express and execute...
- 当然你也可以尝试搜索来自网络中的chart包:
[root@k8s-master01 ~]# helm search hub wordpress URL CHART VERSION APP VERSION DESCRIPTION https://artifacthub.io/packages/helm/kube-wordp... 0.1.0 1.1 this is my wordpress package https://artifacthub.io/packages/helm/bitnami/wo... 13.0.11 5.9.0 WordPress is the world's most popular blogging ...
安装一个chart
- 安装chart的前提是需要有一个命名空间,当然默认的也可以,为了区分还是创建一个
- 下面创建一个名为mysql的命名空间
kubectl create ns mysql
- 然后安装chart软件包
hellm install my-mysql bitnami/mysql -n mysql
说一下这条命令的含义:
- my-mysql代表我运行这个chart的名字,是自定义的
- bitnami/mysql:是存储库的名字加软件包名
- -n mysql:是指定命名空间的名字
安装完可以查看一下是否安装成功:
需要注意的是:
- 不管你的Pod资源能不能创建成功,只要helm创建成功了那么这个实例就会存在
- 同一命名空间内实例名称唯一,再次创建同名称的实例会报错
[root@k8s-master01 ~]# helm list -n mysql NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION my-mysql mysql 1 2022-02-17 14:32:38.423267837 +0800 CST deployed mysql-8.8.23 8.0.28
- 这条命令可以查看你创建chart 的一些状态:
[root@k8s-master01 ~]# helm status my-mysql -n mysql
- 当你不想要这个chart的时候也可以选择卸载掉:
[root@k8s-master01 ~]# helm uninstall my-mysql -n mysql
自定义配置安装
默认安装的配置往往不是我们需要的,那么我们可以将chart包pull下来,然后进行修改参数后再执行。
- 将chart包pull下来,进行解压,可以看到包内的基本信息
[root@k8s-master01 ~]# helm pull bitnami/mysql [root@k8s-master01 ~]# tar xf mysql-8.8.23.tgz -C /temp/ [root@k8s-master01 ~]# cd /temp/mysql/ [root@k8s-master01 mysql]# ls Chart.lock charts Chart.yaml ci README.md templates values.schema.json values.yaml
- 可以修改他的
values.yaml
文件,这里就不修改了 - 然后执行修改后的
values.yaml
文件,因为你执行的是本地文件,就不用加源地址了
[root@k8s-master01 mysql]# helm install mysql-01 -n mysql .
- 如果你已经运行了这个chart,然后又修改了yaml文件,你可以用这条命令进行更新
[root@k8s-master01 mysql]# helm upgrade --install mysql-01 -n mysql .
就到这吧,只说一下helm的基本使用。
以后会写chart的使用,自己创建chart等内容。