kubernetes其他控制器之PodDisruptionBudget
在Kubernetes中为了保证业务不中断或者业务SLA不降级,需要将应用集群化部署,比如Deployment,StatefulSet部署等。虽然是集群化部署,但是在我们主动销毁Pod的时候,为了避免一次性销毁太多Pod,Kubernetes引用PodDisruptionBudget(PDB)控制器,用来控制集群中Pod的运行个数。
在PDB中,主要通过两个参数来控制Pod的数量:
minAvailable:表示最小可用Pod数,表示在Pod集群中处于运行状态的最小Pod数或者是运行状态的Pod数和总数的百分比;
- maxUnavailable:表示最大不可用Pod数,表示Pod集群中处于不可用状态的最大Pod数或者不可用状态Pod数和总数的百分比;
注意:minAvailable和maxUnavailable是互斥了,也就是说两者同一时刻只能出现一种。
kubectl drain命令已经支持了PodDisruptionBudget控制器,在进行kubectl drain操作时会根据PodDisruptionBudget控制器判断应用POD集群数量,进而保证在业务不中断或业务SLA不降级的情况下进行应用POD销毁。在进行kubectl drain或者Pod主动逃离的时候,Kubernetes会通过以下几种情况来进行判断:
minAvailable设置成了数值5:应用POD集群中最少要有5个健康可用的POD,那么就可以进行操作。
minAvailable设置成了百分数30%:应用POD集群中最少要有30%的健康可用POD,那么就可以进行操作。
maxUnavailable设置成了数值5:应用POD集群中最多只能有5个不可用POD,才能进行操作。
- maxUnavailable设置成了百分数30%:应用POD集群中最多只能有30%个不可用POD,才能进行操作。
在极端的情况下,比如将maxUnavailable设置成0,或者设置成100%,那么就表示不能进行kubectl drain操作。同理将minAvailable设置成100%,或者设置成应用POD集群最大副本数,也表示不能进行kubectl drain操作。
注意:使用PodDisruptionBudget控制器并不能保证任何情况下都对业务POD集群进行约束,PodDisruptionBudget控制器只能保证POD主动逃离的情况下业务不中断或者业务SLA不降级,例如在执行kubectldrain命令时。
例子:
(1)、定义minAvailable
apiVersion: policy/v1beta1kind: PodDisruptionBudgetmetadata: name: pdb-demospec: minAvailable: 2 selector: matchLables: app: nginx
(2)、定义maxUnavailable
apiVersion: policy/v1beta1kind: PodDisruptionBudgetmetadata: name: pdb-demospec: maxUnavailable: 1 selector: matchLables: app: nginx
(3)、创建资源清单
对于PodDisruptionBudget对象,无法直接进行更新操作,只能通过删除和重新创建来完成对PodDisruptionBudget对象的更新。
# kubectl apply -f pdb-demo.yaml
(4)、查看状态
# kubectl get pdbNAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGEpdb-demo 2 N/A 0 7m46s
(5)、查看详细信息
# kubectl describe pdb pdb-demoName: pdb-demoNamespace: defaultMin available: 2Selector: app=nginxStatus: Allowed disruptions: 0 Current: 0 Desired: 2 Total: 0Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal NoPods 2m58s (x53 over 28m) controllermanager No matching pods found
参考文档:https://kubernetes.io/docs/tasks/run-application/configure-pdb/
完
©著作权归作者所有:来自51CTO博客作者mb5ff97f7b72697的原创作品,如需转载,请注明出处,否则将追究法律责任更多相关文章
- MySQL常用的查询操作
- Hadoop3.x入门:完全分布式Hadoop集群安装部署
- HBase1.x进阶:一文读懂HBase为何依赖Zookeeper?(必看)
- OracleRAC日常操作,使用RMAN将数据文件移入ASM
- etcd集群之序
- etcd集群之常见问题
- 华为ENSP模拟器的使用-在web界面登陆防火墙的操作步骤
- django模型使用
- 使用jquery实现全选、全不选等购物车操作