Helm 企业发布与恢复
验证:未记录
- 适用版本
- 未记录
- 验证范围
- 尚未登记验证记录。
本文缩写(英文全称与中文含义)
| 缩写 | 英文全称/名称 | 中文含义 |
|---|---|---|
| API | Application Programming Interface | 应用程序编程接口 |
| CD | Continuous Delivery / Continuous Deployment | 持续交付/持续部署;是否自动上线取决于流程 |
| CI | Continuous Integration | 持续集成 |
| CLI | Command-Line Interface | 命令行接口 |
| CRD | Custom Resource Definition | Kubernetes 自定义资源定义 |
| LB | Load Balancer | 负载均衡器 |
| OCI | Open Container Initiative | 开放容器倡议及其镜像/运行时规范 |
| PDB | Pod Disruption Budget | Pod 中断预算,约束自愿驱逐 |
| PVC | Persistent Volume Claim | 持久卷申领 |
| RBAC | Role-Based Access Control | 基于角色的访问控制 |
场景:平台团队将第三方组件交付到预生产/生产,业务团队复用同一 Chart,环境差异仅在 values。前置:企业演练基线。本文命令以 Helm 3 为基准;Helm 4 的失败恢复参数应查对应 CLI,不直接混用。
关键点#
- Chart version、appVersion、镜像 digest 是三件事;依赖用
Chart.lock固定,CI 用dependency build,不在生产随意 update。 - release 的 namespace 与应用资源 namespace 必须明确;拥有 Secret 读取权限可能读取 release 中的敏感 values。
--atomic能恢复部分 Kubernetes 发布状态,不能撤销数据库迁移、外部 API 副作用或 CRD schema 改动。crds/的生命周期与普通模板不同;建立平台 CRD 升级步骤,不靠应用 rollback 猜测恢复。
Hands-on:交付现有业务 Chart#
仓库约定:charts/orders/ 是团队已经开发、包含 Deployment/Service/PDB/probes/resources 的业务 Chart;values schema 拒绝空镜像、错误资源单位。API/worker 的数据库变更必须 expand→migrate→contract,旧版本仍能运行。
charts/orders/{Chart.yaml,Chart.lock,values.yaml,values.schema.json,templates/}
environments/staging/orders.yaml
environments/production/orders.yaml
evidence/<change-id>/CI 执行(以下不包含数据库迁移):
helm version
helm dependency build charts/orders
helm lint charts/orders --strict -f environments/staging/orders.yaml
umask 077
helm template orders charts/orders --namespace orders -f environments/staging/orders.yaml > rendered.yaml
# 先安装平台提供的 CRD,再做服务器校验。避免将渲染的 Secret 写入公开日志。
kubectl apply --dry-run=server -f rendered.yaml
helm package charts/orders --destination dist检查渲染结果:RBAC 不越权、镜像固定 digest、没有公开管理端口、PDB 与 topologySpread 合理;使用组织的准入/签名策略检查制品。推送至已有私有 OCI registry:
export CHART_PACKAGE='dist/orders-REPLACE_VERSION.tgz'
export CHART_REGISTRY='registry.example.com/platform/charts'
# 使用 CI 短期登录凭据;先按仓库方式完成 helm registry login。
helm push "$CHART_PACKAGE" "oci://$CHART_REGISTRY"由发布身份执行;初始发布不允许应用 chart 自行创建集群管理员角色:
export CHART_VERSION='REPLACE_VERSION'
helm upgrade --install orders "oci://$CHART_REGISTRY/orders" --version "$CHART_VERSION" --namespace orders -f environments/staging/orders.yaml --atomic --wait --wait-for-jobs --timeout 15m --history-max 10
helm status orders -n orders
helm history orders -n orders
kubectl -n orders rollout status deployment/orders-api --timeout=10m安装成功后执行基线的完整订单链路与负载;避免带业务写入副作用的 Helm test Hook 自动重跑。Hook 需幂等、限时且有清理策略,不能把数据库 destructive migration 藏在 pre-upgrade 中。
故障、恢复与生产推广#
- 在 staging 发布一个明确不接流的 readiness 错误配置,验证发布超时后旧副本继续服务;检查 Helm 状态和资源是否真的恢复。
- 修正配置重新发布,再验证升级期间成功率;单独演练一次手动恢复到实际存在的历史 revision:
export GOOD_REVISION='REPLACE_HISTORY_REVISION'
helm rollback orders "$GOOD_REVISION" -n orders --wait --timeout 15m
kubectl -n orders rollout status deployment/orders-api --timeout=10m- 业务数据已迁移或产生新写入时,先确认旧应用兼容;不能因为 Helm rollback 成功就宣称数据库恢复。
- 生产用相同 Chart 制品和审阅过的 production values,先试点后扩大。启用 Argo CD/Flux 后,从 Git 恢复版本,停止手工改 release。
交付物:Chart/锁文件/schema、完整 values、兼容矩阵、渲染审计、升级和恢复证据。卸载前盘点 PVC、CRD、Hook、云 LB;不要用 helm uninstall 代替数据下线流程。
可直接运行的配套工程#
没有 charts/orders 时,直接使用 订单参考工程 附带的完整 Chart、schema 与可构建业务;本文发布流程可复用。