Helm 能将 Kubernetes 应用所需的多种资源(如工作负载、Service、Ingress)打包管理,简化在 ACK 集群中部署与升级应用的流程。
创建Helm应用
以通过控制台使用Helm部署Dify应用为例。确保ACK 集群至少有 2 核 CPU 和 4 GB 内存 的可用资源。
为 Dify 创建其依赖的 CNFS 和 NAS 存储类。
登录容器服务管理控制台,选择集群列表。在集群列表页面,单击目标集群名称,然后选择。
在存储类页面,单击使用YAML创建资源,将以下YAML内容复制到模板内,然后单击创建。
如果系统提示已存在同名资源,说明集群已自动创建CNFS及NAS存储类,可直接进行部署应用操作。 创建NAS存储会产生费用,详情请参见NAS计费。
apiVersion: storage.alibabacloud.com/v1beta1 kind: ContainerNetworkFileSystem metadata: name: cnfs-nas-filesystem spec: description: "cnfs" type: nas reclaimPolicy: Retain # 仅支持Retain,删除CNFS时不会删除后端的NAS实例。 --- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alibabacloud-cnfs-nas mountOptions: - nolock,tcp,noresvport - vers=3 parameters: volumeAs: subpath # 每个PVC都会在NAS下创建一个独立的子目录。 containerNetworkFileSystem: cnfs-nas-filesystem # 关联到上面定义的CNFS实例。 path: "/" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retain allowVolumeExpansion: true # 可选:指定为true则允许对存储卷的目录配额进行扩容。
部署Dify应用。
在集群详情页面,选择。在Helm页面,单击创建。
基本信息:在Chart中搜索ack-dify,勾选搜索结果。
参数配置:Chart版本选择最新版。
访问Dify应用。
为ack-dify服务开启公网访问功能。
公网访问便于演示操作,如果在生产环境中部署,为了应用数据安全,建议开启访问控制功能。
选择,选择命名空间为
dify-system。选择Service名称为ack-dify,单击更新操作,配置开启公网访问完成后单击确定。服务类型为负载均衡 (LoadBalancer)。
访问方式为公网访问。
虚拟交换机勾选专有网络中对应可用区的交换机。
访问Dify应用。
配置完成后,将外部 IP 地址(External IP)输入浏览器地址栏即可访问Dify服务。
管理Helm应用
在控制台Helm应用列表页面,可对目标应用执行更新、删除等管理操作。
操作 | 说明 |
查看应用 | 单击目标应用名称或详情,查看该应用的资源、YAML文件、历史版本等信息。 |
更新应用 | 单击更新,在更新发布面板中修改相关参数,然后单击确定。 重要 更新将直接影响关联应用的运行状态,导致服务重启或功能异常。建议在变更前充分评估影响范围,并在业务低峰期执行操作。 |
删除应用 | 单击删除,在删除应用对话框中,选中清除发布记录,然后单击确定,删除应用以及包含的Service、Deployment等资源。 本示例删除Dify应用时,不会自动同步删除NAS资源,需手动删除NAS文件系统。 重要 如果删除时未选中清除发布记录,此时该应用会保留在发布列表中,后续部署同名应用时,会因命名冲突而失败。 |
常见问题
如何使用Helm CLI部署第三方库应用?
如果ACK提供的Chart无法满足需求,可使用Helm命令行工具部署应用。
连接集群。
云端
在Workbench或CloudShell上使用kubectl连接集群。
阿里云提供浏览器命令行工具已预装 Helm,无需额外配置。
本地
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
添加Chart仓库。
将
<REPO_NAME>替换为仓库别名,<REPO_URL>替换为仓库地址。helm repo add <REPO_NAME> <REPO_URL>更新仓库信息。
helm repo update第三方库部署应用。
将
<APP_NAME>替换为应用实例名,<CHART_NAME>替换为要安装的 Chart 名称。helm install <APP_NAME> <REPO_NAME>/<CHART_NAME>
Helm更多命令请参见Helm 官方文档。
为什么Helm应用无法删除?
问题现象
在控制台删除Helm应用时,应用长时间停留在“卸载”状态。
通过Helm CLI删除应用时,命令行返回以下错误:
no matches for kind "***" in version "***" ensure CRDs are installed first
问题原因
该问题通常发生在集群升级后旧版本API被废弃,若Helm应用中包含使用已废弃API的资源,删除时会因API版本不存在而失败。
Kubernetes不同版本的废弃API列表,请参见Deprecated API Migration Guide。
解决方案
使用 Helm 官方helm-mapkubeapis插件将Release中已废弃的API版本映射到新版支持的API版本,然后重新删除。
将
<RELEASE_NAME>和<NAMESPACE>替换为Helm应用名称及所在的命名空间。helm plugin install https://github.com/helm/helm-mapkubeapis helm mapkubeapis <RELEASE_NAME> -n <NAMESPACE>预期输出
...completed successfully说明API版本已映射成功。完成API版本映射后,即可正常删除该应用。
helm uninstall <RELEASE_NAME> -n <NAMESPACE>预期输出
release "***" uninstalled,表明Helm应用删除成功。
相关文档
为确保集群安全并使用更完善的功能,建议将Helm V2升级迁移至Helm V3。
容器镜像服务企业版的Helm Chart功能支持推送和拉取Helm Chart。