diff --git a/content/zh-cn/docs/reference/kubernetes-api/workload-resources/pod-v1.md b/content/zh-cn/docs/reference/kubernetes-api/workload-resources/pod-v1.md index 1e64fd7b0a..34cdd3a143 100644 --- a/content/zh-cn/docs/reference/kubernetes-api/workload-resources/pod-v1.md +++ b/content/zh-cn/docs/reference/kubernetes-api/workload-resources/pod-v1.md @@ -54,7 +54,7 @@ Pod 是可以在主机上运行的容器的集合。此资源由客户端创建 --> - **spec** (}}">PodSpec) - 对 Pod 预期行为的规约。更多信息: + 对 Pod 预期行为的规约。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status +- **ephemeralContainers** ([]}}">EphemeralContainer) + + **补丁策略:基于 `name` 键合并** + + 在此 Pod 中运行的临时容器列表。临时容器可以在现有的 Pod 中运行,以执行用户发起的操作,例如调试。 + 此列表在创建 Pod 时不能指定,也不能通过更新 Pod 规约来修改。 + 要将临时容器添加到现有 Pod,请使用 Pod 的 `ephemeralcontainers` 子资源。 + + 如果 os 字段设置为 `windows`,则必须不能设置以下字段: - `spec.hostPID` - `spec.hostIPC` + - `spec.hostUsers` - `spec.securityContext.seLinuxOptions` - `spec.securityContext.seccompProfile` - `spec.securityContext.fsGroup` @@ -181,8 +197,6 @@ PodSpec 是对 Pod 的描述。 - `spec.containers[*].securityContext.runAsUser` - `spec.containers[*].securityContext.runAsGroup` - 此字段为 Beta 字段,需要启用 `IdentifyPodOS` 特性门控。 - +- **preemptionPolicy** (string) + + preemptionPolicy 是用来抢占优先级较低的 Pod 的策略。取值为 `"Never"`、`"PreemptLowerPriority"` 之一。 + 如果未设置,则默认为 `"PreemptLowerPriority"`。 + - **topologySpreadConstraints.topologyKey** (string),必需 topologyKey 是节点标签的键名。如果节点的标签中包含此键名且键值亦相同,则被认为在相同的拓扑域中。 我们将每个 `<键, 值>` 视为一个 "桶(Bucket)",并尝试将数量均衡的 Pod 放入每个桶中。 - 我们定义域(Domain)为拓扑域的特定实例。此外,我们定义候选域(Eligible Domain)为其节点与节点选择算符匹配的域。 + 我们定义域(Domain)为拓扑域的特定实例。 + 此外,我们定义一个候选域(Eligible Domain)为其节点与 nodeAffinityPolicy 和 nodeTaintsPolicy 的要求匹配的域。 例如,如果 topologyKey 是 `"kubernetes.io/hostname"`,则每个 Node 都是该拓扑的域。 而如果 topologyKey 是 `"topology.kubernetes.io/zone"`,则每个区域都是该拓扑的一个域。 这是一个必填字段。 @@ -481,9 +506,9 @@ PodSpec 是对 Pod 的描述。 - **topologySpreadConstraints.whenUnsatisfiable** (string),必需 - whenUnsatisfiable 表示如果 Pod 不满足分布约束,如何处理它。 + whenUnsatisfiable 表示如果 Pod 不满足分布约束,如何处理它。 - - `DoNotSchedule`(默认):告诉调度器不要调度它。 + - `DoNotSchedule`(默认):告诉调度器不要调度它。 - `ScheduleAnyway`:告诉调度器将 Pod 调度到任何位置,但给予能够降低偏差的拓扑更高的优先级。 当且仅当该 Pod 的每个可能的节点分配都会违反某些拓扑对应的 "maxSkew" 时, @@ -515,13 +540,28 @@ PodSpec 是对 Pod 的描述。 以确定其相应拓扑域中的 Pod 数量。 + - **topologySpreadConstraints.matchLabelKeys** ([]string) + + **原子性:将在合并期间被替换** + + matchLabelKeys 是一组 Pod 标签键,用于通过计算 Pod 分布方式来选择 Pod。 + 新 Pod 标签中不存在的键将被忽略。这些键用于从新来的 Pod 标签中查找值,这些键值标签与 labelSelector 进行逻辑与运算, + 通过计算 Pod 的分布方式来选择现有 Pod 的组。新来的 Pod 标签中不存在的键将被忽略。 + null 或空的列表意味着仅与 labelSelector 匹配。 + - **topologySpreadConstraints.minDomains** (int32) @@ -545,7 +585,56 @@ PodSpec 是对 Pod 的描述。 在这种情况下,无法调度具有相同 labelSelector 的新 Pod,因为如果基于新 Pod 计算的偏差值将为 3(3-0)。将这个 Pod 调度到三个区域中的任何一个,都会违反 maxSkew 约束。 - 此字段是一个 Alpha 字段,需要启用 MinDomainsInPodTopologySpread 特性门控。 + 此字段是一个 Beta 字段,需要启用 MinDomainsInPodTopologySpread 特性门控(默认被启用)。 + + + + - **topologySpreadConstraints.nodeAffinityPolicy** (string) + + nodeAffinityPolicy 表示我们在计算 Pod 拓扑分布偏差时将如何处理 Pod 的 nodeAffinity/nodeSelector。 + 选项为: + - Honor:只有与 nodeAffinity/nodeSelector 匹配的节点才会包括到计算中。 + - Ignore:nodeAffinity/nodeSelector 被忽略。所有节点均包括到计算中。 + + 如果此值为 nil,此行为等同于 Honor 策略。 + 这是通过 NodeInclusionPolicyInPodTopologySpread 特性标志启用的 Alpha 级别特性。 + + + - **topologySpreadConstraints.nodeTaintsPolicy** (string) + + nodeTaintsPolicy 表示我们在计算 Pod 拓扑分布偏差时将如何处理节点污点。选项为: + - Honor:包括不带污点的节点以及新来 Pod 具有容忍度且带有污点的节点。 + - Ignore:节点污点被忽略。包括所有节点。 + + 如果此值为 nil,此行为等同于 Ignore 策略。 + 这是通过 NodeInclusionPolicyInPodTopologySpread 特性标志启用的 Alpha 级别特性。 + + +- **overhead** (map[string]}}">Quantity) + + overhead 表示与用指定 RuntimeClass 运行 Pod 相关的资源开销。 + 该字段将由 RuntimeClass 准入控制器在准入时自动填充。 + 如果启用了 RuntimeClass 准入控制器,则不得在 Pod 创建请求中设置 overhead 字段。 + RuntimeClass 准入控制器将拒绝已设置 overhead 字段的 Pod 创建请求。 + 如果在 Pod 规约中配置并选择了 RuntimeClass,overhead 字段将被设置为对应 RuntimeClass 中定义的值, + 否则将保持不设置并视为零。更多信息: + https://git.k8s.io/enhancements/keps/sig-node/688-pod-overhead/README.md - **restartPolicy** (string) - Pod 内所有容器的重启策略。`Always`、`OnFailure`、`Never` 之一。默认为 `Always`。更多信息: + Pod 内所有容器的重启策略。`Always`、`OnFailure`、`Never` 之一。默认为 `Always`。更多信息: https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy - **serviceAccountName** (string) - serviceAccountName 是用于运行此 Pod 的服务账号的名称。更多信息: + serviceAccountName 是用于运行此 Pod 的服务账号的名称。更多信息: https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-service-account/ - **automountServiceAccountToken** (boolean) @@ -1146,53 +1235,22 @@ PodSpec 是对 Pod 的描述。 如果同时在 SecurityContext 和 PodSecurityContext 中设置,则在 SecurityContext 中指定的值优先。 - -### Beta 级别 +### Alpha 级别 +- **hostUsers** (boolean) -- **ephemeralContainers** ([]}}">EphemeralContainer) - - **补丁策略:基于 `name` 键合并** - - 在此 Pod 中运行的临时容器列表。临时容器可以在现有的 Pod 中运行,以执行用户发起的操作,例如调试。 - 此列表在创建 Pod 时不能指定,也不能通过更新 Pod 规约来修改。 - 要将临时容器添加到现有 Pod,请使用 Pod 的 `ephemeralcontainers` 子资源。 - 此字段是 Beta 级别的,可在尚未禁用 EphemeralContainers 特性门控的集群上使用。 - - - -- **preemptionPolicy** (string) - - PreemptionPolicy 是用来抢占优先级较低的 Pod 的策略。取值为 `"Never"`、`"PreemptLowerPriority"` 之一。 - 如果未设置,则默认为 `"PreemptLowerPriority"`。 - - - -- **overhead** (map[string]}}">Quantity) - - overhead 表示与用指定 RuntimeClass 运行 Pod 相关的资源开销。该字段将由 RuntimeClass 准入控制器在准入时自动填充。 - 如果启用了 RuntimeClass 准入控制器,则不得在 Pod 创建请求中设置 overhead 字段。 - RuntimeClass 准入控制器将拒绝已设置 overhead 字段的 Pod 创建请求。 - 如果在 Pod 规约中配置并选择了 RuntimeClass,overhead 字段将被设置为对应 RuntimeClass - 中定义的值,否则将保持未设置并视为零。更多信息: - https://git.k8s.io/enhancements/keps/sig-node/688-pod-overhead/README.md + 使用主机的用户名字空间。可选:默认为 true。如果设置为 true 或不存在,则 Pod 将运行在主机的用户名字空间中, + 当 Pod 需要仅对主机用户名字空间可用的一个特性时这会很有用,例如使用 CAP_SYS_MODULE 加载内核模块。 + 当设置为 false 时,会为该 Pod 创建一个新的用户名字空间。 + 设置为 false 对于缓解容器逃逸漏洞非常有用,可防止允许实际在主机上没有 root 特权的用户以 root 运行他们的容器。 + 此字段是 Alpha 级别的字段,只有启用 UserNamespacesSupport 特性的服务器才能使用此字段。 -### 已弃用的 +### 已弃用 - **serviceAccount** (string) @@ -1217,8 +1275,7 @@ A single application container that you want to run within a pod. Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated. --> - -## Container +## 容器 {#Container} 要在 Pod 中运行的单个应用容器。 @@ -1312,7 +1369,7 @@ A single application container that you want to run within a pod. *Map: unique values on keys `containerPort, protocol` will be kept during a merge* - List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default "0.0.0.0" address inside a container will be accessible from the network. Cannot be updated. + List of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default "0.0.0.0" address inside a container will be accessible from the network. Modifying this array with strategic merge patch may corrupt the data. For more information See https://github.com/kubernetes/kubernetes/issues/108255. Cannot be updated. *ContainerPort represents a network port in a single container.* --> @@ -1323,9 +1380,10 @@ A single application container that you want to run within a pod. **映射:键 `containerPort, protocol` 组合的唯一值将在合并期间保留** - 要从容器公开的端口列表。在此处公开端口可为系统提供有关容器使用的网络连接的附加信息,但主要是信息性的。 - 此处不指定端口不会阻止该端口被暴露。 - 任何侦听容器内默认 `"0.0.0.0"` 地址的端口都可以从网络访问。无法更新。 + 要从容器暴露的端口列表。此处不指定端口不会阻止该端口被暴露。 + 任何侦听容器内默认 `"0.0.0.0"` 地址的端口都可以从网络访问。使用策略合并补丁来修改此数组可能会破坏数据。 + 更多细节请参阅 https://github.com/kubernetes/kubernetes/issues/108255。 + 无法更新。 **ContainerPort 表示单个容器中的网络端口。** @@ -1473,7 +1531,7 @@ A single application container that you want to run within a pod. - **env.valueFrom.configMapKeyRef.name** (string) - 被引用者的名称。更多信息: + 被引用者的名称。更多信息: https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/names/#names - **env.valueFrom.configMapKeyRef.optional** (boolean) @@ -1540,7 +1598,7 @@ A single application container that you want to run within a pod. - **env.valueFrom.secretKeyRef.name** (string) - 被引用 Secret 的名称。更多信息: + 被引用 Secret 的名称。更多信息: https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/names/#names - **env.valueFrom.secretKeyRef.optional** (boolean) @@ -1642,7 +1700,7 @@ A single application container that you want to run within a pod. - **envFrom.secretRef.name** (string) - 被引用 Secret 的名称。更多信息: + 被引用 Secret 的名称。更多信息: https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/names/#names - **envFrom.secretRef.optional** (boolean) @@ -1783,7 +1841,7 @@ A single application container that you want to run within a pod. - **resources**(ResourceRequirements) - 此容器所需的计算资源。无法更新。更多信息: + 此容器所需的计算资源。无法更新。更多信息: https://kubernetes.io/zh-cn/docs/concepts/configuration/manage-resources-containers/ ResourceRequirements 描述计算资源需求。 @@ -2138,19 +2196,19 @@ A single application container that you want to run within a pod. - **securityContext.seLinuxOptions.level** (string) - level 是应用于容器的 SELinux 级别标签。 + level 是应用于容器的 SELinux 级别标签。 - **securityContext.seLinuxOptions.role** (string) - role 是应用于容器的 SELinux 角色标签。 + role 是应用于容器的 SELinux 角色标签。 - **securityContext.seLinuxOptions.type** (string) - type 是适用于容器的 SELinux 类型标签。 + type 是适用于容器的 SELinux 类型标签。 - **securityContext.seLinuxOptions.user** (string) - user 是应用于容器的 SELinux 用户标签。 + user 是应用于容器的 SELinux 用户标签。 - **stdin** (boolean) - 此容器是否应在容器运行时为 stdin 分配缓冲区。如果未设置,从容器中的 stdin 读取将始终导致 EOF。 - 默认为 false。 + 此容器是否应在容器运行时为 stdin 分配缓冲区。如果未设置,从容器中的 stdin 读取将始终导致 EOF。 + 默认为 false。 - **stdinOnce** (boolean) - 容器运行时是否应在某个 attach 打开 stdin 通道后关闭它。当 stdin 为 true 时,stdin 流将在多个 attach 会话中保持打开状态。 + 容器运行时是否应在某个 attach 打开 stdin 通道后关闭它。当 stdin 为 true 时,stdin 流将在多个 attach 会话中保持打开状态。 如果 stdinOnce 设置为 true,则 stdin 在容器启动时打开,在第一个客户端连接到 stdin 之前为空, - 然后保持打开并接受数据,直到客户端断开连接,此时 stdin 关闭并保持关闭直到容器重新启动。 - 如果此标志为 false,则从 stdin 读取的容器进程将永远不会收到 EOF。 默认为 false。 + 然后保持打开并接受数据,直到客户端断开连接,此时 stdin 关闭并保持关闭直到容器重新启动。 + 如果此标志为 false,则从 stdin 读取的容器进程将永远不会收到 EOF。默认为 false。 ## EphemeralContainer {#EphemeralContainer} @@ -2244,16 +2302,12 @@ A single application container that you want to run within a pod. An EphemeralContainer is a temporary container that you may add to an existing Pod for user-initiated activities such as debugging. Ephemeral containers have no resource or scheduling guarantees, and they will not be restarted when they exit or when a Pod is removed or restarted. The kubelet may evict a Pod if an ephemeral container causes the Pod to exceed its resource allocation. To add an ephemeral container, use the ephemeralcontainers subresource of an existing Pod. Ephemeral containers may not be removed or restarted. - -This is a beta feature available on clusters that haven't disabled the EphemeralContainers feature gate. --> -EphemeralContainer 是一个临时容器,你可以将其添加到现有 Pod 以用于用户发起的活动,例如调试。 -临时容器没有资源或调度保证,它们在退出或 Pod 被移除或重新启动时不会重新启动。 -如果临时容器导致 Pod 超出其资源分配,kubelet 可能会驱逐 Pod。 +EphemeralContainer 是一个临时容器,你可以将其添加到现有 Pod 以用于用户发起的活动,例如调试。 +临时容器没有资源或调度保证,它们在退出或 Pod 被移除或重新启动时不会重新启动。 +如果临时容器导致 Pod 超出其资源分配,kubelet 可能会驱逐 Pod。 -要添加临时容器,请使用现有 Pod 的 `ephemeralcontainers` 子资源。临时容器不能被删除或重新启动。 - -这是未禁用 EphemeralContainers 特性门控的集群上可用的 Beta 功能。 +要添加临时容器,请使用现有 Pod 的 `ephemeralcontainers` 子资源。临时容器不能被删除或重新启动。