kustomize

上一节我们通过资源清单来创建资源
实际工作中,在使用 Kubernetes 时,多个团队会使用开发、​暂存、​测试和生产等多个环境来部署应用。​这些环境在配置上也许有细微差异。如果要给每个环境都创建一个资源清单,那会很麻烦。kustomize 就可以解决这个问题。
kustomize 是一个开源的配置管理工具,可以对应用配置和组件进行声明式更改,并保留原始的基础 YAML 文件.我们可以把资源对象的清单文件放在一个目录中,然后用 kustomize 复制这些文件并做修改。

kubectl 和 oc 命令已经集成了 kustomize 命令

kustomize 目录结构

kustomize 的结构如下所示:

alt text

在图中我们可以看到 base 和 overlay 两部分
base 是我们的基础配置文件,理解为默认,模板都可以。
overlay 是我们以 base 为基础,二次修改的。

在 overlay 目录下,又有我们根据不同环境创建的目录。这就是大概的目录结构

Base (基础)

基础⽬录中包含⽤于创建配置映射、部署、服务、机密和路由资源的 YAML ⽂件。他们都是通用的资源,可以用它创建的是默认的资源对象。

base 目录的基本结构

1
2
3
4
5
6
7
base
├── configmap.yaml
├── deployment.yaml
├── secret.yaml
├── service.yaml
├── route.yaml
└── kustomization.yaml

base 下 kustomization.yaml 文件

在 base 基础目录中,有 kustomization.yaml 文件。这个文件很重要,在resources 字段中记录了所有资源⽂件。

1
2
3
4
5
6
7
8
apiVersion: kustomize.config.k8s.io/v1beta1 # 版本
kind: Kustomization # 资源类型
resources: # 引用的资源⽂件
- configmap.yaml
- deployment.yaml
- secret.yaml
- service.yaml
- route.yaml

overlay (覆盖)

首先要说明的是 kustomize 覆盖声明式 YAML 或补丁,不会修改原始文件。理解成更优先得得配置从而覆盖了基础(base) 得配置。这里把覆盖理解为拓展吧。

overlay 目录也包含一个 kustomization.yaml 文件。overlay 可以创建一个或多个目录作为拓展配置目录。多个拓展可以使用同一个基础目录。

overlay 目录示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[user@host frontend-app]$ tree
base
├── configmap.yaml
├── deployment.yaml
├── secret.yaml
├── service.yaml
├── route.yaml
└── kustomization.yaml
overlay
└── development
└── kustomization.yaml
└── testing
└── kustomization.yaml
└── production
├── kustomization.yaml
└── patch.yaml

overlays/development ⽬录中的 kustomization.yaml ⽂件:

1
2
3
4
5
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: dev-env
resources:
- ../../base

上面的配置文件表示,development 这个项目用 base (../../base 这个路径就是指向了 base ⽬录) 作为基础目录,在 dev-env 这个命名空间下创建资源。

Kustomize 提供了相应的字段,⽤于为 kustomization ⽂件中的所有资源设置值:

字段 描述
namespace 为所有资源设置特定的命名空间。
namePrefix 为所有资源的名称添加前缀。
nameSuffix 为所有资源的名称添加后缀。
commonLabels 为所有资源和选择器添加标签。
commonannotations 为所有资源和选择器添加注释。

overlay 覆盖的内容
patches 是一个列表
base 目录
kustomization.yaml 文件

overerlay 目录
kustomization.yaml 文件

op 表示操作 operation
target 改谁

多个 overlay 目录可以基于同一个 base 目录

用 kubectl apply -k 命令来更新kustomize 配置

删除资源 oc delete kustomize kustomization目录

生成器
2 个字段