J'ai une exigence où je souhaite planifier un type spécifique de pod sur un nœud particulier et aucun autre type de pod ne doit être planifié sur ce nœud. Par exemple,
En supposant que j'ai 3 nœuds de travail - w1, w2 et w3 Je veux que les pods de type (disons POD-w2) soient toujours programmés sur w2 et qu'aucun autre type de pods ne devrait être programmé sur w2.
3 Réponses :
Ajoutez un libellé type = w2 au collaborateur 2.
Utilisez le sélecteur de nœud ou l'affinité de nœud pour planifier les pods requis sur ce nœud.
Pour les autres pods, utilisez l'anti-affinité des nœuds pour éviter que d'autres pods ne soient programmés pour le worker 2
Je suis d'accord que cela fonctionnera, mais le problème est que pour chacun des autres déploiements, j'ai besoin d'ajouter l'anti affinité à la spécification de déploiement, ce qui n'est pas souhaitable.
regardez la souillure et les tolérances. Ça aiderait. suivez le lien -> kubernetes.io/docs/concepts/configuration/taint- et tolérati on
Pour utiliser exclusivement un nœud pour un type spécifique de pod, vous devez souiller votre nœud comme décrit ici . Ensuite, créez une tolérance dans votre définition de déploiement / de pod pour le nœud corrompu afin de vous assurer que seul ce type de pod peut être planifié sur le nœud corrompu.
Si je n'utilise que la corruption et la tolérance, il y a de fortes chances que le pod soit également programmé vers d'autres nœuds de travail.
Cela dépend de la façon dont vous spécifiez vos teintes. La règle générale consiste à utiliser des teintes pour spécifier un groupe de nœuds que les pods peuvent / ne peuvent pas planifier; et d'utiliser nodeSelector pour les nœuds pour planifier spécifiquement les nœuds.
Pour y parvenir, nous devons altérer le nœud ainsi que l'affinité en étiquetant le nœud. La gousse requise doit tolérer la souillure et satisfaire également l'affinité. De cette façon, le pod sera planifié UNIQUEMENT sur le nœud dédié.
exemple:
tolerations:
- effect: NoSchedule
key: dedicated
operator: Equal
value: myservice
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: dedicated
operator: In
values:
- myservice
puis utiliser la tolérance et l'affinité dans la spécification de déploiement
kubectl label node <dedicated_node_name> dedicated=myservice
et
kubectl taint nodes <dedicated_node_name> dedicated=myservice:NoSchedule