前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >kubernetes其他控制器之PodDisruptionBudget

kubernetes其他控制器之PodDisruptionBudget

作者头像
极客运维圈
发布2020-03-23 16:42:00
发布2020-03-23 16:42:00
92400
代码可运行
举报
文章被收录于专栏:乔边故事乔边故事
运行总次数:0
代码可运行

↑ 点击上方“乔边故事”关注我们

在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

代码语言:javascript
代码运行次数:0
运行
复制
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: pdb-demo
spec:
  minAvailable: 2
  selector:
    matchLables:
      app: nginx

(2)、定义maxUnavailable

代码语言:javascript
代码运行次数:0
运行
复制
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: pdb-demo
spec:
  maxUnavailable: 1
  selector:
    matchLables:
      app: nginx

(3)、创建资源清单

对于PodDisruptionBudget对象,无法直接进行更新操作,只能通过删除和重新创建来完成对PodDisruptionBudget对象的更新。

代码语言:javascript
代码运行次数:0
运行
复制
# kubectl apply -f pdb-demo.yaml

(4)、查看状态

代码语言:javascript
代码运行次数:0
运行
复制
# kubectl get pdb
NAME       MIN AVAILABLE   MAX UNAVAILABLE   ALLOWED DISRUPTIONS   AGE
pdb-demo   2               N/A               0                     7m46s

(5)、查看详细信息

代码语言:javascript
代码运行次数:0
运行
复制
# kubectl describe pdb pdb-demo
Name:           pdb-demo
Namespace:      default
Min available:  2
Selector:       app=nginx
Status:
    Allowed disruptions:  0
    Current:              0
    Desired:              2
    Total:                0
Events:
  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/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乔边故事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档