【Kubenetes进阶】Helm3保姆级安装与Chart使用

之前在Centos 7_64位上实现了用kubespray-2.15.0完成kubenetes的部署,对于kubenetes,Helm无疑是一个良好的命令行下的客户端工具。Helm主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。
需要对helm加深了解的,可以取官方文档看看:Helm官方doc
由于k8s版本不同,对应的helm也不同,这里整理了一下k8s-helm版本表:

k8s版本helm版本
1.20.x ~ 1.23.x3.8.x
1.19.x ~ 1.22.x3.7.x
1.21.x - 1.18.x3.6.x
1.20.x - 1.17.x3.5.x
1.19.x - 1.16.x3.4.x
1.18.x - 1.15.x3.3.x
1.18.x - 1.15.x3.2.x
1.17.x - 1.14.x3.1.x
1.16.x - 1.13.x3.0.x
1.16.x - 1.15.x2.16.x
1.15.x - 1.14.x2.15.x
1.14.x - 1.13.x2.14.x
1.13.x - 1.12.x2.13.x
1.12.x - 1.11.x2.12.x
1.11.x - 1.10.x2.11.x
1.10.x - 1.9.x2.10.x
1.10.x - 1.9.x2.9.x
1.9.x - 1.8.x2.8.x
1.8.x - 1.7.x2.7.x
1.7.x - 1.6.x2.6.x
1.6.x - 1.5.x2.5.x
1.6.x - 1.5.x2.4.x
1.5.x - 1.4.x2.3.x
1.5.x - 1.4.x2.2.x
1.5.x - 1.4.x2.1.x
1.4.x - 1.3.x2.0.x

如果不知道自己装完的k8s是什么版本,可以在master上执行命令:

kubectl version

(一)Helm手动安装

我的版本是1.19.7,于是我安装了helm-3.7.x版本。为了避免网络问题,我选择了手动安装,也就是先把压缩包从github下载下来。
我用的helm-3.7.2直接打成百度网盘了,可以直接下载:
helm-v3.7.2-linux-amd64.tar.gz 提取码:suil

将压缩包放到/root目录下,然后解压:

[root@master ~]# tar xf helm-v3.7.2-linux-amd64.tar.gz

解压之后可以看到生成了一些新的文件,进入linux-amd64文件,把里面的helm文件复制到/usr/local/bin目录下:

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

可以看一下helm的版本:

[root@master linux-amd64]# helm version

注意,由于用的是helm v3版本,这个版本中已经不需要tiller这个客户端了,所以应该只展示client版本号,不会报错,如图:
在这里插入图片描述
然后可以看一下helm是否已经安装成功:

[root@node1 ~]# helm

在这里插入图片描述
已经知道helm最大的作用就是Chart的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库,所以helm的增删改查就是下一个要点。

(二)Helm仓库管理

2.1 应用添加

对于helm来说,添加应用就相当于linux系统的yum源下载一个包一样的操作。
就像yum源只能下载源里有的包一样,helm也只能先明白有哪些库是可以下载的,这里有一个很实用的网站:
应用包汇总查询 Artifacthub
在这里插入图片描述

Artifacthub是一个可以搜索云原生包的网站,于2021年发布1.0.0版本。Artifact中提供的软件包都是开源的,可以直接安装运行,而且自带软件列表,可以选择性安装。如果需要一个软件来显示 Helm chart、operator,或 Artifact Hub 支持的其他许多东西之一,现在可以使用 Artifact Hub 的稳定版本来做。
举个例子,比如现在想给k8s-master上安装一个nginx应用,我们可以先在Artifacthub上搜索nginx:
在这里插入图片描述
点开可以看到每种nginx包的简介:

比如这个,简介里标注了用于kubenetes的,可以考虑用一用。
在下方还自带这个包的安装命令:

在这里插入图片描述

2.2 Helm基础命令

上图可以看到,ArtifactHub已经给出安装包的命令,那么这两句命令具体是做什么呢:

2.2.1 添加repo

对于查找到的包,我们要把它的repo添加到我们本地,具体命令是:

格式:helm repo add [自定义仓库名] [拉取网址]
举例:

[root@node1 ~]# helm repo add mirantis https://charts.mirantis.com

在这里插入图片描述
可以加完之后,查看一下仓库列表有没有加成功:

[root@node1 ~]# helm repo list

在这里插入图片描述
可以看到mirantis仓库已经在里面了。

2.2.2 删除repo

如果不想要某个仓库了,在helm3的命令如下(比如,我不想要之前的bitnami库了):

[root@node1 ~]# helm repo remove bitnami

在这里插入图片描述
再查看一下仓库列表,发现没有了:
在这里插入图片描述

(三)Chart操作

3.1 Chart的查找

我们已经准备好本地的仓库了(刚刚拉下来的mirantis),Chart就可以在这个本地库里面找安装包。这里以安装nginx的Chart为例。
先查看一下仓库里nginx相关的包:

[root@node1 ~]# helm search repo nginx

在这里插入图片描述
可以看到,当前我们可以安装的包是mirantis/nginx

3.2 Chart安装

安装可以查询找到的mirantis/nginx:
格式:helm install [自定义release名] [要安装的包的原名]
举例:

[root@node1 ~]# helm install k8s-release mirantis/nginx

我自己起名叫k8s-release
在这里插入图片描述
安装是异步的,也就是这里提示的只是成功的将chart发布到了k8s中,应用的部署还需要时间
安装好chart之后,可以看一下部署的状态:

[root@node1 ~]# helm status k8s-release

在这里插入图片描述
还可以看一下具体的Pod运行情况,这里要用到kubectl命令,所以要保证之前的k8s是装好的:

[root@node1 ~]# kubectl get pod | grep k8s-release

在这里插入图片描述

3.3 Chart卸载

helm3与helm2的一个区别,就是卸载命令不同。v2是delete,v3是uninstall。
可以先查看一下自己的helm里目前有多少chart release:

[root@node1 ~]# helm list

在这里插入图片描述
举例,我现在不想要helm-nginx那个release包了,于是卸载命令:

[root@node1 ~]# helm uninstall helm-nginx

在这里插入图片描述
再查看一下helm list,无了,就实现了应用的卸载
在这里插入图片描述

3.4 Chart信息查看

和yum中的rpm包一样,我们也可以查看chart中的描述信息。

[root@node1 ~]# helm inspect

在这里插入图片描述
这个命令引出一个菜单,提示说想看所有信息输入all等等,这里举例,查看一下values。
PS:这里注意,查看信息要用原来chart的名字,不要用自定义的,因为自定义的还没完全实现部署

[root@node1 ~]# helm inspect values mirantis/nginx

在这里插入图片描述

3.5 Chart部署到本地
3.5.1 Chart导出为本地压缩包

chart就是部署应用时需要的配置,那么可以和rpm一样将这些配置都拉取到本地,然后本地部署安装

[root@node1 ~]# helm pull mirantis/nginx

拉取完nginx后,可以看一下根目录里有没有nginx的压缩包:

[root@node1 ~]# ls -l

在这里插入图片描述
可以看到nginx-0.1.0.tgz,说明拉取下来了。
然后对本地nginx压缩包进行解压:

[root@node1 ~]# tar -zxf nginx-0.1.0.tgz

查看一下是否解压成功:

[root@node1 ~]# ls -ltr

在这里插入图片描述
看到有nginx文件夹,ok

3.5.2 查看Chart目录情况

Chart本质上就是一个文件夹目录,可以tree看一下结构:

[root@node1 ~]# tree -L 1 nginx

在这里插入图片描述

3.5.3 开启nginx应用(不是所用版本的nginx都需要这一步的,svc一开始没有给访问端口的可以尝试一下,有端口号的直接访问吧)

已经部署好的nginx应该可以应用了,首先我们先查看nginx这个service是不是存在:

[root@node1 templates]# kubectl get svc

在这里插入图片描述
可以看到,有k8s-release-nginx这个应用在,但是其现在没有提供访问端口,只给了一个80的Port提示。
我们可以执行下一句命令对目前这个nginx应用的配置进行一些修改:

[root@node1 templates]# kubectl edit svc k8s-release-nginx

命令执行会弹出下面这个yaml,将里面的type修改为NodePort:
在这里插入图片描述
修改好了会提示“edited"
在这里插入图片描述
再查看一下service,发现已经有访问端口了:
在这里插入图片描述
在firefox或者edge里输入:【你master机器的ip】:[给出的服务端口号]
举例:我是 192.168.214.100:31444
在这里插入图片描述
提示”Welcom to nginx",说明可以访问运行了

PS:这里挖个坑,Chart的其他配置方法很多,后续再讲,先把最简单的模式上手了

3.6 自己建立Chart

之前的Chart操作,是我们下载远程Artifact Hub上,nginx打包好的Chart,属于从远程helm仓库中获取第三方chart。
但是在k8s中,一般是通过yaml文件把要创建的service、pod等定义好,很可能会产生多个yaml文件,将这些文件放在一个目录中,就变成一个自定义的chart。

所以如果我们要把自己的东西打包成Chart,准备上传/分享呢?

3.6.1 helm创建空白chart

在helm工具下,chart的创建只需要1条命令:
格式:helm create [自定义chart名]

[root@node1 ~]# helm create hellochart

在这里插入图片描述
然后,我们就要在自己创建的hellochart目录下工作。打开hellochart看一下:
在这里插入图片描述
这里面比较关键的是templates目录,很多配置文件都在里面。接下来会介绍两种自创chart的方法,确实都跑通了,但是原理并不太一样,可以选择看着顺眼的试一试。

3.6.2 Chart模板法

这种方法需要我们舍弃所有create产生的默认配置,手写自己的Chart模板,所以第一步是删光templates里的文件:

[root@node1 hellochart]# rm -rf templates/*.*

PS:注意避坑,执行完上面那个命令后进去看一眼是不是彻底删完了
确认删除干净之后,在templates里写一个configmap.yaml文件:

[root@node1 templates]# cat > configmap.yaml << EOF
> apiVersion: v1
> kind: ConfigMap
> metadata:
>   name: mychart-configmap
> data:
>   myvalue: "Hello World"
> EOF

在这里插入图片描述
然后,退回hellochart外的那个目录里,执行安装hellochart的命令:
格式:helm install [自定义名称] ./hellochart
或者:helm install ./hellochart --generate-name
举例:

[root@node1 ~]# helm install hello ./hellochart

在这里插入图片描述
然后,我们可以去查询下载的信息:
格式:helm get manifest 【release的名称】

[root@node1 ~]# helm get manifest hello

在这里插入图片描述
这个就是一种最简单的、自定义的chart模板的创建了。

3.6.3 Chart-deployment法

这种方法和上面一种最大的区别是:
1.只操作deployment.yaml和service.yaml两个文件即可
2.过程中需要借助Pod
首先同样是创建一个chart:
在这里插入图片描述
然后进入到/templates下操作,同样先把原来的内容删光。
首先创建一个Pod:
格式: kubectl create deployment [自定义pod名] --image=nginx

[root@node1 templates]# kubectl create deployment web --image=nginx

在这里插入图片描述
看下pod是否生成了:
在这里插入图片描述
把容器的配置情况写入deployment.yaml中:

[root@node1 templates]# kubectl create deployment web --image=nginx --dry-run -o yaml > deployment.yaml

在这里插入图片描述
然后把上述配好的资源暴露为service,并且写入service.yaml中:

[root@node1 templates]# kubectl expose deployment web --port=80 --type=NodePort --dry-run -o yaml >service.yaml

在这里插入图片描述
然后把前面配的deployment删除

[root@node1 templates]# kubectl delete deployment web

在这里插入图片描述
然后,依然退回depchart外面的目录,执行depchart的下载,但是下载命令并不一样,因为借助了web这个pod,所以:

[root@node1 ~]# helm install web depchart/

在这里插入图片描述
最后,升级一下自创的chart:

[root@node1 ~]# helm upgrade web depchart/

在这里插入图片描述

由于这个方法借助了pod和nginx,所以自己写完的这个chart模板,如果没有修改其他配置的话,会默认是nginx的镜像,需要在values.yaml中修改,但是这种方法通过传递参数的方式实现yaml文件的高效复用

PS:第一种方法,由于helm2和helm3版本差异,在生成名称上就有一些微妙的差别

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值