From dd34015c50071501fdef08079f6de5c310c16776 Mon Sep 17 00:00:00 2001 From: Sean Wei Date: Sun, 29 May 2022 17:40:00 +0800 Subject: [PATCH] [zh] Sync configure-pod-configmap.md --- .../configure-pod-configmap.md | 219 ++++++++++++------ 1 file changed, 154 insertions(+), 65 deletions(-) diff --git a/content/zh/docs/tasks/configure-pod-container/configure-pod-configmap.md b/content/zh/docs/tasks/configure-pod-container/configure-pod-configmap.md index 6fece7c5e3..398e0e8c71 100644 --- a/content/zh/docs/tasks/configure-pod-container/configure-pod-configmap.md +++ b/content/zh/docs/tasks/configure-pod-container/configure-pod-configmap.md @@ -21,7 +21,7 @@ Many applications rely on configuration which is used during either application Most of the times there is a requirement to adjust values assigned to configuration parameters. ConfigMaps is the kubernetes way to inject application pods with configuration data. -ConfigMaps allow you to decouple configuration artifacts from image content to keep containerized applications portable. This page provides a series of usage examples demonstrating how to create ConfigMaps and configure Pods using data stored in ConfigMaps. +ConfigMaps allow you to decouple configuration artifacts from image content to keep containerized applications portable. This page provides a series of usage examples demonstrating how to create ConfigMaps and configure Pods using data stored in ConfigMaps. --> 很多应用在其初始化或运行期间要依赖一些配置信息。大多数时候, 存在要调整配置参数所设置的数值的需求。 @@ -41,7 +41,7 @@ ConfigMap 允许你将配置文件与镜像文件分离,以使容器化的应 You can use either `kubectl create configmap` or a ConfigMap generator in `kustomization.yaml` to create a ConfigMap. Note that `kubectl` starts to support `kustomization.yaml` since 1.14. --> -## 创建 ConfigMap +## 创建 ConfigMap {#create-a-configmap} 你可以使用 `kubectl create configmap` 或者在 `kustomization.yaml` 中的 ConfigMap 生成器来创建 ConfigMap。注意,`kubectl` 从 1.14 版本开始支持 `kustomization.yaml`。 @@ -49,15 +49,20 @@ You can use either `kubectl create configmap` or a ConfigMap generator in `kusto -### 使用 kubectl create configmap 创建 ConfigMap +### 使用 kubectl create configmap 创建 ConfigMap {#create-a-configmap-using-kubectl-create-configmap} 你可以使用 `kubectl create configmap` 命令基于[目录](#create-configmaps-from-directories)、 [文件](#create-configmaps-from-files)或者[字面值](#create-configmaps-from-literal-values)来创建 ConfigMap: + ```shell kubectl create configmap <映射名称> <数据源> ``` @@ -107,11 +112,24 @@ For example: 例如: + ```shell # 创建本地目录 mkdir -p configure-pod-container/configmap/ -# 将实例文件下载到 `configure-pod-container/configmap/` 目录 +# 将示例文件下载到 `configure-pod-container/configmap/` 目录 wget https://kubernetes.io/examples/configmap/game.properties -O configure-pod-container/configmap/game.properties wget https://kubernetes.io/examples/configmap/ui.properties -O configure-pod-container/configmap/ui.properties @@ -186,7 +204,6 @@ metadata: name: game-config namespace: default resourceVersion: "516" - selfLink: /api/v1/namespaces/default/configmaps/game-config uid: b4952dc3-d670-11e5-8cd0-68f728db1985 data: game.properties: | @@ -264,9 +281,9 @@ kubectl create configmap game-config-2 --from-file=configure-pod-container/confi ``` -描述上面创建的 `game-config-2` ConfigMap: +你可以使用以下命令显示 `game-config-2` ConfigMap 的详细信息: ```shell kubectl describe configmaps game-config-2 @@ -334,6 +351,9 @@ cat configure-pod-container/configmap/game-env-file.properties enemies=aliens lives=3 allowed="true" + +# This comment and the empty line above it are ignored +``` --> Env 文件包含环境变量列表。其中适用以下语法规则: @@ -402,18 +422,6 @@ specified multiple times to create a ConfigMap from multiple data sources. --> 从 Kubernetes 1.23 版本开始,`kubectl` 支持多次指定 `--from-env-file` 参数来从多个数据源创建 ConfigMap。 - -下面是一个多次使用 `--from-env-file` 参数的示例: - - ```shell kubectl create configmap config-multi-env-files \ --from-env-file=configure-pod-container/configmap/game-env-file.properties \ @@ -442,7 +450,6 @@ metadata: name: config-multi-env-files namespace: default resourceVersion: "810136" - selfLink: /api/v1/namespaces/default/configmaps/config-multi-env-files uid: 252c4572-eb35-11e7-887b-42010a8002b8 data: allowed: '"true"' @@ -458,21 +465,28 @@ data: You can define a key other than the file name to use in the `data` section of your ConfigMap when using the `--from-file` argument: --> -#### 定义从文件创建 ConfigMap 时要使用的键 +#### 定义从文件创建 ConfigMap 时要使用的键 {#define-the-key-to-use-when-generating-a-configmap-from-a-file} 在使用 `--from-file` 参数时,你可以定义在 ConfigMap 的 `data` 部分出现键名, 而不是按默认行为使用文件名: + ```shell kubectl create configmap game-config-3 --from-file=<我的键名>=<文件路径> ``` `<我的键名>` 是你要在 ConfigMap 中使用的键名,`<文件路径>` 是你想要键所表示的数据源文件的位置。 - + 例如: ```shell @@ -488,7 +502,9 @@ would produce the following ConfigMap: kubectl get configmaps game-config-3 -o yaml ``` - + 输出类似以下内容: ```yaml @@ -499,7 +515,6 @@ metadata: name: game-config-3 namespace: default resourceVersion: "530" - selfLink: /api/v1/namespaces/default/configmaps/game-config-3 uid: 05f8da22-d671-11e5-8cd0-68f728db1985 data: game-special-key: | @@ -548,7 +563,6 @@ metadata: name: special-config namespace: default resourceVersion: "651" - selfLink: /api/v1/namespaces/default/configmaps/special-config uid: dadce046-d673-11e5-8cd0-68f728db1985 data: special.how: very @@ -563,7 +577,7 @@ You can also create a ConfigMap from generators and then apply it to create the the Apiserver. The generators should be specified in a `kustomization.yaml` inside a directory. --> -### 基于生成器创建 ConfigMap +### 基于生成器创建 ConfigMap {#create-a-configmap-from-generator} 自 1.14 开始,`kubectl` 开始支持 `kustomization.yaml`。 你还可以基于生成器(Generators)创建 ConfigMap,然后将其应用于 API 服务器上创建对象。 @@ -572,20 +586,31 @@ should be specified in a `kustomization.yaml` inside a directory. -#### 基于文件生成 ConfigMap +#### 基于文件生成 ConfigMap {#generate-configmaps-from-files} -例如,要基于 `configure-pod-container/configmap/kubectl/game.properties` +例如,要基于 `configure-pod-container/configmap/game.properties` 文件生成一个 ConfigMap: + ```shell # 创建包含 ConfigMapGenerator 的 kustomization.yaml 文件 cat <./kustomization.yaml configMapGenerator: - name: game-config-4 files: - - configure-pod-container/configmap/kubectl/game.properties + - configure-pod-container/configmap/game.properties EOF ``` @@ -648,22 +673,33 @@ new ConfigMap is generated each time the content is modified. #### Define the key to use when generating a ConfigMap from a file You can define a key other than the file name to use in the ConfigMap generator. -For example, to generate a ConfigMap from files `configure-pod-container/configmap/kubectl/game.properties` +For example, to generate a ConfigMap from files `configure-pod-container/configmap/game.properties` with the key `game-special-key` --> -#### 定义从文件生成 ConfigMap 时要使用的键 +#### 定义从文件生成 ConfigMap 时要使用的键 {#define-the-key-to-use-when-generating-a-configmap-from-a-file} 在 ConfigMap 生成器中,你可以定义一个非文件名的键名。 例如,从 `configure-pod-container/configmap/game.properties` 文件生成 ConfigMap, 但使用 `game-special-key` 作为键名: + ```shell # 创建包含 ConfigMapGenerator 的 kustomization.yaml 文件 cat <./kustomization.yaml configMapGenerator: - name: game-config-5 files: - - game-special-key=configure-pod-container/configmap/kubectl/game.properties + - game-special-key=configure-pod-container/configmap/game.properties EOF ``` @@ -684,13 +720,25 @@ configmap/game-config-5-m67dt67794 created #### Generate ConfigMaps from Literals To generate a ConfigMap from literals `special.type=charm` and `special.how=very`, -you can specify the ConfigMap generator in `kusotmization.yaml` as +you can specify the ConfigMap generator in `kustomization.yaml` as --> -#### 基于字面值生成 ConfigMap +#### 基于字面值生成 ConfigMap {#generate-configmaps-from-literals} 要基于字符串 `special.type=charm` 和 `special.how=very` 生成 ConfigMap, -可以在 `kusotmization.yaml` 中配置 ConfigMap 生成器: +可以在 `kustomization.yaml` 中配置 ConfigMap 生成器: + ```shell # 创建带有 ConfigMapGenerator 的 kustomization.yaml 文件 cat <./kustomization.yaml @@ -720,9 +768,9 @@ configmap/special-config-2-c92b5mmcf2 created ### Define a container environment variable with data from a single ConfigMap --> -## 使用 ConfigMap 数据定义容器环境变量 +## 使用 ConfigMap 数据定义容器环境变量 {#define-container-environment-variables-using-configmap-data} -### 使用单个 ConfigMap 中的数据定义容器环境变量 +### 使用单个 ConfigMap 中的数据定义容器环境变量 {#define-a-container-environment-variable-with-data-from-a-single-configmap} + 创建 Pod: ```shell kubectl create -f https://kubernetes.io/examples/pods/pod-single-configmap-env-variable.yaml ``` - + 现在,Pod 的输出包含环境变量 `SPECIAL_LEVEL_KEY=very`。 -### 使用来自多个 ConfigMap 的数据定义容器环境变量 +### 使用来自多个 ConfigMap 的数据定义容器环境变量 {#define-container-environment-variables-with-data-from-multiple-configmaps} - + * 与前面的示例一样,首先创建 ConfigMap。 {{< codenew file="configmap/configmaps.yaml" >}} - + 创建 ConfigMap: ```shell @@ -774,20 +830,24 @@ configmap/special-config-2-c92b5mmcf2 created {{< codenew file="pods/pod-multiple-configmap-env-variable.yaml" >}} - + 创建 Pod: ```shell kubectl create -f https://kubernetes.io/examples/pods/pod-multiple-configmap-env-variable.yaml ``` - + 现在,Pod 的输出包含环境变量 `SPECIAL_LEVEL_KEY=very` 和 `LOG_LEVEL=INFO`。 -## 将 ConfigMap 中的所有键值对配置为容器环境变量 +## 将 ConfigMap 中的所有键值对配置为容器环境变量 {#configure-all-key-value-pairs-in-a-configmap-as-container-environment-variables} + 创建 ConfigMap: ```shell @@ -818,20 +880,24 @@ Kubernetes v1.6 和更高版本支持此功能。 {{< codenew file="pods/pod-configmap-envFrom.yaml" >}} - + 创建 Pod: ```shell kubectl create -f https://kubernetes.io/examples/pods/pod-configmap-envFrom.yaml ``` - + 现在,Pod 的输出包含环境变量 `SPECIAL_LEVEL=very` 和 `SPECIAL_TYPE=charm`。 -## 在 Pod 命令中使用 ConfigMap 定义的环境变量 +## 在 Pod 命令中使用 ConfigMap 定义的环境变量 {#use-configmap-defined-environment-variables-in-pod-commands} -## 将 ConfigMap 数据添加到一个卷中 +## 将 ConfigMap 数据添加到一个卷中 {#add-configmap-data-to-a-volume} -如基于文件创建 [ConfigMap](#create-configmaps-from-files) 中所述,当你使用 +如基于文件创建 [ConfigMap](#create-configmaps-from-files) 中所述,当你使用 `--from-file` 创建 ConfigMap 时,文件名成为存储在 ConfigMap 的 `data` 部分中的键, 文件内容成为键对应的值。 @@ -896,18 +962,20 @@ kubectl create -f https://kubernetes.io/examples/configmap/configmap-multikeys.y Add the ConfigMap name under the `volumes` section of the Pod specification. This adds the ConfigMap data to the directory specified as `volumeMounts.mountPath` (in this case, `/etc/config`). -The `command` section references the `special.level` item stored in the ConfigMap. +The `command` section lists directory files with names that match the keys in ConfigMap. --> -### 使用存储在 ConfigMap 中的数据填充卷 +### 使用存储在 ConfigMap 中的数据填充卷 {#populate-a-volume-with-data-stored-in-a-configmap} 在 Pod 规约的 `volumes` 部分下添加 ConfigMap 名称。 这会将 ConfigMap 数据添加到 `volumeMounts.mountPath` 所指定的目录 (在本例中为 `/etc/config`)。 -`command` 部分引用存储在 ConfigMap 中的 `special.level`。 +`command` 部分列出了名称与 ConfigMap 中的键匹配的目录文件。 {{< codenew file="pods/pod-configmap-volume.yaml" >}} - + 创建 Pod: ```shell @@ -919,7 +987,7 @@ When the pod runs, the command `ls /etc/config/` produces the output below: --> Pod 运行时,命令 `ls /etc/config/` 产生下面的输出: -```shell +``` SPECIAL_LEVEL SPECIAL_TYPE ``` @@ -944,7 +1012,7 @@ Text data is exposed as files using the UTF-8 character encoding. To use some ot Use the `path` field to specify the desired file path for specific ConfigMap items. In this case, the `SPECIAL_LEVEL` item will be mounted in the `config-volume` volume at `/etc/config/keys`. --> -### 将 ConfigMap 数据添加到卷中的特定路径 +### 将 ConfigMap 数据添加到卷中的特定路径 {#add-configmap-data-to-a-specific-path-in-the-volume} 使用 `path` 字段为特定的 ConfigMap 项目指定预期的文件路径。 在这里,ConfigMap 中键 `SPECIAL_LEVEL` 的内容将挂载在 `config-volume` @@ -983,7 +1051,7 @@ Like before, all previous files in the `/etc/config/` directory will be deleted. You can project keys to specific paths and specific permissions on a per-file basis. The [Secrets](/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod) user guide explains the syntax. --> -### 映射键到指定路径并设置文件访问权限 +### 映射键到指定路径并设置文件访问权限 {#project-keys-to-specific-paths-and-file-permissions} 你可以将指定键名投射到特定目录,也可以逐个文件地设定访问权限。 [Secret 用户指南](/zh/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod) @@ -1042,7 +1110,7 @@ A container using a ConfigMap as a [subPath](/docs/concepts/storage/volumes/#usi The ConfigMap API resource stores configuration data as key-value pairs. The data can be consumed in pods or provide the configurations for system components such as controllers. ConfigMap is similar to [Secrets](/docs/concepts/configuration/secret/), but provides a means of working with strings that don't contain sensitive information. Users and system components alike can store configuration data in ConfigMap. --> -## 了解 ConfigMap 和 Pod +## 了解 ConfigMap 和 Pod {#understanding-configmaps-and-pods} ConfigMap API 资源将配置数据存储为键值对。 数据可以在 Pod 中使用,也可以用来提供系统组件(如控制器)的配置。 @@ -1067,6 +1135,25 @@ ConfigMap 的 `data` 字段包含配置数据。如下例所示,它可以简 (如用 `--from-literal` 的单个属性定义)或复杂 (如用 `--from-file` 的配置文件或 JSON blob定义)。 + ```yaml apiVersion: v1 kind: ConfigMap @@ -1107,7 +1194,9 @@ data: kubectl get events ``` - + 输出与此类似: ``` @@ -1124,7 +1213,7 @@ data: -- 你不能将 ConfigMap 用于{{< glossary_tooltip text="静态 Pod" term_id="static-pod" >}}, +- 你不能将 ConfigMap 用于{{< glossary_tooltip text="静态 Pod" term_id="static-pod" >}}, 因为 Kubernetes 不支持这种用法。 ## {{% heading "whatsnext" %}} @@ -1133,5 +1222,5 @@ data: * Follow a real world example of [Configuring Redis using a ConfigMap](/docs/tutorials/configuration/configure-redis-using-configmap/). --> * 浏览[使用 ConfigMap 配置 Redis](/zh/docs/tutorials/configuration/configure-redis-using-configmap/) - 真实实例。 + 真实示例。