PodDisruptionBudget

介绍

PDB(PodDisruptionBudget)是为了自主中断时(除了节点crash)保障应用的高可用。
在使用 PDB 时,你需要弄清楚你的应用类型以及你想要的应对措施:

  • 无状态应用:
    • 目标:至少有60%的副本 Available。
    • 方案:创建 PDB Object,指定 minAvailable 为60%,或者 maxUnavailable 为 40%。
  • 单实例的有状态应用:
    • 目标:终止这个实例之前必须提前通知客户并取得同意。
    • 方案:创建 PDB Object,并设置 maxUnavailable 为0。
  • 多实例的有状态应用:
    • 目标:最少可用的实例数不能少于某个数N,例如 etcd。
    • 方案:设置 maxUnavailable=1或者 minAvailable=N,分别允许每次只删除一个实例和每次删除 expected_replicas-minAvailable 个实例。

移除节点步骤

  1. 将node置为不可调度。
kubectl cordon snode name>
  1. 执行 node drain 排空节点,将其上运行的 Pod 平滑迁移
    至其他节点。
kubectl drain <node name>
  1. 如果应用不可中断,就需要设置pdb。
  2. 设置了pdb后,kubelet在驱逐pod时,会去看pdb的配置,校验这个应用比如deployment最少需要多少个实例,如果驱逐了pod后不满足这个数量,驱逐就会失败,确保应用不受影响。这时可以人工干预。

实例

  1. 创建并应用nginx deployment
cat nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx
k apply -f nginx-deployment.yaml

file

  1. 创建pdb
cat pdb.yaml
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: nginx-deployment
spec:
  minAvailable: 1
  selector:
    matchLabels:
      app: nginx
k apply -f pdb.yaml

file

  1. 解码kubeconfig
cat ~/.kube/config
echo 'xxx' | base64 -d > admin.crt
echo 'xxx' | base64 -d > admin.key
  1. 创建eviction.json文件
cat eviction.json
{
  "apiVersion": "policy/v1",
  "kind": "Eviction",
  "metadata": {
    "name": "nginx-deployment-75f4d489b4-b6grv",
    "namespace": "default"
  }
}
  1. 通过evict api驱逐pod
curl -v -H 'Content-type: application/json' --key admin.key --cert admin.crt https://192.168.0.6:6443/api/v1/namespaces/default/pods/nginx-deployment-75f4d489b4-b6grv/eviction -d @eviction.json -k

file

  1. 查看pod
    nginx-deployment-75f4d489b4-b6grv pod已经被重建。
    file
  2. 编辑pdb,修改minAvailable为3
k edit pdb

file
ALLOWED DISRUPTIONS为0代表一个都不能驱逐。

  1. 修改nginx pod,再次驱逐
    file
    需要3个healthy pod,现在有3个,所以驱逐失败了。

注意

如果你将pdb中的minAvailable设置为0,那么这个节点就不能操作下线等操作了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柠是柠檬的檬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值