ITADN
kubernetes-sigs/kustomize
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

kustomize

kustomize 允许你为多种用途定制原始的、无模板的 YAML 文件,同时保持原始 YAML 不变且可直接使用。

kustomize 面向 kubernetes;它理解并可以 修补 kubernetes style API 对象。 它类似于 make,因为它的操作是在文件中声明的, 并且类似于 sed,因为它输出编辑后的文本。

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

Build Status Go Report Card

kubectl 集成

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

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

v2.0.3 中的 kustomize build 流程被添加到了 kubectl v1.14。kubectl 中的 kustomize 流程在 v2.0.3 版本保持冻结,直到 kubectl v1.21,该版本将其更新为 v4.0.5。今后将定期更新,此类更新将反映在 Kubernetes 发布说明中。

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

有关使用 kubectl 集成的示例和指南,请参阅 kubernetes documentation

用法

1) 创建一个 kustomization 文件

在包含您的 YAML resource 文件(deployments、services、configmaps 等)的某个目录中,创建一个 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 可以直接 applied 到集群:

kustomize build ~/someApp | kubectl apply -f -

2) 使用 overlays 创建 variants

使用 overlays 管理配置的传统 variants - 例如 developmentstagingproduction - 这些 overlays 会修改一个公共的 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 子目录中,然后 将覆盖层放置在一个同级目录中。

覆盖层只是另一个 kustomization,它引用 基础配置,并引用要应用于该 基础配置的补丁。

这种安排使得使用 git 管理您的 配置变得容易。基础配置可能包含 由其他人管理的上游仓库中的文件。 覆盖层可以位于您拥有的仓库中。 将仓库克隆安排在磁盘上的同级目录中,可以避免 使用 git 子模块的需要(如果您喜欢子模块, 那也可以)。

生成 YAML

kustomize build ~/someApp/overlays/production

该 YAML 可以直接 applied 到集群:

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

社区

行为准则

参与 Kubernetes 社区 受 [Kubernetes 行为准则] 约束。