SuperAPI AI 工具集

helm-charts

部署与运维

查看项目

更新于 10-15 11:53

技能介绍

用途

Helm Charts 技能用于创建、管理和部署 Kubernetes 应用的 Helm 包,即 Kubernetes 的包管理器。它适合以下场景:创建可复用的 Kubernetes 应用包;使用可配置的值部署应用;管理 Helm release 与升级;使用第三方 Helm chart;实现 chart 版本管理与仓库。

前提条件

  • 已安装 Helm 3.x
  • kubectl 已配置集群访问权限
  • 具备基本 Kubernetes 知识

Chart 结构

一个典型 chart 目录包含:

  • Chart.yaml:Chart 元数据
  • values.yaml:默认配置值
  • charts/:Chart 依赖
  • templates/:Kubernetes 清单模板,包括 deployment.yaml、service.yaml、ingress.yaml、configmap.yaml、secret.yaml、_helpers.tpl、NOTES.txt 以及 tests/test-connection.yaml
  • .helmignore:需要忽略的文件

Chart.yaml 与 values.yaml

Chart.yaml 使用 apiVersion v2,包含 name、description、type、version、appVersion、keywords、maintainers 和 dependencies 等字段。dependencies 可指定名称、版本、仓库和 condition。

values.yaml 定义默认配置,例如 replicaCount、image(repository、tag、pullPolicy)、service(type、port)、ingress(enabled、className、hosts、tls)、resources(limits、requests)以及第三方依赖(如 postgresql)的配置。

模板

Deployment 模板使用 include 引用辅助模板生成名称和标签,通过 .Values 读取配置,使用 default 回退到 .Chart.AppVersion,并通过 toYaml 与 nindent 输出 resources。环境变量可从 Secret 读取。

辅助函数定义在 templates/_helpers.tpl 中,包括 myapp.name、myapp.fullname、myapp.labels、myapp.selectorLabels,用于生成名称、全限定名称和标签。

条件资源示例为 ingress.yaml,通过 {{- if .Values.ingress.enabled -}} 控制是否渲染,并支持 annotations、tls 和 hosts 的循环。

Helm 命令

安装:

helm install myapp ./mychart
helm install myapp ./mychart -f custom-values.yaml
helm install myapp ./mychart --set replicaCount=3 --set image.tag=2.0.0
helm install myapp ./mychart -n production --create-namespace
helm install myapp ./mychart --dry-run --debug

管理 release:

helm list
helm list -A
helm upgrade myapp ./mychart
helm upgrade myapp ./mychart -f new-values.yaml
helm rollback myapp 1
helm history myapp
helm uninstall myapp

Chart 开发:

helm create mychart
helm lint ./mychart
helm template myapp ./mychart
helm package ./mychart
helm dependency update ./mychart

仓库操作:

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm search repo postgresql
helm search hub prometheus
helm install postgres bitnami/postgresql
helm show values bitnami/postgresql

高级功能

Hooks:通过注解 helm.sh/hook、helm.sh/hook-weight、helm.sh/hook-delete-policy 定义 pre-install、pre-upgrade 等钩子,例如数据库迁移 Job。

测试:在 templates/tests/ 中定义带 helm.sh/hook: test 注解的 Pod,使用 helm test myapp 运行。

库 Chart:Chart.yaml 中 type: library,通过 dependencies 引用。

OCI 仓库支持:

helm registry login registry.example.com
helm push mychart-1.0.0.tgz oci://registry.example.com/charts
helm pull oci://registry.example.com/charts/mychart --version 1.0.0
helm install myapp oci://registry.example.com/charts/mychart

常见问题

  • YAML 缩进错误:使用 nindent 辅助函数,如 {{- toYaml .Values.resources | nindent 12 }}。
  • 值未生效:检查值路径,使用 --debug,如 helm template myapp ./mychart --debug。
  • 依赖错误:运行 helm dependency update。
  • Release 已存在:使用 helm upgrade --install myapp ./mychart。

最佳实践

  • 对 chart 使用语义化版本
  • 提供全面的默认值
  • 在 values.yaml 中用注释记录所有值
  • 对重复模式使用辅助模板
  • 实现 chart 测试
  • 使用 .helmignore 排除不必要的文件
  • 固定依赖版本
  • 在 CI 流水线中使用 helm lint

相关技能

  • kubernetes-ops:K8s 基础
  • argocd-gitops:结合 Helm 的 GitOps
  • kustomize:替代模板方案

限制

资料未提供该技能的具体收费、价格、平台支持范围或效果数据,暂未提供。