kubernetes pdb 允许中断为 0

jjb*_*kir 4 kubernetes

我正在尝试为我的部署部署PodDisruptionBudget,但是当我部署此示例时

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: example-pdb
spec:
  minAvailable: 1
  selector:
    matchLabels:
      app: example-deployment
Run Code Online (Sandbox Code Playgroud)

通过此部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: example-deployment-app
  template:
    metadata:
      labels:
        app: example-deployment-app
    spec:
        ...
Run Code Online (Sandbox Code Playgroud)

我得到回应

$ kubectl get pdb
NAME          MIN AVAILABLE   MAX UNAVAILABLE   ALLOWED DISRUPTIONS   AGE
example-pdb   1               N/A               0                     7s
Run Code Online (Sandbox Code Playgroud)

“允许中断”为 0 意味着什么?

OhH*_*ark 7

正如指定 PodDisruptionBudget中提到的:

\n
\n

APodDisruptionBudget有三个字段:

\n
    \n
  • 一个标签选择器.spec.selector,用于指定它所应用的 pod 集。此字段是必需的。

    \n
  • \n
  • .spec.minAvailable这是对该集合中 pod 数量的描述,这些 pod 在驱逐后仍然可用,即使\n不存在被驱逐的 pod。minAvailable可以是绝对数字或百分比。

    \n
  • \n
  • .spec.maxUnavailable(在 Kubernetes 1.7 及更高版本中可用)这是对该组中驱逐后\n不可用的 pod 数量的描述。它可以是绝对数字或百分比。

    \n
  • \n
\n
\n

在您的情况下,它.spec.minAvailable设置为1,因此1Pod 必须始终可用,即使在中断期间也是如此。

\n

现在查看您的部署设置,.spec.replicas1意味着.spec.minAvailable: 1该配置不允许中断。

\n

看一下官方的例子

\n
\n

用于kubectl检查您的 PDB 是否已创建。

\n

app: zookeeper假设您的命名空间中实际上没有匹配的 Pod ,那么您将看到如下内容:

\n
kubectl get poddisruptionbudgets\nNAME     MIN AVAILABLE   MAX UNAVAILABLE   ALLOWED DISRUPTIONS   AGE\nzk-pdb   2               N/A               0                     7s\n
Run Code Online (Sandbox Code Playgroud)\n

如果有匹配的 Pod(例如 3 个),那么您会看到类似\n的内容:

\n
kubectl get poddisruptionbudgets\nNAME     MIN AVAILABLE   MAX UNAVAILABLE   ALLOWED DISRUPTIONS   AGE\nzk-pdb   2               N/A               1                     7s\n
Run Code Online (Sandbox Code Playgroud)\n

非零值表示ALLOWED DISRUPTIONS中断控制器已发现 Pod、计算匹配的 Pod 并更新 PDB 的状态。

\n

您可以使用此命令获取有关 PDB 状态的更多信息\n:

\n
kubectl get poddisruptionbudgets zk-pdb -o yaml\n\napiVersion: policy/v1\nkind: PodDisruptionBudget\nmetadata:\n  annotations:\n\xe2\x80\xa6\n  creationTimestamp: "2020-03-04T04:22:56Z"\n  generation: 1\n  name: zk-pdb\n\xe2\x80\xa6\nstatus:\n  currentHealthy: 3\n  desiredHealthy: 2\n  disruptionsAllowed: 1\n  expectedPods: 3\n  observedGeneration: 1\n
Run Code Online (Sandbox Code Playgroud)\n
\n

您可以看到,如果 被.spec.minAvailable设置为 2 并且有 3 个正在运行的 Pod,则比disruptionsAllowed实际情况要多1。您可以根据您的用例进行检查。

\n