KubernetesDOCKER

[转]K8S Pod 保护之 PodDisruptionBudg

2020-11-06  本文已影响0人  王勇1024

前言

Kubernetes 中,为了保证业务不中断或业务SLA不降级,需要将应用进行集群化部署。通过PodDisruptionBudget 控制器可以设置应用POD集群处于运行状态最低个数,也可以设置应用POD集群处于运行状态的最低百分比,这样可以保证在主动销毁应用POD的时候,不会一次性销毁太多的应用POD,从而保证业务不中断或业务SLA不降级。

PodDisruptionBudget 简介

Pod Disruption Budget (pod 中断 预算) 简称PDB,含义其实是终止pod前通过 labelSelector 机制获取正常运行的pod数目的限制,目的是对自愿中断的保护措施。

Kubernetes version >= 1.7 才支持 PodDisruptionBudget

PDB 应用场景

注意:如果 Node 状态处于 not ready,PDB 是不会生效,因为 PDB 只能针对自愿中断生效,什么叫 自愿中断 下文介绍。

自愿中断和非自愿中断 [1]

Pod 不会消失,直到有人(人类或控制器)将其销毁,或者当出现不可避免的硬件或系统软件错误。

我们把这些不可避免的情况称为应用的非自愿性中断。例如:

除资源不足的情况外,大多数用户应该都熟悉以下这些情况;它们不是特定于 Kubernetes 的。

我们称这些情况为自愿中断。包括由应用程序所有者发起的操作和由集群管理员发起的操作。典型的应用程序所有者操作包括:

集群管理员操作包括:

这些操作可能由集群管理员直接执行,也可能由集群管理员或集群托管提供商自动执行。

PDB 关键参数与注意事项

上面配置只能用来对应 DeploymentRSRCStatefulSet的Pods,推荐优先使用 .spec.maxUnavailable

注意

使用上,如果设置 .spec.minAvailable100% 或者 .spec.maxUnavailable0%,意味着会完全阻止 evict pods 的过程( DeploymentStatefulSet滚动更新除外 )。

PDB 例子

    apiVersion: policy/v1beta1
    kind: PodDisruptionBudget
    metadata:
      name: nginx-pdb
      namespace: default
    spec:
      minAvailable: 2
      selector:
        matchLabels:
          app: nginx复制代码
    apiVersion: policy/v1beta1
    kind: PodDisruptionBudget
    metadata:
      name: nginx-pdb
      namespace: default
    spec:
      maxUnavailable: 30%
      selector:
        matchLabels:
          app: nginx复制代码

参考链接

作者:YP小站
链接:https://juejin.im/post/6844904073792061454
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

上一篇 下一篇

猜你喜欢

热点阅读