Helm

了解

在 K8S 平台可以很方便的部署单个应用:比如 nginx , 但是对于复杂的应用中间件, 通常还是需要先研究 Docker 镜像的运行需求,环境变量等,然后为这些容器定制存储网络配置, 最后编写 Depolyment、 Configmap、 Service 以及 Ingress 等 YAML 配置文件,最后再提交给 K8S 部署。

Helm 以 Chart 的方式应用软件进行描述包含一下部分:

  • Chart

  • Release

  • Repository

简单来说: Helm 主要任务是, 在 Repository 中查找需要的 Chart,然后 Chart 以 Release 的形式安装到 K8S 集群中。

安装 Helm

helm 由 HelmClient 和 TillerServer 两部分组成

  • HelmClient : 是一个客户端,拥有对 Respository、Chart、Release 等对象的管理能力。 helmClient 通过 包管理工具或者脚本安装:

#------------- package manager -------------#
brew install kubernetes-helm
snap install helm --classic
choco install kubernetes-helm
#------------- script -------------#
curl -L https://git.io/get_helm.sh | bash
  • TillerServer: 负责客户端指令与 K8S 集群之间的交互,根据 Chart 定义,生成和管理 K8S 的资源对象

  • TillerServer 通过 使用 helm init 进行安装。这一条命令 kubectl 当前 context 指定 集群内的 kube-system 命名空间创建一个 Deployment 和一个 Service,运行 TillerServer 服务 需要注意:

  • Deployment 中使用的 image 是 gcr.io/kubernetes-helm/tiller:v[version],所以需要提前在集群的 node 节点上准备好镜像

  • 另外就是一个错误信息 socat not found 这是因为所在的节点没有 socat 无法进行端口转发(印象中是 client 节点, 明天测试)

Helm 常见用法

  1. helm search tomcat 搜索可用的 tomcat Chart

  2. helm inspect dev/tomcat 查看 dev仓库下的tomcat Chart 的可配置内容

  3. helm install dev/tomcat --name test01 安装 dev 仓库下的 tomcat Chart

  4. helm status test01 使用 status 跟踪 release 的状态

  5. helm delete test01 --purge 删除 test01 release

  6. helm list 查看已经发布的 release

  7. helm repo update/remove/index ...

  8. helm upgrade/rollback

自定义 Chart 的配置

针对 stable 仓库:helm inspect 查看 Chart 中的可配置部分 比如 stable/mariadb:

rootUser:
  ## MariaDB admin password
  ## ref: https://github.com/bitnami/bitnami-docker-mariadb#setting-the-root-password-on-first-run
  ##
  password:
  ##
  ## Option to force users to specify a password. That is required for 'helm upgrade' to work properly.
  ## If it is not force, a random password will be generated.
  • --values 或 -f 使用 YAML 配置文件进行参数配置, 可以设置多个文件,最后一个优先生效

  • --set 在命令行中直接设置参数 如果同时使用两个参数, --set 会以高优先级合并到 --values 中

创建 Chart

可以把自己的应用定义为 Chart 并进行打包部署

helm create test-chart

.
├── Chart.yaml # 描述 Chart 文件, 版本,作者,一些描述信息 ...
├── charts # 可选, 包含改 Chart 所依赖的其他 Chart, 依赖管理
├── templates # 结合 values.yaml 生成 kubernetes 的 mainfest wenjian
│   ├── NOTES.txt
│   ├── _helpers.tpl
│   ├── deployment.yaml
│   ├── ingress.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml # 默认的配置文件,这里比较重要

其他安装方法

搭建私有 repo

helm repo 是由 Chart 压缩包和 index 文件构成,通过 http/https 提供服务。这里我使用的是 nginx 作为 web 软件,另外也可在 chart 目录中直接运行 helm serve 常用命令

  • helm repo list

  • helm repo add

  • helm repo update

  • helm repo remove