Kubernetes Deployment の PodDisruptionBudget 設定の確認

メンテナンス時に許容する自発的な Pod 中断数を決めてください。

説明

ノードのドレインなどで Deployment の複数の Pod が同時に自発的な退去の対象になると、レプリカがあっても可用性が低下する場合があります。PodDisruptionBudget(PDB)は、Eviction API を使う操作の中断範囲を制限します。

PDB はノード障害や Pod の直接削除を防がず、Deployment のローリング更新も制限しません。更新戦略と障害ドメインへの分散は別途構成する必要があります。

想定される影響

  • メンテナンス中の利用可能なレプリカ不足により、遅延やサービス停止が起こる場合があります。
  • 厳しすぎる制限はノードのドレインやメンテナンスを妨げる場合があります。

対処方法

  • 同じ名前空間で実際の Deployment Pod を選択する PDB を定義し、minAvailable または maxUnavailable の一方を可用性要件に合わせて設定してください。
  • readiness、レプリカ数、置換用の容量を確認し、ドレインをテストしてください。Deployment のローリング更新と Pod の分散も別途確認してください。

例

過去のイメージは保守されている検証済みバージョンに置き換えてください。この例は、3 レプリカのうち少なくとも 2 つを利用可能な状態に保つよう、自発的な退去を制限します。

変更前

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:1.14.2

Deployment はありますが、自発的な退去を制限する PDB は示していません。同じ名前空間の既存ポリシーも確認する必要があります。

変更後

yaml
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: nginx-pdb
spec:
  minAvailable: 2
  selector:
    matchLabels:
      app: nginx
---
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:1.14.2

app=nginx の Pod を選択する PDB に minAvailable: 2 を指定します。すべての障害や直接削除に対して最低限の可用性を保証するものではありません。

参考資料