From adbf29ff8d86d44d69ee800d8933695d722d0c69 Mon Sep 17 00:00:00 2001 From: Guangwen Feng Date: Tue, 24 May 2022 15:28:15 +0800 Subject: [PATCH] [zh] Sync kubelet-credential-provider.md and downward-api-volume-expose-pod-information.md Signed-off-by: Guangwen Feng --- ...nward-api-volume-expose-pod-information.md | 168 ++++++++++++------ .../kubelet-credential-provider.md | 61 ++++--- 2 files changed, 155 insertions(+), 74 deletions(-) diff --git a/content/zh/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md b/content/zh/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md index 69b0b9ee0d..a8df0ff12b 100644 --- a/content/zh/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md +++ b/content/zh/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md @@ -7,12 +7,15 @@ weight: 40 -此页面描述 Pod 如何使用 DownwardAPIVolumeFile 把自己的信息呈现给 Pod 中运行的容器。 -DownwardAPIVolumeFile 可以呈现 Pod 的字段和容器字段。 +此页面描述 Pod 如何使用 +[`DownwardAPIVolumeFile`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumefile-v1-core) +把自己的信息呈现给 Pod 中运行的容器。 +`DownwardAPIVolumeFile` 可以呈现 Pod 和容器的字段。 ## {{% heading "prerequisites" %}} @@ -26,16 +29,19 @@ DownwardAPIVolumeFile 可以呈现 Pod 的字段和容器字段。 There are two ways to expose Pod and Container fields to a running Container: * [Environment variables](/docs/tasks/inject-data-application/environment-variable-expose-pod-information/#the-downward-api) -* Volume Files +* Volume files + +Together, these two ways of exposing Pod and Container fields are called the +"Downward API". --> -## Downward API +## Downward API {#the-downward-api} 有两种方式可以将 Pod 和 Container 字段呈现给运行中的容器: * [环境变量](/zh/docs/tasks/inject-data-application/environment-variable-expose-pod-information/#the-downward-api) * 卷文件 -这两种呈现 Pod 和 Container 字段的方式都称为 *Downward API*。 +这两种呈现 Pod 和 Container 字段的方式都称为 "Downward API"。 -## 存储 Pod 字段 +## 存储 Pod 字段 {#store-pod-fields} 在这个练习中,你将创建一个包含一个容器的 Pod。Pod 的配置文件如下: @@ -88,7 +94,7 @@ kubectl apply -f https://k8s.io/examples/pods/inject/dapi-volume.yaml ``` 验证Pod中的容器运行正常: @@ -97,7 +103,7 @@ kubectl get pods ``` 查看容器的日志: @@ -120,7 +126,7 @@ builder="john-doe" ``` 进入 Pod 中运行的容器,打开一个 Shell: @@ -194,11 +200,10 @@ total 8 用符号链接可实现元数据的动态原子性刷新;更新将写入一个新的临时目录, -然后通过使用[rename(2)](http://man7.org/linux/man-pages/man2/rename.2.html) +然后通过使用 [rename(2)](http://man7.org/linux/man-pages/man2/rename.2.html) 完成 `..data` 符号链接的原子性更新。 -前面的练习中,你将 Pod 字段保存到 DownwardAPIVolumeFile 中。 +## 存储容器字段 {#store-container-fields} + +前面的练习中,你将 Pod 字段保存到 +[`DownwardAPIVolumeFile`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumefile-v1-core) +中。 接下来这个练习,你将存储 Container 字段。这里是包含一个容器的 Pod 的配置文件: {{< codenew file="pods/inject/dapi-volume-resources.yaml" >}} -在这个配置文件中,你可以看到 Pod 有一个 `downwardAPI` 类型的卷,并且挂载到容器的 -`/etc/podinfo` 目录。 +在这个配置文件中,你可以看到 Pod 有一个 +[`downwardAPI` 卷](/zh/docs/concepts/storage/volumes/#downwardapi), +并且挂载到容器的 `/etc/podinfo` 目录。 -查看 `downwardAPI` 下面的 `items` 数组。每个数组元素都是一个 DownwardAPIVolumeFile。 +查看 `downwardAPI` 下面的 `items` 数组。每个数组元素都是一个 +[`DownwardAPIVolumeFile`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumefile-v1-core)。 -第一个元素指定名为 `client-container` 的容器中 `limits.cpu` 字段的值应保存在名为 -`cpu_limit` 的文件中。 +第一个元素指定在名为 `client-container` 的容器中, +以 `1m` 所指定格式的 `limits.cpu` 字段的值应保存在名为 `cpu_limit` 的文件中。 +`divisor` 字段是可选的,默认值为 `1`,表示 CPU 的核心和内存的字节。 创建Pod: @@ -259,7 +273,7 @@ kubectl apply -f https://k8s.io/examples/pods/inject/dapi-volume-resources.yaml ``` 打开一个 Shell,进入 Pod 中运行的容器: @@ -283,39 +297,50 @@ You can use similar commands to view the `cpu_request`, `mem_limit` and 你可以使用同样的命令查看 `cpu_request`、`mem_limit` 和 `mem_request` 文件. + + -## Downward API 的能力 +## Downward API 的能力 {#capabilities-of-the-downward-api} 下面这些信息可以通过环境变量和 `downwardAPI` 卷提供给容器: * 能通过 `fieldRef` 获得的: + * `metadata.name` - Pod 名称 * `metadata.namespace` - Pod 名字空间 * `metadata.uid` - Pod 的 UID - * `metadata.labels['']` - Pod 标签 `` 的值 (例如, `metadata.labels['mylabel']`) - * `metadata.annotations['']` - Pod 的注解 `` 的值(例如, `metadata.annotations['myannotation']`) + * `metadata.labels['']` - Pod 标签 `` 的值 + (例如:`metadata.labels['mylabel']`) + * `metadata.annotations['']` - Pod 的注解 `` 的值 + (例如:`metadata.annotations['myannotation']`) @@ -324,8 +349,10 @@ variables and `downwardAPI` volumes: * 容器的 CPU 请求值 * 容器的内存约束值 * 容器的内存请求值 - * 容器的巨页限制值(前提是启用了 `DownwardAPIHugePages` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)) - * 容器的巨页请求值(前提是启用了 `DownwardAPIHugePages` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)) + * 容器的巨页限制值(前提是启用了 `DownwardAPIHugePages` + [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)) + * 容器的巨页请求值(前提是启用了 `DownwardAPIHugePages` + [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)) * 容器的临时存储约束值 * 容器的临时存储请求值 @@ -334,23 +361,33 @@ In addition, the following information is available through `downwardAPI` volume `fieldRef`: --> 此外,以下信息可通过 `downwardAPI` 卷从 `fieldRef` 获得: + -* `metadata.labels` - Pod 的所有标签,以 `label-key="escaped-label-value"` 格式显示,每行显示一个标签 -* `metadata.annotations` - Pod 的所有注解,以 `annotation-key="escaped-annotation-value"` - 格式显示,每行显示一个标签 +* `metadata.labels` - Pod 的所有标签,以 + `label-key="escaped-label-value"` 格式显示,每行显示一个标签 +* `metadata.annotations` - Pod 的所有注解,以 + `annotation-key="escaped-annotation-value"` 格式显示,每行显示一个标签 以下信息可通过环境变量获得: -* `status.podIP` - 节点 IP -* `spec.serviceAccountName` - Pod 服务帐号名称, 版本要求 v1.4.0-alpha.3 -* `spec.nodeName` - 节点名称, 版本要求 v1.4.0-alpha.3 -* `status.hostIP` - 节点 IP, 版本要求 v1.7.0-alpha.1 +* `status.podIP` - Pod IP 地址 +* `spec.serviceAccountName` - Pod 服务帐号名称 +* `spec.nodeName` - 调度器总是尝试将 Pod 调度到的节点的名称 +* `status.hostIP` - Pod 分配到的节点的 IP -## 投射键名到指定路径并且指定文件权限 +## 投射键名到指定路径并且指定文件权限 {#project-keys-to-specific-paths-and-file-permissions} 你可以将键名投射到指定路径并且指定每个文件的访问权限。 更多信息,请参阅[Secrets](/zh/docs/concepts/configuration/secret/). @@ -376,7 +413,7 @@ basis. For more information, see -## Downward API的动机 +## Downward API 的动机 {#motivation-for-the-downward-api} 对于容器来说,有时候拥有自己的信息是很有用的,可避免与 Kubernetes 过度耦合。 Downward API 使得容器使用自己或者集群的信息,而不必通过 Kubernetes 客户端或 @@ -399,9 +436,32 @@ API 服务器来获得。 ## {{% heading "whatsnext" %}} -* [PodSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core) -* [Volume](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#volume-v1-core) -* [DownwardAPIVolumeSource](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumesource-v1-core) -* [DownwardAPIVolumeFile](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumefile-v1-core) -* [ResourceFieldSelector](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#resourcefieldselector-v1-core) + +* 参阅 + [`PodSpec`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core) + API 定义,该 API 定义 Pod 所需状态。 +* 参阅 + [`Volume`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#volume-v1-core) + API 定义,该 API 在 Pod 中定义通用卷以供容器访问。 +* 参阅 + [`DownwardAPIVolumeSource`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumesource-v1-core) + API 定义,该 API 定义包含 Downward API 信息的卷。 +* 参阅 + [`DownwardAPIVolumeFile`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumefile-v1-core) + API 定义,该 API 包含对对象或资源字段的引用,用于在 Downward API 卷中填充文件。 +* 参阅 + [`ResourceFieldSelector`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#resourcefieldselector-v1-core) + API 定义,该 API 指定容器资源及其输出格式。 diff --git a/content/zh/docs/tasks/kubelet-credential-provider/kubelet-credential-provider.md b/content/zh/docs/tasks/kubelet-credential-provider/kubelet-credential-provider.md index eb73c471c3..c888a27177 100644 --- a/content/zh/docs/tasks/kubelet-credential-provider/kubelet-credential-provider.md +++ b/content/zh/docs/tasks/kubelet-credential-provider/kubelet-credential-provider.md @@ -48,7 +48,7 @@ This guide demonstrates how to configure the kubelet's image credential provider * kubelet 镜像凭证提供程序在 v1.20 版本作为 alpha 功能引入。 @@ -73,12 +73,14 @@ every node in your cluster and stored in a known directory. The directory will b ## Configuring the Kubelet In order to use this feature, the kubelet expects two flags to be set: + * `--image-credential-provider-config` - the path to the credential provider plugin config file. * `--image-credential-provider-bin-dir` - the path to the directory where credential provider plugin binaries are located. --> ## 配置 kubelet {#configuring-the-kubelet} 为了使用这个特性,kubelet 需要设置以下两个标志: + * `--image-credential-provider-config` —— 凭据提供程序插件配置文件的路径。 * `--image-credential-provider-bin-dir` —— 凭据提供程序插件二进制文件所在目录的路径。 @@ -86,18 +88,19 @@ In order to use this feature, the kubelet expects two flags to be set: ### Configure a kubelet credential provider The configuration file passed into `--image-credential-provider-config` is read by the kubelet to determine which exec plugins -should be invoked for which container images. Here's an example configuration file you may end up using if you are using the [ECR](https://aws.amazon.com/ecr/)-based plugin: +should be invoked for which container images. Here's an example configuration file you may end up using if you are using the +[ECR](https://aws.amazon.com/ecr/)-based plugin: --> ### 配置 kubelet 凭据提供程序 {#configure-a-kubelet-credential-provider} -kubelet 会读取传入 `--image-credential-provider-config` 的配置文件文件, +kubelet 会读取传入 `--image-credential-provider-config` 的配置文件, 以确定应该为哪些容器镜像调用哪些 exec 插件。 -如果你正在使用基于 [ECR](https://aws.amazon.com/ecr/) 插件, +如果你正在使用基于 [ECR](https://aws.amazon.com/ecr/) 的插件, 这里有个样例配置文件你可能最终会使用到: ```yaml -kind: CredentialProviderConfig apiVersion: kubelet.config.k8s.io/v1alpha1 +kind: CredentialProviderConfig # providers 是将由 kubelet 启用的凭证提供程序插件列表。 # 多个提供程序可能与单个镜像匹配,在这种情况下,来自所有提供程序的凭据将返回到 kubelet。 # 如果为单个镜像调用多个提供程序,则结果会合并。 @@ -130,11 +133,11 @@ providers: # - *.*.registry.io # - registry.io:8080/path matchImages: - - "*.dkr.ecr.*.amazonaws.com" - - "*.dkr.ecr.*.amazonaws.cn" - - "*.dkr.ecr-fips.*.amazonaws.com" - - "*.dkr.ecr.us-iso-east-1.c2s.ic.gov" - - "*.dkr.ecr.us-isob-east-1.sc2s.sgov.gov" + - "*.dkr.ecr.*.amazonaws.com" + - "*.dkr.ecr.*.amazonaws.cn" + - "*.dkr.ecr-fips.*.amazonaws.com" + - "*.dkr.ecr.us-iso-east-1.c2s.ic.gov" + - "*.dkr.ecr.us-isob-east-1.sc2s.sgov.gov" # defaultCacheDuration 是插件将在内存中缓存凭据的默认持续时间 # 如果插件响应中未提供缓存持续时间。此字段是必需的。 defaultCacheDuration: "12h" @@ -145,30 +148,36 @@ providers: # 执行命令时传递给命令的参数。 # +可选 args: - - get-credentials + - get-credentials # env 定义了额外的环境变量以暴露给进程。 # 这些与主机环境以及 client-go 用于将参数传递给插件的变量结合在一起。 # +可选 env: - - name: AWS_PROFILE - value: example_profile + - name: AWS_PROFILE + value: example_profile ``` `providers` 字段是 kubelet 使用的已启用插件列表。每个条目都有几个必填字段: + * `name`:插件的名称,必须与传入`--image-credential-provider-bin-dir` 的目录中存在的可执行二进制文件的名称相匹配。 -* `matchImages`:用于匹配图像以确定是否应调用此提供程序的字符串列表。更多相关信息如下。 +* `matchImages`:用于匹配镜像以确定是否应调用此提供程序的字符串列表。更多相关信息如下。 * `defaultCacheDuration`:如果插件未指定缓存持续时间,kubelet 将在内存中缓存凭据的默认持续时间。 -* `apiVersion`:kubelet 和 exec 插件在通信时将使用的 api 版本。 +* `apiVersion`:kubelet 和 exec 插件在通信时将使用的 API 版本。 每个凭证提供程序也可以被赋予可选的参数和环境变量。 咨询插件实现者以确定给定插件需要哪些参数和环境变量集。 @@ -207,8 +216,20 @@ Some example values of `matchImages` patterns are: * 如果 imageMatch 包含端口,则该端口也必须在镜像中匹配。 `matchImages` 模式的一些示例值: + * `123456789.dkr.ecr.us-east-1.amazonaws.com` * `*.azurecr.io` * `gcr.io` * `*.*.registry.io` * `foo.registry.io:8080/path` + +## {{% heading "whatsnext" %}} + + +* 阅读 [kubelet 配置 API (v1alpha1) 参考](/zh/docs/reference/config-api/kubelet-config.v1alpha1/)中有关 `CredentialProviderConfig` 的详细信息。 +* 阅读 [kubelet 凭据提供程序 API 参考 (v1alpha1)](/docs/reference/config-api/kubelet-credentialprovider.v1alpha1/)。 +