Kustomize 多环境配置与发布 Hands-on
验证:未记录
- 适用版本
- 未记录
- 验证范围
- 尚未登记验证记录。
本文缩写(英文全称与中文含义)
| 缩写 | 英文全称/名称 | 中文含义 |
|---|---|---|
| CD | Continuous Delivery / Continuous Deployment | 持续交付/持续部署;是否自动上线取决于流程 |
| ESO | External Secrets Operator | 将外部秘密系统中的值同步到 Kubernetes 的控制器 |
| GitOps | GitOps | 以 Git 保存期望状态、由自动化持续协调实际状态的运维方式 |
| HPA | Horizontal Pod Autoscaler | Pod 水平自动扩缩容器 |
| IAM | Identity and Access Management | 身份与访问管理 |
| SA | Service Account | 服务账号,供程序或工作负载使用的身份 |
前置:业务基线中的 orders-base.yaml 已适配真实镜像,kubectl 内置 kustomize。Secret 值通过 ESO 管理,不用 secretGenerator 把明文提交到 Git。
1. 建目录#
mkdir -p orders-deploy/base orders-deploy/overlays/staging orders-deploy/overlays/production
cp orders-base.yaml orders-deploy/base/resources.yamlbase/kustomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources: [resources.yaml]base 是跨环境公共结构,不包含云账户专属 IAM 或生产 Secret。不同环境采用不同集群 context但相同 orders namespace,避免 namespace 重写遗留 RoleBinding/云 trust 问题。
2. 建预生产 overlay#
overlays/staging/kustomization.yaml,digest 替换为批准制品;base 中 image 名先统一为 registry.example.com/orders/api:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources: [../../base]
images:
- name: registry.example.com/orders/api
newName: registry.example.com/orders/api
digest: sha256:REPLACE_DIGEST
patches:
- path: sizing.yamloverlays/staging/sizing.yaml:
apiVersion: apps/v1
kind: Deployment
metadata: {name: orders-api, namespace: orders}
spec:
replicas: 3
template:
spec:
containers:
- name: api
resources:
requests: {cpu: 500m, memory: 512Mi}
limits: {cpu: '2', memory: 1Gi}生产 overlay 复制此结构,显式设置实际容量、入口/云身份补丁;不是简单把 staging 副本数改大就算生产。HPA 接管后从 Git 清单移除 replicas 或配置 GitOps 的字段忽略,保持唯一所有者。
3. 渲染、差异与部署#
kubectl kustomize orders-deploy/overlays/staging > rendered-staging.yaml
# 确认无占位值、镜像 digest 正确、没有意外集群级权限/生产地址。
kubectl --context="$LAB_CONTEXT" apply --dry-run=server -f rendered-staging.yaml
kubectl --context="$LAB_CONTEXT" diff -f rendered-staging.yaml
kubectl --context="$LAB_CONTEXT" apply -f rendered-staging.yaml
kubectl --context="$LAB_CONTEXT" -n orders rollout status deployment/orders-api --timeout=10m首次手工演练后交给 Argo CD 或 Flux 管理该 overlay;GitOps 项目白名单决定可管理资源,namespace/SA/Secret 等平台对象可能需要拆到平台 repo。
4. 晋级与回退#
把已验收的同一 digest提升到生产 overlay,review diff 后由生产流水线同步;不要重 build 一个同 tag 镜像。回退 Git commit 后同步并验证业务,涉及 schema 的变更按 工作负载篇兼容策略执行。删除 manifest 不一定触发资源删除,prune 必须独立审查。
验收:staging/production 渲染结果只有预期配置差异、无明文 Secret、镜像不可变、业务验证通过;清理只针对独立实验 namespace。
参考:Kustomize。