如何解决 Pod 阻止规模缩小,因为它是 GKE 中的非守护进程集

问题描述 投票:0回答:2

我在 GKS 中遇到了这个问题 Pod 阻止缩小规模,因为它是非守护程序集、非镜像、非 pdb 分配的 kube-system pod

我已阅读此文档:- https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#how-to-set-pdbs-to-enable-ca-to-move-kube-system-pods

但仍然无法理解我需要在每个 Pod 或每个节点中添加这一行。如果我需要添加 pod。

在默认命名空间中,我正在运行我的应用程序,其中正在运行 pod、svc、deploy。所以我需要在 pod 的默认命名空间或 kube-system 命名空间下添加 pod

“cluster-autoscaler.kubernetes.io/scale-down-disabled”:“true” 即使我添加了 3 个这样的节点

kubectl 注释节点 gke-test-default-pool-a44dbf1c-05h1 cluster-autoscaler.kubernetes.io/scale-down-disabled=true kubectl 注释节点 gke-test-default-pool-a44dbf1c-3j6j cluster-autoscaler.kubernetes.io/scale-down-disabled=true kubectl 注释节点 gke-test-default-pool-a44dbf1c-hmrf cluster-autoscaler.kubernetes.io/scale-down-disabled=true

但 GKE 上仍然显示错误

enter image description here

enter image description here

enter image description here

enter image description here

请告诉我如何解决 GKS 中的错误/问题,从 3 天开始,我无法理解并解决它,即使我用 google 搜索它并准备了这么多网站,但没有解决它。

部署后

kubectl create poddisruptionbudget pdb --namespace=kube-system --selector k8s-app=kube-dns --max-unavailable 1
Warning: policy/v1beta1 PodDisruptionBudget is deprecated in v1.21+, unavailable in v1.25+; use policy/v1 PodDisruptionBudget
poddisruptionbudget.policy/pdb created

我已被弃用,还有另一个问题 enter image description here

以前我有 3 个节点,但现在只有 2 个节点,因为我编辑了一个节点,删除了这一行 "cluster-autoscaler.kubernetes.io/scale-down-disabled": "true" 我在其中添加了这一行之后我没有检查我的节点是 3 还是 2。

后来我检查发现只有2个节点在运行。

在 GKE 或 AKS 中编辑节点有好有坏

kubectl get pdb -A
NAMESPACE     NAME           MIN AVAILABLE   MAX UNAVAILABLE   ALLOWED DISRUPTIONS   AGE
kube-system   kube-dns-bbc   N/A             1                 1                     69m

这是 yaml 文件

kubectl get pdb kube-dns-bbc -o yaml -n kube-system 

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"policy/v1","kind":"PodDisruptionBudget","metadata":{"annotations":{},"labels":{"k8s-app":"kube-dns"},"name":"kube-dns-bbc","namespace":"kube-system"},"spec":{"maxUnavailable":1,"selector":{"matchLabels":{"k8s-app":"kube-dns"}}}}
  creationTimestamp: "2022-02-18T17:07:53Z"
  generation: 1
  labels:
    k8s-app: kube-dns
  name: kube-dns-bbc
  namespace: kube-system
  resourceVersion: "230860"
  uid: 7131c64d-6779-4b23-8c53-10ffcc242144
spec:
  maxUnavailable: 1
  selector:
    matchLabels:
      k8s-app: kube-dns
status:
  conditions:
  - lastTransitionTime: "2022-02-18T17:38:13Z"
    message: ""
    observedGeneration: 1
    reason: SufficientPods
    status: "True"
    type: DisruptionAllowed
  currentHealthy: 2
  desiredHealthy: 1
  disruptionsAllowed: 1
  expectedPods: 2
  observedGeneration: 1
kubernetes google-compute-engine google-kubernetes-engine
2个回答
0
投票

我已阅读此文档:- https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#how-to-set-pdbs-to-enable-ca-to-move-kube-system-pods

但仍然无法理解我需要在哪里添加这一行 每个 Pod 或每个节点。如果我需要添加 pod。

您不需要添加到 pod 或节点,您需要在 kube-system 中为 pod 创建 PDB,以便 CA 知道从要删除的节点中驱逐此类 pod 是安全的。 coreDNS 示例:

kubectl create poddisruptionbudget <name> --namespace=kube-system --selector k8s-app=kube-dns --max-unavailable 1


0
投票

在您分享的链接中注明:

默认情况下,kube-system pod 会阻止 CA 删除运行它们的节点。用户可以手动为 kube-system pod 添加 PDB,这些 PDB 可以安全地重新安排到其他地方:

kubectl create poddisruptionbudget <pdb name> --namespace=kube-system --selector app=<app name> --max-unavailable 1

PDB 限制复制应用程序的 Pod 数量 同时因自愿中断而下降。例如,一个 基于仲裁的应用程序希望确保 运行的副本永远不会低于法定人数所需的数量

您可以在此处找到有关中断的更多信息。

在此处为您的应用程序指定中断预算 .

还有关于

Pod 中断预算的完整教程,用于帮助手动升级 GKE 集群

哪些类型的 Pod 可以阻止 CA 删除节点?

具有限制性 PodDisruptionBudget 的 Pod。

Kube 系统 pod:

    默认不在节点上运行,*
  • 没有设置 pod 中断预算,或者他们的 PDB 限制太多(自 CA 0.6 起)。
  • 不受控制器对象支持的 Pod(因此不是由部署、副本集、作业、有状态集等创建的)。 *
  • 具有本地存储的 Pod。 *
  • 由于各种限制(缺乏资源、不匹配的节点选择器或关联性、 匹配反亲和力等)
设置了以下注释的 Pod:

    “cluster-autoscaler.kubernetes.io/safe-to-evict”:“false”
  • *除非 pod 有以下注解(CA 1.0.3 或更高版本支持):
  • “cluster-autoscaler.kubernetes.io/safe-to-evict”:“true”
或者您已使用相关标志之一覆盖此行为。 请参阅下文了解

有关这些标志的更多信息

您可以使用

Autoscaler events 检查您的 pod,并查看哪个 pod 导致 CA 阻塞缩小。

除此之外,您可以在另一个问题中找到

这个答案,以解决您可能有的更多疑问。

© www.soinside.com 2019 - 2024. All rights reserved.