“ Pod 正在阻止缩减,因为它有本地存储”

" Pod is blocking scale down because it has local storage "

我在具有 docker 容器运行时的 gcp 中有 kubernets 集群。我正在尝试将 docker 容器运行时更​​改为 containerd。以下步骤显示了我所做的。

  1. 添加了新节点池(带有 containerd 的节点)
  2. 耗尽旧节点

执行上述步骤后,我收到“Pod is blocking scale down because it has local storage”警告消息。

您需要将 once 注释添加到 POD,以便集群自动缩放器可以安全地从 POD 中删除该 POD 以逐出。

cluster-autoscaler.kubernetes.io/safe-to-evict": "true"

以上注释,必须添加到POD中。

您可以在以下位置阅读更多信息:https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler-visibility#cluster-not-scalingdown

NoScaleDown example: You found a noScaleDown event that contains a per-node reason for your node. The message ID is "no.scale.down.node.pod.has.local.storage" and there is a single parameter: "test-single-pod". After consulting the list of error messages, you discover this means that the "Pod is blocking scale down because it requests local storage". You consult the Kubernetes Cluster Autoscaler FAQ and find out that the solution is to add a "cluster-autoscaler.kubernetes.io/safe-to-evict": "true" annotation to the Pod. After applying the annotation, cluster autoscaler scales down the cluster correctly.

阻止 Cluster Autoscaler 删除节点的 pods 类型:

  • Pods 具有限制性 PodDisruptionBudget。

  • Kube-system pods 即:

    are not run on the node by default
    
    don't have a pod disruption budget set or their PDB is too restrictive (since CA 0.6).
    
  • Pods 不受控制器对象支持(因此不是由 部署、副本集、作业、有状态集等)。 *

  • Pods 与本地存储。 *

  • Pods由于各种限制不能移动到别处(缺少 资源,non-matching 节点选择器或亲和力,匹配 anti-affinity, 等等)

  • Pods 具有以下注释集:

"cluster-autoscaler.kubernetes.io/safe-to-evict": "false"

因此,您的 Pod 正在阻止缩减,因为它请求本地存储。您应该在 pod 中添加注释(在 CA 1.0.3 或更高版本中支持):

“cluster-autoscaler.kubernetes.io/safe-to-evict": "true”

有关详细信息,请参阅集群 Autoscaler FAQs

你也可以参考下面的stack overflow case,跟你的情况类似