K8S 包管理工具 Helm 介绍

2022-03-21 container k8s

Helm 是 K8S 中的包管理器,可以非常方便的完成应用的安装、卸载、升级等,Chart 是 Helm 的打包格式,其内部包含了一组相关的 K8S 资源。

简介

直接从 Github Release 下载相应的版本

本地仓库

其中 Chart 对仓库的要求并不高,仅需要对外提供 yaml 文件和 tar 文件的 web 服务即可,在 helm2 中原本是带了本地仓库功能,不过在 helm3 移除了这部分,也就变成了一个纯粹的应用管理工具。

这里推荐 ChartMuseum 使用,支持绝大多数的云存储、开源存储等,直接从下载二进制即可。

----- 可以通过systemd维护一个本地Chart仓库
# vim /etc/systemd/system/chartmuseum.service
[Unit]
Description=chartmuseum
Requires=network-online.target
After=network-online.target

[Service]
EnvironmentFile=/etc/sysconfig/chartmuseum
User=root
ExecStart=/usr/bin/chartmuseum --port=8879 --log-json \
	--storage=local --storage-local-rootdir=/opt/k8s/chart \
	--basic-auth-user=admin --basic-auth-pass=YourPassword

[Install]
WantedBy=multi-user.target
----- 然后重新加载并启动服务
# systemctl daemon-reload
# systemctl start chartmuseum

直接通过 curl -u admin:YourPassword http://localhost:8879/api/charts 命令进行简单验证,此时返回为空。

其中与 helm 相关的 API 接口有如下几个:

  • GET /index.yaml 执行 helm repo add 命令时获取 chart 列表。
  • GET /charts/foobar-0.1.0.tgz 执行 helm install 时下载对应的 chart 内容。
  • GET /charts/foobar-0.1.0.tgz.prov 执行 helm install 带有 --verify 标识时进行检查。

然后可以通过如下方式使用。

----- 添加repo信息,确定是否添加成功
helm repo add local http://localhost:8879/ --username admin --password YourPassword
helm repo list
helm repo remove local

打包

----- 创建一个简单示例会生成如下Chart相关的文件
# helm create foobar
# tree foobar/
foobar/
├── charts
├── Chart.yaml       # 这个Chart的元信息包括名字描述版本等
├── templates
   ├── deployment.yaml
   ├── _helpers.tpl
   ├── hpa.yaml
   ├── ingress.yaml
   ├── NOTES.txt    # 对于该Chart相关介绍例如如何使用默认参数等
   ├── serviceaccount.yaml
   ├── service.yaml
   └── tests
       └── test-connection.yaml
└── values.yaml      # 保存模板中使用的的变量

3 directories, 10 files
----- 进行简单校验可以按需进行调整
# pushd foobar && helm lint
----- 然后直接打包会在本地目录下生成压缩包
# popd helm package foobar --debug

----- 将包上传到本地仓库中
# curl -u admin:YourPassword --data-binary "@foobar-0.1.0.tgz" http://localhost:8879/api/charts
----- 更新本地缓存信息
# helm repo update
----- 然后就可以进行搜索了
# helm search repo foobar