Kustomize 配置 Kubernetes 应用
Kustomize 是专为 Kubernetes 设计的声明式配置管理工具,允许用户通过分层和声明式方式定制和管理应用程序配置,无需直接修改原始清单文件。Kustomize 已集成到 kubectl ,成为 Kubernetes 原生配置管理方案。
Kustomize 提供多种声明式配置管理能力,适用于复杂的 Kubernetes 应用场景:
配置合并与分层管理
Kustomize 采用 基础配置(
base) 和 覆盖配置(overlay) 的分层架构:- 基础配置(base) :应用的通用资源定义
- 覆盖配置(overlay) :针对特定环境或需求的定制,支持修改、添加或删除基础内容
声明式配置与复用
Kustomize 使用 YAML 格式的
kustomization.yaml文件描述定制规则,支持:- 资源引用与组合
- 名称前后缀统一管理
- 标签与注释批量添加
- 环境变量与配置映射替换
- 镜像标签动态修改
通过组件与补丁(patches),实现配置的复用与跨项目共享,降低维护成本。
多环境配置管理
Kustomize 天然支持多环境部署,可为开发、测试、生产等环境创建专属覆盖(overlay)配置,实现一套基础配置适配多环境。
关键特性
- 无模板定制 :无需模板语言即可修改清单
- 基于覆盖(overlay)的配置 :通过补丁实现变体
- 资源生成 :自动生成
ConfigMaps、Secrets - 资源转换 :内置或自定义转换器
- 插件系统 :支持多种插件扩展,扩展资源生成与转换能力。插件类型包括:
- Generators :如
ConfigMapGenerator、SecretGenerator - Transformers :如
PatchTransformer、NamespaceTransformer - Validators :资源校验插件
- Generators :如
- 变量替换 :运行时数据注入
自 Kubernetes 1.14 起,Kustomize 已内置于 kubectl ,提供原生配置管理能力。 kubectl 内置 Kustomize 版本随 Kubernetes 版本变化。
kubectl version --client |
Kustomize 相关常用命令
直接应用配置:
kubectl apply -k overlays/dev |
预览生成的清单:
kubectl kustomize overlays/prod |
查看配置差异:
kubectl diff -k overlays/prod |
删除应用的资源:
kubectl delete -k overlays/dev |
配置结构
基础配置结构示例
base/ |
base/kustomization.yaml 示例:
apiVersion: kustomize.config.k8s.io/v1beta1 |
在此基础上的特定环境的配置
overlays/ |
verlays/dev/kustomization.yaml 示例:
apiVersion: kustomize.config.k8s.io/v1beta1 |
overlays/prod/kustomization.yaml 示例:
apiVersion: kustomize.config.k8s.io/v1beta1 |
核心概念说明
- Base : 原始(最初版本)未修改的通用配置
- Overlays : 基于 Base 层为特定环境自定义配置的层
- Resources : Kubernetes YAML 对象
- kustomization.yaml : 声明资源与定制规则
Kustomization 对象
apiVersion: kustomize.config.k8s.io/v1beta1 |
贯穿性字段 通常用于以下目的:
- 为所有资源设置相同的名字空间(
namespace) - 为所有对象添加相同的前缀或后缀(
namePrefix / nameSuffix) - 为对象添加相同的标签集合 (
labels) - 为对象添加相同的注解集合(
commonAnnotations)