Kubernetes Helm(详解及使用)
一、Helm
Helm是Kubernetes 应用的包管理工具,主要用来管理 Charts,类似Linux系统的yum。
Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。
对于应用发布者而言,可以通过 Helm 打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。
对于使用者而言,使用 Helm 后不用需要编写复杂的应用部署文件,可以以简单的方式在 Kubernetes 上查找、安装、升级、回滚、卸载应用程序。
二、Helm安装
安装包的下载地址:https://github.com/helm/helm/releases,最新版本3.6.2
下载软件包:helm-v3.6.2-linux-amd64.tar.gz
解压:
[root@master ~]# tar zxf helm-v3.6.2-linux-amd64.tar.gz
[root@master ~]# cd linux-amd64/
[root@master linux-amd64]# ls
helm LICENSE README.md
[root@master linux-amd64]# cp helm /usr/local/bin/
使命令自动补齐:
[root@master linux-amd64]# echo "source <(helm completion bash)" >> ~/.bashrc
[root@master linux-amd64]# source ~/.bashrc
helm部署完成
[root@master linux-amd64]# helm version
version.BuildInfo{Version:"v3.6.2", GitCommit:"ee407bdf364942bcb8e8c665f82e15aa28009b71", GitTreeState:"clean", GoVersion:"go1.16.5"}
三、Helm仓库的使用
搜索官方helm hub chart库
[root@master linux-amd64]# helm search hub redis
image.png
Helm 添加第三方 Chart 库
1、微软的chart仓库,基本上官网有的chart这里都有。
http://mirror.azure.cn/kubernetes/charts/
2、阿里的chart仓库
https://apphub.aliyuncs.com/
3、Kubeapps Hub 官方chart仓库,国内有点不好使
https://hub.kubeapps.com/charts/incubator
将仓库添加到helm
[root@master helm]# helm repo add mychart https://apphub.aliyuncs.com/
Error: looks like "https://reg.westos.org/chartrepo/charts" is not a valid chart repository or cannot be reached: Get https://reg.westos.org/chartrepo/charts/index.yaml: x509: certificate signed by unknown authority
报错原因是缺少证书,可以将证书复制到 redhat 的全局证书地址
[root@master helm]# cd /etc/docker/certs.d/harbor.com/
[root@master harbor.com]# ls
ca.crt
[root@master harbor.com]# cp ca.crt /etc/pki/ca-trust/source/anchors/
[root@master harbor.com]# update-ca-trust #更新证书
创建helm chart
[root@master helm]# helm create mychart
Creating mychart
创建后会在目录创建一个mychart目录
[root@master helm]# ls
mychart redis-ha
[root@master helm]# tree mychart/ #查看结构
mychart/
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
其中mychart目录下的templates目录中保存有部署的模板文件,values.yaml中定义了部署的变量,Chart.yaml文件包含有version(chart版本)和appVersion(包含应用的版本)
查看并且更改变量文件values.yaml
[root@master mychart]# vim values.yaml
选择镜像及标签和副本数(这里设置1个)
image.png
依赖和模板配置是否正确
[root@master mychart]# helm lint .
==> Linting .
[INFO] Chart.yaml: icon is recommended
1 chart(s) linted, no failures
将应用打包
[root@master helm]# ll
total 4
drwxr-xr-x 4 root root 4096 Jul 5 10:45 mychart
[root@master helm]# helm package mychart/
Successfully packaged chart and saved it to: /data/helm/mychart-0.1.0.tgz
# 打包后会在当前目录下生成一个名为mychart-0.1.0.tgz压缩包
[root@master helm]# ls
mychart mychart-0.1.0.tgz
其中0.1.0为在Chart.yaml文件中定义的version(chart版本)信息
再次添加
[root@server1 reg.westos.org]# helm repo add mychart https://harbor域名:端口号/chartrepo/charts
"mychart" has been added to your repositories
添加成功,查看仓库
[root@server1 reg.westos.org]# helm repo list
NAME URL
mychart http://mirror.azure.cn/kubernetes/charts/
添加第三库之后就可以使用以下方式查询
[root@master linux-amd64]# helm search repo redis -l
注意:加 -l 选项可以查看历史版本
image.png
删除第三方库
[root@master ~]# helm repo remove testdata
"testdata" has been removed from your repositories