目录
Helm 是什么?
使用helm的优势
Helm 整体架构
编辑Helm 主要组件
Helm 工作流程
Helm 版本
Helm 部署安装
构建一个 Helm Chart
Helm 基本命令
Helm 是 Deis 开发的一个用于 Kubernetes 应用的包管理工具,主要用来管理 Charts。有点类似于 Ubuntu 中的 APT 或 CentOS 中的 YUM。
Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。
对于应用发布者而言,可以通过 Helm 打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。
对于使用者而言,使用 Helm 后不用需要编写复杂的应用部署文件,可以以简单的方式在 Kubernetes 上查找、安装、升级、回滚、卸载应用程序。
一般部署一个应用的过程:
外部的应用访问集群内的服务有很多种方法,这里不细讲
不使用helm
使用helm
由于 helm 包在国外,国内通过这个网址进行下载:
wget https://mirrors.huaweicloud.com/helm/v3.3.1/helm-v3.3.1-linux-amd64.tar.gz
tar -zxvf helm-v3.3.1-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin/
helm version
注: helm 客户端需要下载到安装了 kubectl 并且能执行能正常通过 kubectl 操作 kubernetes 的服务器上, 否则 helm 将不可用
helm create mychart
该命令创建了一个 mychart 目录,该目录结构如下所示。
[root@scweb ~]# tree mychart/
mychart/ # Chart 目录
├── charts # 这个 charts 依赖的其他 charts,始终被安装
├── Chart.yaml # 描述这个 Chart 的相关信息、包括名字、描述信息、版本等
├── templates # 模板目录
│ ├── deployment.yaml # deployment 控制器的 Go 模板文件
│ ├── _helpers.tpl # 以 _ 开头的文件不会部署到 k8s 上,可用于定制通用信息
│ ├── hpa.yaml # hpa 的模板文件
│ ├── ingress.yaml # ingress 的模板文件
│ ├── NOTES.txt # Chart 部署到集群后的一些信息,例如:如何使用、列出缺省值
│ ├── serviceaccount.yaml # serviceaccount 的 Go 模板文件
│ ├── service.yaml # service 的 Go 模板文件
│ └── tests # 测试pod目录
│ └── test-connection.yaml # 测试pod的deployment文件
└── values.yaml # 模板的值文件,这些值会在安装时应用到 GO 模板生成部署文件
Templates 目录下 YAML 文件模板的值默认都是在 values.yaml 里定义的,比如在 deployment.yaml 中定义的容器镜像。
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
其中的 .Values.image.repository 的值就是在 values.yaml 里定义的 nginx,.Values.image.tag 的值就是 stable。
$ cat mychart/values.yaml|grep repository
repository: nginx
$ cat mychart/values.yaml|grep tag
tag: stable
以上两个变量值是在 create chart
的时候就自动生成的默认值,可以根据实际情况进行修改。
添加仓库地址
因为helm自带的仓库为境外仓库地址,拉取应用很慢。通过阿里云镜像安装的服务器端可以看到已经安装了很多charts。
helm repo add 存储库名 存储库URL
helm repo update
例如添加阿里云的仓库地址
helm repo add repo_name1 https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
因为仓库一直在更新,所以最好使用update更新一下
helm repo update
查看添加的仓库列表
helm repo list
据关键字检索chart包
$ helm search repo keyword
$ helm search hub keyword
上面2个命令仅仅在第3个字段有区别,repo表示在本地所添加的仓库中进行检索;hub表示在Helm Hub中进行检索。
查看helm包
$ helm inspect state/mysql
安装helm
最简单的情况下,它只需要一个 chart 的名称参数:
$ helm install stable/mysql
如果想使用自己的release名称 使用参数 --name 即可
可以通过 helm install --dry-run --debug 命令进行调试
查看安装的chart列表
$ helm list
更新charts列表以获取最新版本
helm repo update
查看chart包文件内容
helm show chart chartName # 查看chart包中的 chart.yaml 文件内容
# chart包可以是本地的未打包的chart目录(即 helm create 创建出来的chart目录),也可以是打包的chart压缩包(由helm package打包),也可以是保存在仓库中的chart包
helm show values chartName # 查看chart包中的values.yaml文件内容
helm show readme chartName #查看chart包中README文件内容
helm show all chartName # 查看chart包中chart.yaml、values.yaml、README文件内容
卸载release
$ helm uninstall releaseName
参数:--keep-history(加上这个参数就会有删除记录)
升级release
$ helm upgrade releaseName chartName
回滚release
$ helm rollback releaseName vision
vision表示为第几个版本,1表示第一个版本,2表示第二个版本,以此类推
查看release的基本信息
$ helm status releaseName
有关Helm的简单介绍就到这里,helm是一个很强大的k8s包管理工具,想详细了解可以找官方文档仔细看一下,希望本文对大家有帮助!