kustomize:定制 Kubernetes YAML 文件,支持多环境配置管理

Customization of kubernetes YAML configurations

分支150Tags359
文件最后提交记录最后更新时间
27 天前
24 天前
4 年前
1 个月前
1 年前
1 个月前
19 天前
1 个月前
24 天前
1 个月前
11 个月前
1 年前
1 个月前
2 年前
1 年前
4 年前
6 个月前
4 年前
2 年前
8 年前
4 年前
6 个月前
3 年前
1 年前
1 个月前
3 年前
5 个月前
1 年前
2 年前
2 年前
7 年前
1 个月前
1 个月前
1 个月前

kustomize

kustomize 允许您为多种用途定制原始的、无模板的 YAML 文件,同时保留原始 YAML 文件的完整性,可直接使用。

kustomize 针对 Kubernetes 进行设计;它理解并能修补 [Kubernetes 风格] 的 API 对象。它的作用方式类似于 make,因为它的操作在文件中声明,同时也类似于 sed,因为它输出编辑后的文本。

此工具由 sig-cli (KEP) 赞助。

构建状态 Go 报告卡

kubectl 集成

要查找近期版本的 kubectl 中内嵌的 kustomize 版本,请运行 kubectl version

> kubectl version --client
Client Version: v1.31.0
Kustomize Version: v5.4.2

[kubectl v1.14] 在v2.0.3版本的 kustomize 构建流程被加入。在 kubectl 中的 kustomize 流程一直停留在 v2.0.3 版本,直到 kubectl v1.21,此时将其更新至 v4.0.5。未来将定期进行更新,这些更新将在 Kubernetes 的发行说明中体现。

Kubectl 版本 Kustomize 版本
< v1.14 不适用
v1.14-v1.20 v2.0.3
v1.21 v4.0.5
v1.22 v4.2.0
v1.23 v4.4.1
v1.24 v4.5.4
v1.25 v4.5.7
v1.26 v4.5.7
v1.27 v5.0.1

有关使用 kubectl 集成的示例和指南,请参见[kubernetes 文档]。

使用方法

1) 创建一个 kustomization 文件

在包含您的 YAML [资源] 文件(部署、服务、配置映射等)的某个目录中,创建一个 kustomization 文件。

该文件应声明这些资源以及应用于它们的任何自定义,例如 添加一个通用标签


base: kustomization + resources

kustomization.yaml                                      deployment.yaml                                                 service.yaml
+---------------------------------------------+         +-------------------------------------------------------+       +-----------------------------------+
| apiVersion: kustomize.config.k8s.io/v1beta1 |         | apiVersion: apps/v1                                   |       | apiVersion: v1                    |
| kind: Kustomization                         |         | kind: Deployment                                      |       | kind: Service                     |
| labels:                                     |         | metadata:                                             |       | metadata:                         |
| - includeSelectors: true                    |         |   name: myapp                                         |       |   name: myapp                     |
|   pairs:                                    |         | spec:                                                 |       | spec:                             |
|     app: myapp                              |         |   selector:                                           |       |   selector:                       |
| resources:                                  |         |     matchLabels:                                      |       |     app: myapp                    |
|   - deployment.yaml                         |         |       app: myapp                                      |       |   ports:                          |
|   - service.yaml                            |         |   template:                                           |       |     - port: 6060                  |
| configMapGenerator:                         |         |     metadata:                                         |       |       targetPort: 6060            |
|   - name: myapp-map                         |         |       labels:                                         |       +-----------------------------------+
|     literals:                               |         |         app: myapp                                    |
|       - KEY=value                           |         |     spec:                                             |
+---------------------------------------------+         |       containers:                                     |
                                                        |         - name: myapp                                 |
                                                        |           image: myapp                                |
                                                        |           resources:                                  |
                                                        |             limits:                                   |
                                                        |               memory: "128Mi"                         |
                                                        |               cpu: "500m"                             |
                                                        |           ports:                                      |
                                                        |             - containerPort: 6060                     |
                                                        +-------------------------------------------------------+

文件结构:

~/someApp
├── deployment.yaml
├── kustomization.yaml
└── service.yaml

此目录下的资源可能是他人配置的分支。如果是这样,您可以轻松地从原始材料重新定基,以纳入改进,因为您并未直接修改这些资源。

使用以下命令生成定制化的 YAML:

kustomize build ~/someApp

YAML可以直接应用于集群:

kustomize build ~/someApp | kubectl apply -f -

2) 使用overlays创建variants

使用overlays管理配置的传统variants - 如 developmentstaging_和_production - 通过修改共同的base


overlay: kustomization + patches

kustomization.yaml                                      replica_count.yaml                      cpu_count.yaml
+-----------------------------------------------+       +-------------------------------+       +------------------------------------------+
| apiVersion: kustomize.config.k8s.io/v1beta1   |       | apiVersion: apps/v1           |       | apiVersion: apps/v1                      |
| kind: Kustomization                           |       | kind: Deployment              |       | kind: Deployment                         |
| labels:                                       |       | metadata:                     |       | metadata:                                |
|  - includeSelectors: true                     |       |   name: myapp                 |       |   name: myapp                            |
|    pairs:                                     |       | spec:                         |       | spec:                                    |
|      variant: prod                            |       |   replicas: 80                |       |  template:                               |
| resources:                                    |       +-------------------------------+       |     spec:                                |
|   - ../../base                                |                                               |       containers:                        |
| patches:                                      |                                               |         - name: myapp                    |
|   - path: replica_count.yaml                  |                                               |           resources:                     |
|   - path: cpu_count.yaml                      |                                               |             limits:                      |
+-----------------------------------------------+                                               |               memory: "128Mi"            |
                                                                                                |               cpu: "7000m"               |
                                                                                                +------------------------------------------+

文件结构如下:

~/someApp
├── base
│   ├── deployment.yaml
│   ├── kustomization.yaml
│   └── service.yaml
└── overlays
    ├── development
    │   ├── cpu_count.yaml
    │   ├── kustomization.yaml
    │   └── replica_count.yaml
    └── production
        ├── cpu_count.yaml
        ├── kustomization.yaml
        └── replica_count.yaml

将步骤(1)中的工作移入名为 basesomeApp 子目录中,然后将覆盖层放置在与 base 同级的目录中。

覆盖层实际上只是一个指向基础配置并对该基础配置应用修补的另一个 kustomization。

这种布局便于使用 git 管理配置。基础配置中可能包含由他人管理的上游仓库中的文件。覆盖层可以存放在你拥有的仓库中。在磁盘上将仓库副本作为同级目录排列,可避免使用 git 子模块(尽管如果你喜欢子模块,这种方式同样适用)。

生成 YAML 格式的内容。

kustomize build ~/someApp/overlays/production

YAML 文件可以直接应用到集群中:

kustomize build ~/someApp/overlays/production | kubectl apply -f -

社区

行为准则

参与 Kubernetes 社区需遵守 [Kubernetes 行为准则]。

项目介绍

定制 Kubernetes YAML 配置文件【此简介由AI生成】

定制我的领域
10812.15 K2.42 K访问 GitHub