3 votes

Kubectl replace -f crée un pod indéfiniment dans l'état en attente

J'ai un déploiement k8s - Je déploie souvent une nouvelle version dans le dépôt docker - change le tag de l'image - et essaie de remplacer le déploiement en utilisant kubectl replace -f fichier.yaml. Mes répliques sont définies à 1 - Je n'ai qu'un pod du déploiement en cours d'exécution à la fois.

Lorsque je change le tag de l'image (par exemple en passant de v1 à v2) et essaie de le remplacer - cela crée un nouveau pod, mais il reste indéfiniment dans l'état 'en attente', tandis que l'ancien pod reste dans l'état 'en cours d'exécution'.

Je pense que le nouveau pod attend que l'ancien pod soit terminé - mais il ne se terminera pas de lui-même. J'ai besoin qu'il soit supprimé par k8s afin que le nouveau pod puisse prendre sa place.

Utiliser replace --force résout ce problème - mais j'aimerais que cela fonctionne juste en utilisant replace -f. Des idées sur la façon d'atteindre cela?

1voto

Vasili Angapov Points 5811

Le problème que vous voyez n'a rien à voir avec kubectl replace/apply. La vraie raison est que les déploiements utilisent par défaut la stratégie RollingUpdate qui attend par défaut que le nouveau pod soit en cours d'exécution pour ensuite tuer l'ancien pod. La raison pour laquelle le nouveau pod est dans l'état Pending n'est pas claire dans votre question, mais dans la plupart des cas, cela indique un manque de ressources de calcul pour le nouveau pod.

Vous pouvez faire deux choses différentes:

Utilisez la stratégie RollingUpdate avec maxUnavailable=1. Cela fera ce que vous voulez - il tuera l'ancien pod puis en créera un nouveau.

spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
       maxUnavailable: 1

OU vous pouvez spécifier la stratégie Recreate qui fait effectivement la même chose:

spec:
  strategy:
    type: Recreate

En savoir plus sur les stratégies de déploiement ici: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X