Afin de garantir que l'activité n'est pas interrompue ou que le SLA métier n'est pas dégradé dans Kubernetes, les applications doivent être déployées en clusters, tels que le déploiement, le déploiement StatefulSet, etc. Bien qu'il s'agisse d'un déploiement en cluster, lorsque nous détruisons activement des pods, afin d'éviter de détruire trop de pods à la fois, Kubernetes fait référence au contrôleur PodDisruptionBudget (PDB) pour contrôler le nombre de pods dans le cluster.
Dans PDB, le nombre de pods est principalement contrôlé par deux paramètres:
-
minAvailable: représente le nombre minimum de pods disponibles, qui représente le nombre minimum de pods en état d'exécution dans un cluster de pods ou le pourcentage du nombre de pods en état d'exécution et le total;
- maxUnavailable: indique le nombre maximum de pods indisponibles, indiquant le nombre maximum de pods indisponibles dans le cluster de pods ou le pourcentage du nombre de pods indisponibles et le total;
注意:minAvailable和maxUnavailable是互斥了,也就是说两者同一时刻只能出现一种。
La commande kubectl drain prend déjà en charge le contrôleur PodDisruptionBudget. Lorsque l'opération kubectl drain est effectuée, elle détermine le nombre de clusters POD d'application en fonction du contrôleur PodDisruptionBudget, afin de garantir que la destruction du POD d'application est effectuée sans interruption de service ni dégradation du SLA de service. . Lors de l'exécution d'un drain kubectl ou d'un pod s'échappant activement, Kubernetes jugera par les situations suivantes:
-
minAvailable est défini sur une valeur de 5: il doit y avoir au moins 5 POD sains et disponibles dans le cluster POD d'application, puis l'opération peut être effectuée.
-
MinAvailable est défini sur un pourcentage de 30%: au moins 30% des POD sains disponibles dans le cluster POD d'application peuvent être exploités.
-
maxUnavailable est défini sur une valeur de 5: il ne peut y avoir que 5 POD indisponibles dans le cluster POD d'application avant que l'opération ne puisse être effectuée.
- maxUnavailable est défini sur un pourcentage de 30%: seuls 30% des POD indisponibles du cluster POD d'application peuvent être exploités.
Dans des cas extrêmes, tels que le réglage de maxUnavailable sur 0 ou 100%, cela signifie que l'opération de vidange kubectl ne peut pas être effectuée. De la même manière, définir minAvailable sur 100% ou sur le nombre maximal de copies du cluster POD d'application signifie également que l'opération de vidange kubectl ne peut pas être effectuée.
注意:使用PodDisruptionBudget控制器并不能保证任何情况下都对业务POD集群进行约束,PodDisruptionBudget控制器只能保证POD主动逃离的情况下业务不中断或者业务SLA不降级,例如在执行kubectldrain命令时。
Exemple:
(1), définissez minAvailable
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: pdb-demo
spec:
minAvailable: 2
selector:
matchLables:
app: nginx
(2), définissez maxUnavailable
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: pdb-demo
spec:
maxUnavailable: 1
selector:
matchLables:
app: nginx
(3) Créer une liste de ressources
对于PodDisruptionBudget对象,无法直接进行更新操作,只能通过删除和重新创建来完成对PodDisruptionBudget对象的更新。
# kubectl apply -f pdb-demo.yaml
(4) Vérifiez l'état
# kubectl get pdb
NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE
pdb-demo 2 N/A 0 7m46s
(5) Afficher des informations détaillées
# 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/
Finir