diff --git a/content/zh-cn/docs/tasks/manage-kubernetes-objects/kustomization.md b/content/zh-cn/docs/tasks/manage-kubernetes-objects/kustomization.md index ed94b493d4e99..87496ab2d045e 100644 --- a/content/zh-cn/docs/tasks/manage-kubernetes-objects/kustomization.md +++ b/content/zh-cn/docs/tasks/manage-kubernetes-objects/kustomization.md @@ -20,9 +20,9 @@ through a [kustomization file](https://kubectl.docs.kubernetes.io/references/kus 定制 Kubernetes 对象。 从 1.14 版本开始,`kubectl` 也开始支持使用 kustomization 文件来管理 Kubernetes 对象。 要查看包含 kustomization 文件的目录中的资源,执行下面的命令: @@ -32,7 +32,7 @@ kubectl kustomize ``` 要应用这些资源,使用 `--kustomize` 或 `-k` 参数来执行 `kubectl apply`: @@ -54,7 +54,8 @@ Install [`kubectl`](/docs/tasks/tools/). ### 生成资源 {#generating-resources} @@ -83,7 +86,8 @@ Kustomize 提供 `secretGenerator` 和 `configMapGenerator`,可以基于文件 #### configMapGenerator @@ -91,6 +95,21 @@ To generate a ConfigMap from a file, add an entry to the `files` list in `config 列表中添加表项。 下面是一个根据 `.properties` 文件中的数据条目来生成 ConfigMap 的示例: + ```shell # 生成一个 application.properties 文件 cat <application.properties @@ -130,11 +149,27 @@ metadata: ``` 要从 env 文件生成 ConfigMap,请在 `configMapGenerator` 中的 `envs` 列表中添加一个条目。 下面是一个用来自 `.env` 文件的数据生成 ConfigMap 的例子: + ```shell # 创建一个 .env 文件 cat <.env @@ -174,14 +209,18 @@ metadata: {{< note >}} `.env` 文件中的每个变量在生成的 ConfigMap 中成为一个单独的键。这与之前的示例不同, 前一个示例将一个名为 `application.properties` 的文件(及其所有条目)嵌入到同一个键的值中。 {{< /note >}} ConfigMap 也可基于字面的键值偶对来生成。要基于键值偶对来生成 ConfigMap, 在 `configMapGenerator` 的 `literals` 列表中添加表项。下面是一个例子, @@ -220,7 +259,8 @@ metadata: ``` @@ -326,12 +366,30 @@ spec: #### secretGenerator 你可以基于文件或者键值偶对来生成 Secret。要使用文件内容来生成 Secret, 在 `secretGenerator` 下面的 `files` 列表中添加表项。 下面是一个根据文件中数据来生成 Secret 对象的示例: + ```shell # 创建一个 password.txt 文件 cat <./password.txt @@ -363,7 +421,8 @@ type: Opaque ``` 要基于键值偶对字面值生成 Secret,先要在 `secretGenerator` 的 `literals` 列表中添加表项。下面是基于键值偶对中数据条目来生成 Secret 的示例: @@ -447,7 +506,10 @@ EOF #### generatorOptions 所生成的 ConfigMap 和 Secret 都会包含内容哈希值后缀。 这是为了确保内容发生变化时,所生成的是新的 ConfigMap 或 Secret。 @@ -493,7 +555,7 @@ metadata: It is quite common to set cross-cutting fields for all Kubernetes resources in a project. Some use cases for setting cross-cutting fields: -* setting the same namespace for all Resources +* setting the same namespace for all resources * adding the same name prefix or suffix * adding the same set of labels * adding the same set of annotations @@ -584,9 +646,8 @@ spec: ### 组织和定制资源 {#composing-and-customizing-resources} @@ -596,7 +657,8 @@ Kustomize 提供基于不同文件来组织资源并向其应用补丁或者其 #### 组织 {#composing} @@ -605,6 +667,53 @@ Kustomize 支持组合不同的资源。`kustomization.yaml` 文件的 `resource 你可以将 `resources` 列表中的路径设置为资源配置文件的路径。 下面是由 Deployment 和 Service 构成的 NGINX 应用的示例: + ```shell # 创建 deployment.yaml 文件 cat < deployment.yaml @@ -654,14 +763,14 @@ EOF ``` `kubectl kustomize ./` 所得到的资源中既包含 Deployment 也包含 Service 对象。 @@ -685,6 +794,66 @@ replica number and another patch for setting the memory limit. The target resour 建议使用只做一件事的小补丁。例如,创建一个用于增加部署副本数量的补丁,以及另一个用于设置内存限制的补丁。 目标资源是通过补丁文件中的 `group`、`version`、`kind` 和 `name` 字段进行匹配的。 + ```shell # 创建 deployment.yaml 文件 cat < deployment.yaml @@ -790,6 +959,53 @@ is matched using `group`, `version`, `kind`, and `name` from the `target` field. 例如,可以通过 `Json6902` 补丁来增加 Deployment 对象的副本数量。 目标资源是通过 `target` 字段中的 `group`、`version`、`kind` 和 `name` 进行匹配的。 + ```shell # 创建一个 deployment.yaml 文件 cat < deployment.yaml @@ -945,6 +1161,68 @@ Service 的名称。 Service 名称可能发生变化,建议不要在命令参数中硬编码 Service 名称。 对于这种使用场景,Kustomize 可以通过 `replacements` 将 Service 名称注入到容器中。 + ```shell # 创建一个 deployment.yaml 文件(引用此处的文档分隔符) cat <<'EOF' > deployment.yaml @@ -1064,6 +1342,54 @@ Kustomize 中有 **基准(bases)** 和 **覆盖(overlays)** 的概念区 以下是 base 的一个示例: + ```shell # 创建一个包含基准的目录 mkdir base @@ -1138,7 +1464,7 @@ EOF ## 如何使用 Kustomize 来应用、查看和删除对象 @@ -1155,6 +1481,43 @@ Given the following `kustomization.yaml`, --> 假定使用下面的 `kustomization.yaml`: + ```shell # 创建 deployment.yaml 文件 cat < deployment.yaml @@ -1215,7 +1578,8 @@ kubectl describe -k ./ ``` 执行下面的命令来比较 Deployment 对象 `dev-my-nginx` 与清单被应用之后集群将处于的状态: @@ -1239,46 +1603,46 @@ deployment.apps "dev-my-nginx" deleted ## Kustomize 功能特性列表 {#kustomize-feature-list} -| 字段 | 类型 | 解释 | -|-----------------------|--------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------| -| bases | []string | 列表中每个条目都应能解析为一个包含 kustomization.yaml 文件的目录 | -| commonAnnotations | map[string]string | 要添加到所有资源的注解 | -| commonLabels | map[string]string | 要添加到所有资源和选择算符的标签 | -| configMapGenerator | [][ConfigMapArgs](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/configmapargs.go#L7) | 列表中的每个条目都会生成一个 ConfigMap | -| configurations | []string | 列表中每个条目都应能解析为一个包含 [Kustomize 转换器配置](https://github.com/kubernetes-sigs/kustomize/tree/master/examples/transformerconfigs) 的文件 | -| crds | []string | 列表中每个条目都应能够解析为 Kubernetes 类别的 OpenAPI 定义文件 | -| generatorOptions | [GeneratorOptions](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/generatoroptions.go#L7) | 更改所有 ConfigMap 和 Secret 生成器的行为 | -| images | [][Image](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/image.go#L8) | 每个条目都用来更改镜像的名称、标记与/或摘要,不必生成补丁 | -| labels | map[string]string | 添加标签而不自动注入对应的选择器 | -| namePrefix | string | 此字段的值将被添加到所有资源名称前面 | -| nameSuffix | string | 此字段的值将被添加到所有资源名称后面 | -| patchesJson6902 | [][Patch](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/patch.go#L10) | 列表中每个条目都能解析为一个 Kubernetes 对象和一个 JSON 补丁 | -| patchesStrategicMerge | []string | 列表中每个条目都能解析为某 Kubernetes 对象的策略性合并补丁 | -| replacements | [][Replacements](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/replacement.go#L15) | 将 resource 字段的值复制到任意数量的指定目标 -| resources | []string | 列表中的每个条目都必须能够解析为现有的资源配置文件 | -| secretGenerator | [][SecretArgs](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/secretargs.go#L7) | 列表中的每个条目都会生成一个 Secret | -| vars | [][Var](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/var.go#L19) | 每个条目用来从某资源的字段来析取文字 | +| 字段 | 类型 | 解释 | +|-----|------|-----| +| bases | []string | 列表中每个条目都应能解析为一个包含 kustomization.yaml 文件的目录 | +| commonAnnotations | map[string]string | 要添加到所有资源的注解 | +| commonLabels | map[string]string | 要添加到所有资源和选择算符的标签 | +| configMapGenerator | [][ConfigMapArgs](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/configmapargs.go#L7) | 列表中的每个条目都会生成一个 ConfigMap | +| configurations | []string | 列表中每个条目都应能解析为一个包含 [Kustomize 转换器配置](https://github.com/kubernetes-sigs/kustomize/tree/master/examples/transformerconfigs) 的文件 | +| crds | []string | 列表中每个条目都应能够解析为 Kubernetes 类别的 OpenAPI 定义文件 | +| generatorOptions | [GeneratorOptions](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/generatoroptions.go#L7) | 更改所有 ConfigMap 和 Secret 生成器的行为 | +| images | [][Image](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/image.go#L8) | 每个条目都用来更改镜像的名称、标记与/或摘要,不必生成补丁 | +| labels | map[string]string | 添加标签而不自动注入对应的选择器 | +| namePrefix | string | 此字段的值将被添加到所有资源名称前面 | +| nameSuffix | string | 此字段的值将被添加到所有资源名称后面 | +| patchesJson6902 | [][Patch](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/patch.go#L10) | 列表中每个条目都能解析为一个 Kubernetes 对象和一个 JSON 补丁 | +| patchesStrategicMerge | []string | 列表中每个条目都能解析为某 Kubernetes 对象的策略性合并补丁 | +| replacements | [][Replacements](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/replacement.go#L15) | 将 resource 字段的值复制到任意数量的指定目标 | +| resources | []string | 列表中的每个条目都必须能够解析为现有的资源配置文件 | +| secretGenerator | [][SecretArgs](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/secretargs.go#L7) | 列表中的每个条目都会生成一个 Secret | +| vars | [][Var](https://github.com/kubernetes-sigs/kustomize/blob/master/api/types/var.go#L19) | 每个条目用来从某资源的字段来析取文字 | ## {{% heading "whatsnext" %}}