Disruption Budgets-中断预算-k8s


在 Kubernetes 中,可以使用 Disruption Budgets(中文称为中断预算)来定义 Pod 的可中断性限制,以确保在进行维护或升级时不会对应用程序的可用性造成影响。

Disruption Budgets 可以定义多个 Pod 集合,每个集合都有一个与之关联的最小可用性要求。这个最小可用性要求是一个百分比值,表示集合中至少需要有多少个 Pod 是处于运行状态的。

例如,如果你有一个 ReplicaSet 包含 5 个 Pod,而你的 Disruption Budget 设置为最小可用性要求为 80%,则最多只能停止 1 个 Pod。因为当你停止 2 个或更多的 Pod 时,可用性将下降到 60% 或更低,违反了 80% 的最小可用性要求。

Disruption Budgets 可以与以下 Kubernetes 原生资源一起使用:

Deployment:Deployment 控制器管理着一组副本集(ReplicaSet),并通过滚动升级来更新应用程序。 StatefulSet:StatefulSet 控制器管理着一组有状态的 Pod,这些 Pod 按照指定的顺序部署和扩展。 DaemonSet:DaemonSet 控制器管理着一组 Pod,这些 Pod 运行在 Kubernetes 集群的所有节点上。 如果要设置 Disruption Budgets,需要编写一个 Kubernetes 资源清单文件,其中包含以下内容:

一个名称为 DisruptionBudget 的 Kubernetes 资源对象。 指定要设置预算的 Pod 集合的标签选择器。 指定最小可用性要求的百分比值。 例如,下面是一个用于设置 Deployment 的 Disruption Budgets 的示例清单文件:

yaml

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: webapp-budget
spec:
  minAvailable: 4
  selector:
    matchLabels:
      app: webapp

在上述示例中,minAvailable 指定了最小可用性要求为 4,selector 指定了要应用预算的 Pod 集合的标签选择器。这个 Disruption Budget 将确保在正在进行维护或升级时,至少有 4 个与标签 app=webapp 匹配的 Pod 处于运行状态,以保证应用程序的可用性。