Kubernetes Pod中断预算【PDB】 电脑版发表于:2021/3/4 11:30  >#Kubernetes Pod中断预算【PDB】 [TOC] tn>尽管Deployment或ReplicaSet一类的控制器能够确保相应Pod对象的副本数量不断逼近期望的数量,但它却无法保证在某一时刻一定会纯在指定数量或比例的Pod对象,然而这种需求在某些强调发我可用性的场景中却是必备的。于是,Kubernetes自从1.4版本开始引入Pod中断预算(PodDisruptionBudget,简称PDB)类型的资源,用于为那些自愿的(Voluntary)中断做好预算方案(Budget),限制可自愿中断的最大Pod副本数或确保最少可用的Pod副本数,以确保服务的高可用性。 Pod中断预算 ------------ ### 中断介绍 <p style=" font-weight: 400; line-height: 1.5; color: #212529; -webkit-tap-highlight-color: transparent; box-sizing: border-box; padding: 0px 20px 20px 20px; border: 1px solid #e9ecef; border-left-width: .25rem; border-radius: .25rem; display: block; border-left-color: #5bc0de;"> - **非自愿中断**指是由那些不可控因数导致Pod中断退出操作,例如,硬件或系统内核故障、网络故障以及节点资源不足导致Pod对象被驱逐等; - **自愿中断**是指由用户特地执行的管理操作导致Pod中断则称为"自愿中断",例如人为删除Pod对象.... </p> ### PDB支持与属性 <p style=" font-weight: 400; line-height: 1.5; color: #212529; -webkit-tap-highlight-color: transparent; box-sizing: border-box; padding: 0px 20px 20px 20px; border: 1px solid #e9ecef; border-left-width: .25rem; border-radius: .25rem; display: block; border-left-color: #5bc0de;"> 支持的控制器类型包括Deployment、ReplicaSet和StatefulSet等。同时,PDB对象也可以保护那些纯粹由定制的标签选择器自由选择的Pod对象。 定义的属性字段如下: - **selector** : 当前PDB对象使用的标签选择器,一般是与相关的Pod控制器使用同一个选择器。 - **minAvailable** :Pod自愿中断的场景中,至少要保证的Pod对象数量或比例,要阻止任何Pod对象发生自愿中断中断,可将其设置为100% - **maxUnavailable** :Pod自愿中断的场景中,最多可转换为不可用状态的Pod对象数量或比例,0值意味着不允许Pod对象进行自愿中断. </p> ### 示例运行 <p style=" font-weight: 400; line-height: 1.5; color: #212529; -webkit-tap-highlight-color: transparent; box-sizing: border-box; padding: 0px 20px 20px 20px; border: 1px solid #e9ecef; border-left-width: .25rem; border-radius: .25rem; display: block; border-left-color: #5bc0de;"> 这里我们举例:指定Pod标签为app: myapp,要求其最少可用的Pod对象数量为2个 </p> ```yaml apiVersion: policy/v1beta1 kind: PodDisruptionBudget metadata: name: myapp-pdb spec: minAvailable: 2 selector: matchLabels: app: myapp ``` <p style=" font-weight: 400; line-height: 1.5; color: #212529; -webkit-tap-highlight-color: transparent; box-sizing: border-box; padding: 0px 20px 20px 20px; border: 1px solid #e9ecef; border-left-width: .25rem; border-radius: .25rem; display: block; border-left-color: #5bc0de;"> 查看PDB资源对象的命令 </p> ```bash kubectl get pdb ```