From b5554101559657b7881da0b6ddaba1003cca5a23 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Thu, 24 Mar 2022 10:19:09 +0800 Subject: [PATCH] [zh] Update safely-drain-node Signed-off-by: xin.li --- .../administer-cluster/safely-drain-node.md | 146 +----------------- 1 file changed, 4 insertions(+), 142 deletions(-) diff --git a/content/zh/docs/tasks/administer-cluster/safely-drain-node.md b/content/zh/docs/tasks/administer-cluster/safely-drain-node.md index c07c282b78..da8281715e 100644 --- a/content/zh/docs/tasks/administer-cluster/safely-drain-node.md +++ b/content/zh/docs/tasks/administer-cluster/safely-drain-node.md @@ -174,154 +174,16 @@ replicas to fall below the specified budget are blocked. If you prefer not to use [kubectl drain](/docs/reference/generated/kubectl/kubectl-commands/#drain) (such as to avoid calling to an external command, or to get finer control over the pod -eviction process), you can also programmatically cause evictions using the eviction API. +eviction process), you can also programmatically cause evictions using the +eviction API. +For more information, see [API-initiated eviction](/docs/concepts/scheduling-eviction/api-eviction/). --> ## 驱逐 API {#the-eviction-api} 如果你不喜欢使用 [kubectl drain](/docs/reference/generated/kubectl/kubectl-commands/#drain) (比如避免调用外部命令,或者更细化地控制 pod 驱逐过程), 你也可以用驱逐 API 通过编程的方式达到驱逐的效果。 - - -首先应该熟悉使用 -[Kubernetes 语言客户端](/zh/docs/tasks/administer-cluster/access-cluster-api/#programmatic-access-to-the-api)。 - -Pod 的 Eviction 子资源可以看作是一种策略控制的 DELETE 操作,作用于 Pod 本身。 -要尝试驱逐(更准确地说,尝试 *创建* 一个 Eviction),需要用 POST 发出所尝试的操作。这里有一个例子: - -{{< tabs name="Eviction_example" >}} -{{% tab name="policy/v1" %}} - -{{< note >}} -`policy/v1` 驱逐在 v1.22+ 中可用。在之前版本中请使用 `policy/v1beta1` 。 -{{< /note >}} - - -```json -{ - "apiVersion": "policy/v1", - "kind": "Eviction", - "metadata": { - "name": "quux", - "namespace": "default" - } -} -``` -{{% /tab %}} -{{% tab name="policy/v1beta1" %}} - -{{< note >}} -在 v1.22 中已弃用,以 `policy/v1` 取代 -{{< /note >}} - -```json -{ - "apiVersion": "policy/v1beta1", - "kind": "Eviction", - "metadata": { - "name": "quux", - "namespace": "default" - } -} -``` -{{% /tab %}} -{{< /tabs >}} - - -你可以使用 `curl` 尝试驱逐: - -```bash -curl -v -H 'Content-type: application/json' http://127.0.0.1:8080/api/v1/namespaces/default/pods/quux/eviction -d @eviction.json -``` - - -API 可以通过以下三种方式之一进行响应: - -- 如果驱逐被授权,那么 Pod 将被删掉,并且你会收到 `200 OK`, - 就像你向 Pod 的 URL 发送了 `DELETE` 请求一样。 -- 如果按照预算中规定,目前的情况不允许的驱逐,你会收到 `429 Too Many Requests`。 - 这通常用于对 *一些* 请求进行通用速率限制, - 但这里我们的意思是:此请求 *现在* 不允许,但以后可能会允许。 - 目前,调用者不会得到任何 `Retry-After` 的提示,但在将来的版本中可能会得到。 -- 如果有一些错误的配置,比如多个预算指向同一个 Pod,你将得到 `500 Internal Server Error`。 - - -对于一个给定的驱逐请求,有两种情况: - -- 没有匹配这个 Pod 的预算。这种情况,服务器总是返回 `200 OK`。 -- 至少匹配一个预算。在这种情况下,上述三种回答中的任何一种都可能适用。 - - -## 驱逐阻塞 - -在某些情况下,应用程序可能会到达一个中断状态,除了 429 或 500 之外,它将永远不会返回任何内容。 -例如 ReplicaSet 创建的替换 Pod 没有变成就绪状态,或者被驱逐的最后一个 -Pod 有很长的终止宽限期,就会发生这种情况。 - - -在这种情况下,有两种可能的解决方案: - -- 中止或暂停自动操作。调查应用程序卡住的原因,并重新启动自动化。 -- 经过适当的长时间等待后,从集群中删除 Pod 而不是使用驱逐 API。 - -Kubernetes 并没有具体说明在这种情况下应该采取什么行为, -这应该由应用程序所有者和集群所有者紧密沟通,并达成对行动一致意见。 +更多信息,请参阅 [API 发起的驱逐](/zh/docs/concepts/scheduling-eviction/api-eviction/)。 ## {{% heading "whatsnext" %}}