Quand vous déployez un pod, que vous effectuez une mise à jour de cluster ou que vous videz un noeud, vous pouvez avoir des pods qui sont bloqués dans un état "Pending".
En regardant les Events du pods, vous pourrez remarquer l'erreur suivante
2 node(s) had volume node affinity conflict.
Cette erreur signifie que le noeud sur lequel est déployé votre pod ne correspond pas aux exigences du volume qui lui est associé.
Si on prend un exemple, vous avez déployé vos services dans AWS et avez fait ce qu'il faut pour qu'ils soient hautement disponibles en répliquant les services et les volumes associés dans deux AZ d'une même région. (us-east-1a & us-east-1b par exemple)
Si dans votre cluster EKS vous bloquez les déploiements sur us-east-1a, les volumes qui sont censés être liés à des pods sur us-east-1b ne vont pas être content et vont vous générer cette erreur.
Trouver l'affinité de votre volume
Afin de voir quel est la source du problème, il vous faut trouver le volume persistant (persistent volume) et regarder sa définition.
Vous pouvez partir du pod pour trouver le PersistentVolumeClaim associé
$ kubectl describe pod my-pod
Name: my-pod
Namespace: default
(...)
Volumes:
volume:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: volume-my-prod
ReadOnly: false
(...)
De là, vous pouvez trouver le PersistentVolume associé au PersistentVolumeClaim
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
volume-my-prod Bound pvc-toto 200Gi RWO ebs-gp2 41d
Et de là, vous pouvez détailler le PersistentVolume pour voir, par exemple, qu'il a besoin être dans l'AZ "us-east-1a".
$ kubectl get pv pvc-toto -o yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pvc-toto
spec:
(...)
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: topology.ebs.csi.aws.com/zone
operator: In
values:
- us-east-1a
(...)
Une fois que vous avez cette information, vous devriez être en mesure de comprendre ce qui ne va pas avec le noeud où il se trouve actuellement et donc être capable de résoudre la situation.
J'espère que ça vous aidera! 🍺
Top comments (0)