使用 Helm Charts
目录
1. 理解 Helm
Helm 是一个包管理工具,简化了在 Alauda 容器平台集群上部署应用程序和服务的过程。Helm 使用一种称为 charts 的打包格式。一个 Helm chart 是描述 Kubernetes 资源的文件集合。在集群中创建一个 chart 会生成一个称为 release 的 chart 运行实例。每次创建 chart,或升级或回滚 release 时,都会创建一个增量修订版本。
1.1. 主要特性
Helm 提供以下功能:
- 在 chart 仓库中搜索大量的 charts
- 修改现有的 charts
- 使用 Kubernetes 资源创建自己的 charts
- 打包应用程序并将其作为 charts 共享
1.2. 目录
目录基于 Helm 构建,提供全面的 Chart 分发管理平台,扩展了 Helm CLI 工具的局限性。该平台使开发人员能够通过用户友好的界面更方便地管理、部署和使用 charts。
术语定义
术语 | 定义 | 备注 |
---|
应用程序目录 | Helm Charts 的一站式管理平台 | |
Helm Charts | 应用程序打包格式 | |
HelmRequest | CRD。定义部署 Helm Chart 所需的配置 | 模版应用 |
ChartRepo | CRD。对应于 Helm charts 仓库 | 模版仓库 |
Chart | CRD。对应于 Helm Charts | 模版 |
1.3 理解 HelmRequest
在 Alauda 容器平台中,Helm 部署主要通过一种称为 HelmRequest 的自定义资源进行管理。这种方法扩展了标准 Helm 的功能,并将其无缝集成到 Kubernetes 原生资源模型中。
HelmRequest 与 Helm 的区别
标准 Helm 使用 CLI 命令来管理 releases,而 Alauda 容器平台使用 HelmRequest 资源来定义、部署和管理 Helm charts。主要区别包括:
- 声明式与命令式:HelmRequest 提供了一种声明式的 Helm 部署方法,而传统的 Helm CLI 是命令式的。
- Kubernetes 原生:HelmRequest 是一种直接与 Kubernetes API 集成的自定义资源。
- 持续协调:Captain 持续监控并协调 HelmRequest 资源与其期望状态。
- 多集群支持:HelmRequest 支持通过平台在多个集群之间进行部署。
- 平台功能集成:HelmRequest 可以与其他平台功能集成,例如应用程序资源。
HelmRequest 与应用程序集成
HelmRequest 和应用程序资源在概念上有相似之处,用户可能希望将它们统一视图。该平台提供了一种机制,将 HelmRequest 同步为应用程序资源。
用户可以通过添加以下注释来标记 HelmRequest 以作为应用程序进行部署:
alauda.io/create-app: "true"
启用此功能后,平台 UI 将显示额外的字段和链接到相应的应用程序页面。
部署工作流
通过 HelmRequest 部署 charts 的工作流包括:
- 用户 创建或更新 HelmRequest 资源
- HelmRequest 包含 chart 引用和要应用的值
- Captain 处理 HelmRequest 并创建 Helm Release
- Release 包含已部署的资源
- Metis 监控带有应用程序注释的 HelmRequests,并将其同步到应用程序
- Application 提供已部署资源的统一视图
组件定义
- HelmRequest:描述所需 Helm chart 部署的自定义资源定义
- Captain:处理 HelmRequest 资源并管理 Helm releases 的控制器(源代码可在 https://github.com/alauda/captain 获取)
- Release:已部署的 Helm chart 实例
- Charon:监控 HelmRequests 并创建相应应用程序资源的组件
- Application:已部署资源的统一表示,提供额外的管理能力
- Archon-api:负责平台内特定高级 API 功能的组件
2 通过 CLI 部署 Helm Charts 作为应用程序
2.1 工作流概述
准备 chart → 打包 chart → 获取 API 令牌 → 创建 chart 仓库 → 上传 chart → 上传相关镜像 → 部署应用程序 → 更新应用程序 → 卸载应用程序 → 删除 chart 仓库
2.2 准备 Chart
Helm 使用一种称为 charts 的打包格式。一个 chart 是描述 Kubernetes 资源的文件集合。单个 chart 可用于部署从简单的 pod 到复杂的应用程序堆栈的任何内容。
请参考官方文档:Helm Charts Documentation
示例 chart 目录结构:
nginx/
├── Chart.lock
├── Chart.yaml
├── README.md
├── charts/
│ └── common/
│ ├── Chart.yaml
│ ├── README.md
│ ├── templates/
│ │ ├── _affinities.tpl
│ │ ├── _capabilities.tpl
│ │ ├── _errors.tpl
│ │ ├── _images.tpl
│ │ ├── _ingress.tpl
│ │ ├── _labels.tpl
│ │ ├── _names.tpl
│ │ ├── _secrets.tpl
│ │ ├── _storage.tpl
│ │ ├── _tplvalues.tpl
│ │ ├── _utils.tpl
│ │ ├── _warnings.tpl
│ │ └── validations/
│ │ ├── _cassandra.tpl
│ │ ├── _mariadb.tpl
│ │ ├── _mongodb.tpl
│ │ ├── _postgresql.tpl
│ │ ├── _redis.tpl
│ │ └── _validations.tpl
│ └── values.yaml
├── ci/
│ ├── ct-values.yaml
│ └── values-with-ingress-metrics-and-serverblock.yaml
├── templates/
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ ├── extra-list.yaml
│ ├── health-ingress.yaml
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── ldap-daemon-secrets.yaml
│ ├── pdb.yaml
│ ├── server-block-configmap.yaml
│ ├── serviceaccount.yaml
│ ├── servicemonitor.yaml
│ ├── svc.yaml
│ └── tls-secrets.yaml
├── values.descriptor.yaml
├── values.schema.json
└── values.yaml
关键文件描述:
values.descriptor.yaml
(可选):与 ACP UI 一起使用,以显示用户友好的表单
values.schema.json
(可选):验证 values.yaml 内容并呈现简单的 UI
values.yaml
(必需):定义 chart 部署参数
2.3 打包 Chart
使用 helm package
命令打包 chart:
helm package nginx
# 输出: 成功打包 chart 并将其保存到: /charts/nginx-8.8.0.tgz
2.4 获取 API 令牌
- 在 Alauda Container Platform 中,点击右上角的头像 => 个人资料
- 点击 添加 API 令牌
- 输入适当的描述和剩余有效期
- 保存显示的令牌信息(仅显示一次)
2.5 创建 Chart 仓库
通过 API 创建本地 chart 仓库:
curl -k --request POST \
--url https://$ACP_DOMAIN/catalog/v1/chartrepos \
--header 'Authorization:Bearer $API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"apiVersion": "v1",
"kind": "ChartRepoCreate",
"metadata": {
"name": "test",
"namespace": "cpaas-system"
},
"spec": {
"chartRepo": {
"apiVersion": "app.alauda.io/v1beta1",
"kind": "ChartRepo",
"metadata": {
"name": "test",
"namespace": "cpaas-system",
"labels": {
"project.cpaas.io/catalog": "true"
}
},
"spec": {
"type": "Local",
"url": null,
"source": null
}
}
}
}'
2.6 上传 Chart
将打包的 chart 上传到仓库:
curl -k --request POST \
--url https://$ACP_DOMAIN/catalog/v1/chartrepos/cpaas-system/test/charts \
--header 'Authorization:Bearer $API_TOKEN' \
--data-binary @"/root/charts/nginx-8.8.0.tgz"
2.7 上传相关镜像
- 拉取镜像:
docker pull nginx
- 保存为 tar 包:
docker save nginx > nginx.latest.tar
- 加载并推送到私有注册表:
docker load -i nginx.latest.tar
docker tag nginx:latest 192.168.80.8:30050/nginx:latest
docker push 192.168.80.8:30050/nginx:latest
2.8 部署应用程序
通过 API 创建应用程序资源:
curl -k --request POST \
--url https://$ACP_DOMAIN/acp/v1/kubernetes/$CLUSTER_NAME/namespaces/$NAMESPACE/applications \
--header 'Authorization:Bearer $API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"apiVersion": "app.k8s.io/v1beta1",
"kind": "Application",
"metadata": {
"name": "test",
"namespace": "catalog-ns",
"annotations": {
"app.cpaas.io/chart.source": "test/nginx",
"app.cpaas.io/chart.version": "8.8.0",
"app.cpaas.io/chart.values": "{\"image\":{\"pullPolicy\":\"IfNotPresent\"}}"
},
"labels": {
"sync-from-helmrequest": "true"
}
}
}'
2.9 更新应用程序
使用 PATCH 请求更新应用程序:
curl -k --request PATCH \
--url https://$ACP_DOMAIN/acp/v1/kubernetes/$CLUSTER_NAME/namespaces/$NAMESPACE/applications/test \
--header 'Authorization:Bearer $API_TOKEN' \
--header 'Content-Type: application/merge-patch+json' \
--data '{
"apiVersion": "app.k8s.io/v1beta1",
"kind": "Application",
"metadata": {
"annotations": {
"app.cpaas.io/chart.values": "{\"image\":{\"pullPolicy\":\"Always\"}}"
}
}
}'
2.10 卸载应用程序
删除应用程序资源:
curl -k --request DELETE \
--url https://$ACP_DOMAIN/acp/v1/kubernetes/$CLUSTER_NAME/namespaces/$NAMESPACE/applications/test \
--header 'Authorization:Bearer $API_TOKEN'
2.11 删除 Chart 仓库
curl -k --request DELETE \
--url https://$ACP_DOMAIN/apis/app.alauda.io/v1beta1/namespaces/cpaas-system/chartrepos/test \
--header 'Authorization:Bearer $API_TOKEN'
3. 通过 UI 部署 Helm Charts 作为应用程序
3.1 工作流概述
将模板添加到可管理的仓库 → 上传模板 → 管理模板版本
3.2 前提条件
模板仓库由平台管理员添加。请联系平台管理员以获取具有 管理 权限的可用 Chart 或 OCI Chart 类型模板仓库名称。
3.3 将模板添加到可管理的仓库
-
转到 目录。
-
在左侧导航栏中,点击 Helm Charts。
-
点击页面右上角的 添加模板,并根据以下参数选择模板仓库。
参数 | 描述 |
---|
模板仓库 | 直接将模板同步到具有 管理 权限的 Chart 或 OCI Chart 类型模板仓库。分配给此 模板仓库 的项目所有者可以直接使用该模板。 |
模板目录 | 当所选模板仓库类型为 OCI Chart 时,必须选择或手动输入存储 Helm Chart 的目录。 注意:手动输入新模板目录时,平台将在模板仓库中创建此目录,但存在创建失败的风险。 |
-
点击 上传模板,将本地模板上传到仓库。
-
点击 确认。模板上传过程可能需要几分钟,请耐心等待。
注意:当模板状态从 Uploading
更改为 Upload Successful
时,表示模板已成功上传。
-
如果上传失败,请根据以下提示进行故障排除。
注意:非法文件格式意味着上传的压缩包中的文件存在问题,例如缺少内容或格式不正确。
3.4 删除特定版本的模板
如果某个版本的模板不再适用,可以将其删除。
操作步骤
-
转到 目录。
-
在左侧导航栏中,点击 Helm Charts。
-
点击 Chart 卡片以查看详细信息。
-
点击 管理版本。
-
找到不再适用的模板,点击 删除,并确认。
删除版本后,相应的应用程序将无法更新。