Que signifie l'erreur "Volume node affinity conflict" ?

mxglt

Maxime Guilbert

Posted on April 10, 2023

Que signifie l'erreur "Volume node affinity conflict" ?

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.
Enter fullscreen mode Exit fullscreen mode

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
(...)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
  (...)
Enter fullscreen mode Exit fullscreen mode

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! 🍺


Vous voulez me supporter?

Buy Me A Coffee

💖 💪 🙅 🚩
mxglt
Maxime Guilbert

Posted on April 10, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related