Helm是由Deis发起的一个开源工具,有助于简化部署和管理Kubernetes应用。
基本概念
Helm可以理解为Kubernetes的包管理工具,可以方便地发现、共享和使用Kubernetes构建的应用。包含如下概念:
- Chart: 一个helm包,包含一个应用运行所需的镜像、依赖以及k8s资源编排等定义,类似yum的rpm文件。
- Release: 在k8s上运行的一个chart实例。每次安装chart都会创建一个新的release。
- Repository: 用于发布和存储Chart仓库。
基本组件
- Helm CLI: helm客户端,可以在本地执行
- Tiller: 服务器端组件,运行在k8s上,管理k8s应用程序生命周期
- Repository: chart仓库,helm cli通过http协议访问chart仓库中的索引文件和压缩包
helm命令
通过helm cli能够实现k8s应用的管理操作。顶级options:
1 2 3 4 5 6 7
| --debug: 打开日志显示 --home string: helm配置路径,默认为~/.helm --host string: tiller地址,覆盖 $HELM_HOST --kube-context string: 指定使用的kubeconfig上下文 --kubeconfig string: 指定kubeconfig的绝对路径 --tiller-connection-timeout int: helm和tiller建立连接超时,单位s,默认300 --tiller-namespace: tiller命名空间,默认为kube-system
|
应用仓库
添加、展示、移除、更新和索引应用仓库。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 添加一个chart仓库 helm repo add [flags] [NAME] [URL]
# 给定包含chart包的目录生成索引文件 helm repo index [flags] [DIR]
# 列出已有的仓库 helm repo list [flags]
# 移除指定仓库 helm repo remove [flags] [NAME]
# 更新每个chart仓库的最新信息缓存到本地,供helm search检测仓库中的chart使用 helm repo update [flags]
|
检索应用
1 2
| # 在管理的所有仓库中检索应用 helm search [keyword] [flags]
|
创建应用
1 2 3 4 5 6 7 8 9 10 11 12
| # 在指定目录中创建应用 helm create [/dir/]chartname [flags]
mycharts/ Chart.yaml #描述关于chart的信息 LICENSE #可选项, 描述chart的license README.md #可选项,可读性高的介绍文档 requirements.yaml #可选项,列出chart的依赖 values.yaml #chart的默认配置 charts/ #存放chart依赖的其他chart包 templates/ #模板目录,基于values.yaml生成有效的k8s清单文件 template/NOTES.txt #可选项,描述简短用法说明。
|
应用依赖
通过编辑mycharts/requirements.yaml,声明依赖的子应用。
1 2 3 4 5 6 7
| dependencies: - name: apache version: 1.2.3 repository: http://example.com/charts - name: mysql version: 3.2.1 repository: http://another.example/charts
|
1 2 3 4 5 6 7 8 9 10
| # 根据requirements.yaml配置,将依赖的应用包从仓库中拉取到charts目录,移除旧的 # 同时会生成requirements.lock helm dependency update [flags] CHART
# 基于requirements.lock,重新构建charts中的应用 # 如果没有lock文件,类似update操作 helm dependency build [flags] CHART
# 展示应用依赖的所有子应用包 helm dependency list [flags] CHART
|
应用归档
把chart应用打包成归档文件
1 2 3 4 5 6 7 8 9 10 11
| helm package [flags] [ChART-PATH] [...]
--app-version string: 打包时设置chart的appVersion --version string: 打包时设置chart的version --dependency-update: 打包时更新依赖 --destination string: 指定打包应用存放的目录 --save: 保存打包应用放在本地仓库,默认为true
--sign: 开启pgp私钥签名打包的应用 使用sign时,指定签名要使用的密钥名称和公钥环路径 --key string --keyring string
|
应用检测
检测chart应用开发完成后,潜在的问题
1 2 3 4 5
| # 验证指定路径下的应用格式是否正确 helm lint [flags] PATH
# 打印应用的Chart.yaml READEME values.yaml中的内容 helm inspect [chart | readme | values] CHARTNAME
|
应用安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| # 验证应用包是否为可信任方提供的 helm verify [flags] PATH --keyring: 指定公钥环路径
# chart支持: # reponame/chartname # path/xxx.tgz # repo-url/xx.tgz helm install [CHART] [flags] helm install --repo repourl chartname
# 额外指定配置,覆盖values.yaml helm install -f myvalues.yaml CHART
# 配置级别覆盖 helm install --set k1=v1,k2=v2 CHART
# 正式安装前的调试,检查release生成的manifests是否正确 helm install CHART --dry-run --debug
# 将指定版本的chart应用安装到指定的命名空间下 # 安装前:verify验证是否有有效来源文件,dep-up更新依赖 # name为release默认自动生成,version默认为latest,namespace默认为default helm install chart --verfiy --dep-up --name string --repo string --version string --namespace string
|
release查看
1 2 3 4
| helm get [flags] RELEASE-NAME
#下载指定release的所有钩子、配置清单、noteh和values文件 helm get hooks[ manifest | notes | values ] releasename
|
release测试
1 2 3 4
| # 为release运行测试命令 helm test [RELEASE] [flags] --cleanup: 完成删除测试pod --parallel: 并行运行测试pod
|
release状态
1 2 3
| # 查看release的运行状态 helm status [flags] RELEASE-NAME --output string: 状态信息输出格式,json or yaml
|
release升级
1 2 3 4
| helm upgrade [RELEASE] [CHAR] [flags]
--version string: 选用指定版本的chart来升级release --set k1=v1,k2=v2: 升级时,覆盖values.yaml中的部分值
|
release回滚
1 2
| # 将release回滚到指定版本 helm rollback [flags] [RELEASE] [REVISION]
|
release卸载
1 2 3
| helm delete [flags] RELEASE-NAME [...]
--purge: 清理干净,使得release可以重用
|
查看所有release
1 2 3 4 5 6 7 8 9 10 11 12 13
| helm list [flags] [FILTER]
--chart-name: 根据应用名称排序 --date: 按安装时间排序 --deleted: 显示删除的release --deleting: 显示正在删除中的 --deployed: 显示部署的 --failed: 显示失败的 --pending: 显示挂起的
--namespace string: 指定命名空间
helm list 'ara[a-z]+': 支持release name正则的过滤
|