Kubernetesでビジネスが中断されたり、ビジネスSLAが低下したりしないようにするには、Deployment、StatefulSetデプロイメントなどのクラスターにアプリケーションをデプロイする必要があります。クラスター化されたデプロイですが、ポッドを積極的に破棄する場合、一度に多くのポッドを破棄しないようにするために、KubernetesはPodDisruptionBudget(PDB)コントローラーを参照してクラスター内のポッドの数を制御します。
PDBでは、ポッドの数は主に2つのパラメーターによって制御されます。
-
minAvailable:使用可能なポッドの最小数を表します。これは、ポッドクラスター内の実行状態のポッドの最小数、または実行状態のポッド数と合計のパーセンテージを表します。
- maxUnavailable:使用できないポッドの最大数を示し、ポッドクラスター内の使用できないポッドの最大数、または使用できないポッドの数と合計のパーセンテージを示します。
注意:minAvailable和maxUnavailable是互斥了,也就是说两者同一时刻只能出现一种。
kubectldrainコマンドはすでにPodDisruptionBudgetコントローラーをサポートしています。kubectldrain操作が実行されると、PodDisruptionBudgetコントローラーに従ってアプリケーションPODクラスターの数が決定され、サービスの中断やサービスSLAの低下なしにアプリケーションPODの破棄が実行されるようになります。 。kubectlドレインまたはポッドをアクティブにエスケープする場合、Kubernetesは次の状況で判断します。
-
minAvailableは値5に設定されます。アプリケーションPODクラスターに少なくとも5つの正常で使用可能なPODが存在する必要があります。そうすれば、操作を実行できます。
-
MinAvailableは30%のパーセンテージに設定されています。アプリケーションPODクラスターで使用可能な正常なPODの少なくとも30%を操作できます。
-
maxUnavailableは値5に設定されます。操作を実行する前に、アプリケーションPODクラスターに使用できないPODは5つだけです。
- maxUnavailableは30%のパーセンテージに設定されます。アプリケーションPODクラスターで使用できないPODの30%のみを操作できます。
maxUnavailableを0または100%に設定するなどの極端な場合は、kubectlドレイン操作を実行できないことを意味します。同様に、minAvailableを100%、またはアプリケーションPODクラスターの最大コピー数に設定すると、kubectlドレイン操作を実行できなくなります。
注意:使用PodDisruptionBudget控制器并不能保证任何情况下都对业务POD集群进行约束,PodDisruptionBudget控制器只能保证POD主动逃离的情况下业务不中断或者业务SLA不降级,例如在执行kubectldrain命令时。
例:
(1)、minAvailableを定義します
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: pdb-demo
spec:
minAvailable: 2
selector:
matchLables:
app: nginx
(2)、maxUnavailableを定義します
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: pdb-demo
spec:
maxUnavailable: 1
selector:
matchLables:
app: nginx
(3)リソースリストを作成する
对于PodDisruptionBudget对象,无法直接进行更新操作,只能通过删除和重新创建来完成对PodDisruptionBudget对象的更新。
# kubectl apply -f pdb-demo.yaml
(4)ステータスを確認する
# kubectl get pdb
NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE
pdb-demo 2 N/A 0 7m46s
(5)詳細情報を見る
# 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/
終了