Helm的安装

536 阅读4分钟

这是我参与更文挑战的第13天,活动详情查看: 更文挑战

几个概念

如果是手动安装一套k8s应用出来,我们需要分别创建应用中各个组件的Deployment以及Service的yaml文件。如果想在另一个k8s集群中去部署相同的一套应用,其实只需要将相同的一套yaml文件拷贝过去即可,顶多在更改几个参数。那么完全可以将应用所需要的yaml文件打包放在一个仓库里直接供人下载使用即可,这就是Helm的初衷。

不过当然Helm还集成了很多别的功能,例如一键更新和回滚,yaml文件设置动态参数等等,后面我们会慢慢学习到。

在真正开始使用Helm前有几个特有的概念要先熟悉下。

Chart

Chart就是按照一定目录结构保存的多个文件,用来描述所部署应用相关k8s资源的信息。Chart每被Helm使用一次,就部署一个应用到集群中,如果Chart被使用多次,就会把相同的应用部署多次。

通常是直接下载官方的Chart,微调下参数然后使用。也可以跟着官方文档中的步骤来创建自己的Chart,下面的实际操作中我们两种方式都会演示。

Release

可以将Helm的Chart类比Docker的Image,那么Release就是Docker的Container。一个Chart可以生成多个Release。

Repo

Repo就是存放Chart的仓库,和Docker Hub一样,Helm也有自己的Helm Hub。当然也是可以建立自己的私有仓库的。

安装Helm

在官网获取最新的稳定版本二进制安装包,下载到本地

[root@k8s-master helm]# wget https://get.helm.sh/helm-v3.2.1-linux-amd64.tar.gz
--2020-05-15 17:39:15--  https://get.helm.sh/helm-v3.2.1-linux-amd64.tar.gz
Resolving get.helm.sh (get.helm.sh)... 152.195.19.97, 2606:2800:11f:1cb7:261b:1f9c:2074:3c
Connecting to get.helm.sh (get.helm.sh)|152.195.19.97|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12927632 (12M) [application/x-tar]
Saving to: ‘helm-v3.2.1-linux-amd64.tar.gz’

100%[=========================================================================================================================>] 12,927,632   322KB/s   in 14s    

2020-05-15 17:39:31 (879 KB/s) - ‘helm-v3.2.1-linux-amd64.tar.gz’ saved [12927632/12927632]

之后解压得到二进制文件

[root@k8s-master helm]# tar -zxvf helm-v3.2.1-linux-amd64.tar.gz
linux-amd64/
linux-amd64/README.md
linux-amd64/helm
linux-amd64/LICENSE

将二进制文件加入PATH即可

[root@k8s-master linux-amd64]# cp helm /usr/local/bin

接着运行helm help能看到帮助文档说明安装成功

注意,Helm3和Helm2最大的改变就是不需要再安装服务端的Tiller了,直接用config文件进行RBAC认证。

实际操作

下面就分别以使用官方Chart和建立自己本地的Chart为例来看看Helm的实际操作。

使用官方Chart Helm的工作原理和yum还蛮像的,都是去本地配置的Repo中搜索,如果所有的Repo都搜索过没找到Chart就会报错。

Docker的工作原理是在Image的名称上指定位置,registry/author/image:version

所以首先添加官方的Repo

[root@k8s-master ~]# helm repo add stable https://kubernetes-charts.storage.googleapis.com/
"stable" has been added to your repositories

然后就可以去搜索这个repo中的chart了

[root@k8s-master ~]# 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.2        	v4.5.0.5               	A Helm chart for Aerospike in Kubernetes          
stable/airflow                       	6.10.4       	1.10.4                 	Airflow is a platform to programmatically autho...

如果发现是stable下的就可以去stable中安装了。

接下来就可以安装chart了,命令是helm install name chart,不过这里的chart可以是下面5中来源的一个

By chart reference: helm install mymaria example/mariadb
By path to a packaged chart: helm install mynginx ./nginx-1.2.3.tgz
By path to an unpacked chart directory: helm install mynginx ./nginx
By absolute URL: helm install mynginx https://example.com/charts/nginx-1.2.3.tgz
By chart reference and repo url: helm install --repo https://example.com/charts/ mynginx nginx
节选自helm install --help

当然最简单的还是直接用官方的stable来安装了,例如

[root@k8s-master ~]# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈ Happy Helming!⎈
[root@k8s-master ~]# helm install stable/mysql --generate-name
NAME: mysql-1589684111
LAST DEPLOYED: Sun May 17 10:55:14 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
mysql-1589684111.default.svc.cluster.local


查看已部署的release以及release的状态

[root@k8s-master ~]# helm list
NAME            	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART      	APP VERSION
mysql-1589684111	default  	1       	2020-05-17 10:55:14.045745038 +0800 +08	deployed	mysql-1.6.3	5.7.28     
[root@k8s-master ~]# helm status mysql-1589684111
NAME: mysql-1589684111
LAST DEPLOYED: Sun May 17 10:55:14 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
mysql-1589684111.default.svc.cluster.local
...
...