使用 Kustomize 配置 Kubernetes 应用
Kustomize 是一个专为 Kubernetes 设计的声明式配置管理工具,它允许用户通过分层和声明式的方式定制和管理应用程序配置,而无需直接修改原始的清单文件。Kustomize 现已集成到 kubectl 中,成为 Kubernetes 原生的配置管理解决方案。
Kustomize 核心功能
配置合并与分层管理
Kustomize 采用基础配置(base)和覆盖配置(overlay)的分层架构:
- 基础配置:作为应用程序的基准配置,包含通用的 Kubernetes 资源定义
- 覆盖配置:针对特定环境或需求的定制配置,可以修改、添加或删除基础配置中的内容
这种分层方式实现了配置的继承和定制,提高了配置管理的灵活性。
声明式配置管理
Kustomize 使用 YAML 格式的 kustomization.yaml
文件来描述配置定制规则,支持:
- 资源引用和组合
- 名称前缀和后缀添加
- 标签和注释的统一管理
- 环境变量和配置映射的替换
- 镜像标签的动态修改
配置复用与共享
通过定义可重用的配置组件和补丁(patches),Kustomize 支持:
- 跨项目的配置共享
- 组件化的配置管理
- 减少重复配置的维护成本
多环境配置管理
Kustomize 天然支持多环境部署,允许为不同环境(开发、测试、生产)创建特定的覆盖配置,实现一套基础配置适配多个环境的需求。
实践示例
以下是一个完整的 Kustomize 配置管理示例,展示如何管理一个名为 “webapp” 的应用程序。
基础配置结构
以下是相关的配置示例:
base/
├── kustomization.yaml
├── deployment.yaml
├── service.yaml
└── configmap.yaml
base/kustomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
- configmap.yaml
commonLabels:
app: webapp
环境特定配置
以下是相关的配置示例:
overlays/
├── dev/
│ ├── kustomization.yaml
│ └── replica-patch.yaml
└── prod/
├── kustomization.yaml
├── replica-patch.yaml
└── resource-limits.yaml
overlays/dev/kustomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: webapp-dev
resources:
- ../../base
patchesStrategicMerge:
- replica-patch.yaml
images:
- name: webapp
newTag: dev-latest
overlays/prod/kustomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: webapp-prod
resources:
- ../../base
patchesStrategicMerge:
- replica-patch.yaml
- resource-limits.yaml
images:
- name: webapp
newTag: v1.2.3
replicas:
- name: webapp-deployment
count: 3
与 kubectl 集成使用
自 Kubernetes 1.14 版本起,Kustomize 已内置于 kubectl 中,提供了原生的配置管理能力。
常用命令
直接应用配置:
kubectl apply -k overlays/dev
预览生成的清单:
kubectl kustomize overlays/prod
查看配置差异:
kubectl diff -k overlays/prod
删除应用的资源:
kubectl delete -k overlays/dev
高级功能
使用 Kustomize 进行配置验证:
# 验证配置语法
kubectl kustomize overlays/prod --enable-alpha-plugins
# 结合其他工具进行验证
kubectl kustomize overlays/prod | kubectl apply --dry-run=client -f -
与 CI/CD 集成:
# 在 CI/CD 流水线中使用
kubectl kustomize overlays/prod > final-manifest.yaml
kubectl apply -f final-manifest.yaml
最佳实践
- 目录结构规范:采用清晰的目录结构,区分 base 和 overlays
- 版本控制:将所有配置文件纳入版本控制系统
- 配置验证:在部署前验证生成的配置文件
- 文档维护:为复杂的配置定制添加说明文档
- 安全考虑:避免在配置文件中硬编码敏感信息
通过 Kustomize,你可以实现 Kubernetes 配置的标准化管理,提高配置的可维护性和部署的一致性。更多详细信息请参考 Kubernetes 官方文档。