From cdca65aa64d58f0c24f478488d84ecc502c7e520 Mon Sep 17 00:00:00 2001 From: windsonsea Date: Fri, 22 Nov 2024 09:59:40 +0800 Subject: [PATCH] [zh] Resync using-api/server-side-apply.md --- .../reference/using-api/server-side-apply.md | 105 +++++++++++++----- 1 file changed, 75 insertions(+), 30 deletions(-) diff --git a/content/zh-cn/docs/reference/using-api/server-side-apply.md b/content/zh-cn/docs/reference/using-api/server-side-apply.md index 5ebf63421d..e49a895ab9 100644 --- a/content/zh-cn/docs/reference/using-api/server-side-apply.md +++ b/content/zh-cn/docs/reference/using-api/server-side-apply.md @@ -18,7 +18,7 @@ weight: 25 {{< feature-state feature_gate_name="ServerSideApply" >}} - -服务器端应用场景中的 **patch** 请求要求客户端提供自身的标识作为 -[字段管理器(Field Manager)](#managers)。使用服务器端应用时, -如果尝试变更由别的管理器来控制的字段,会导致请求被拒绝,除非客户端强制要求进行覆盖。 +服务器端应用场景中的 **patch** 请求要求客户端提供自身的标识作为[字段管理器(Field Manager)](#managers)。 +使用服务器端应用时,如果尝试变更由别的管理器来控制的字段,会导致请求被拒绝,除非客户端强制要求进行覆盖。 关于覆盖操作的细节,可参阅[冲突](#conflicts)节。 +`kubectl get` 默认省略 `managedFields`。 +当输出格式为 `json` 或 `yaml` 时,你可以添加 `--show-managed-fields` 参数以显示 `managedFields`。 +{{< /note >}} + + +```yaml +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: test-cm + namespace: default + labels: + test-label: test + managedFields: + - manager: kubectl + operation: Apply # 注意大写:“Apply” (或者 “Update”) apiVersion: v1 time: "2010-10-10T0:00:00Z" fieldsType: FieldsV1 @@ -198,7 +232,7 @@ data: key: some value ``` - 示例的 ConfigMap 对象在 `.metadata.managedFields` 中包含字段管理记录。 字段管理记录包括关于管理实体本身的基本信息,以及关于被管理的字段和相关操作(`Apply` 或 `Update`)的详细信息。 -如果最后更改该字段的请求是服务器端应用的**patch**操作,则 `operation` 的值为 `Apply`;否则为 `Update`。 +如果最后更改该字段的请求是服务器端应用的 **patch** 操作,则 `operation` 的值为 `Apply`;否则为 `Update`。 - @@ -322,8 +356,7 @@ sets the manager identity to `"kubectl"` by default. 当你使用 `kubectl` 工具执行服务器端应用操作时,`kubectl` 默认情况下会将管理器标识设置为 `“kubectl”`。 - - ## 序列化 {#serialization} -在协议层面,Kubernetes 用 [YAML](https://yaml.org/) 来表示 Server-Side Apply 的消息体, +在协议层面,Kubernetes 用 [YAML](https://yaml.org/) 来表示服务器端应用的消息体, 媒体类型为 `application/apply-patch+yaml`。 {{< note >}} - 现在,用户希望从他们的配置中删除 `replicas`,从而避免与 HorizontalPodAutoscaler(HPA)及其控制器发生冲突。 -然而,这里存在一个竞态: -在 HPA 需要调整 `.spec.replicas` 之前会有一个时间窗口, +然而,这里存在一个竞态:在 HPA 需要调整 `.spec.replicas` 之前会有一个时间窗口, 如果在 HPA 写入字段并成为新的属主之前,用户删除了 `.spec.replicas`, 那 API 服务器就会把 `.spec.replicas` 的值设为 1(Deployment 的默认副本数)。 这不是用户希望发生的事情,即使是暂时的——它很可能会导致正在运行的工作负载降级。 @@ -754,6 +787,17 @@ First, the user defines a new manifest containing only the `replicas` field: 首先,用户新定义一个只包含 `replicas` 字段的新清单: + ```yaml # 将此文件另存为 'nginx-deployment-replicas-only.yaml' apiVersion: apps/v1 @@ -848,7 +892,7 @@ field in an object also becomes available. 服务器端应用使用一种更具声明性的方法来跟踪对象的字段管理,而不是记录用户最后一次应用的状态。 这意味着,使用服务器端应用的副作用,就是字段管理器所管理的对象的每个字段的相关信息也会变得可用。 -