137 votes

Quel est l'inverse de "kubectl apply" ?

Je jouais dans minikube et j'ai installé la mauvaise version d'istio. J'ai couru :

kubectl apply -f install/kubernetes/istio-demo-auth.yaml

au lieu de :

kubectl apply -f install/kubernetes/istio-demo.yaml

Je me suis dit que j'allais juste le défaire et installer le bon.

Mais je n'arrive pas à trouver un unapply commandement.

Comment puis-je annuler une commande "kubectl apply" ?

3 votes

kubectl delete -f <filename> Mais cela implique que vous avez créé ces ressources à partir de zéro il les supprimerait littéralement, et non pas "reviendrait à la version précédente". De même, si leurs conteneurs font quelque chose avec les machines hôtes, cela ne sera pas non plus rétabli.

2 votes

@zerkms Veuillez ne pas répondre aux questions dans les commentaires. Je pense que ce que vous dites est correct et serait approprié pour une réponse.

2 votes

@ChathanDriehuys il faut BEAUCOUP plus que ça, mais en effet.

185voto

zerkms Points 105994

Une façon de faire serait kubectl delete -f <filename> mais cela implique peu de choses :

  1. Les ressources ont été créées pour la première fois. Si vous voulez vraiment "revenir à l'état précédent", je ne suis pas sûr qu'il existe des outils intégrés dans Kubernetes pour le faire (vous devez donc restaurer à partir d'une sauvegarde, si vous en avez une).

  2. Les conteneurs n'ont pas modifié les machines hôtes : les conteneurs peuvent monter le système de fichiers Root et le modifier, ou les sous-systèmes du noyau (iptables, etc.). Le site delete ne le rétablirait pas non plus, et dans ce cas, vous devez vraiment consulter la documentation du produit pour voir s'ils proposent un moyen officiel de garantir un nettoyage correct.

7voto

Stuart Harland Points 56

Il est vraiment important de se rappeler que techniquement, il n'y a pas d'inverse à kubectl apply . Cela s'explique par le fonctionnement de k8s, qui fait converger l'état souhaité vers l'état actuel. En exécutant apply vous dites au cluster de "faire en sorte que ça ressemble à ça". Mais les contrôleurs du cluster ne font pas la version de votre configuration au sens strict.

Dans votre situation, ce que vous voulez vraiment dire, c'est "comment me débarrasser des ressources qui ont été créées par mon manifeste mal appliqué ?". Ce qui n'est pas tout à fait la même chose. Les autres réponses font un bon exemple de réponse à cela pour ta situation. Mais il est utile d'être conscient que c'est plus nuancé que cela.

Qu'est-ce que je veux dire par là ?

Considérez ce qui se passerait si vous appliquiez un manifeste, ajustiez le contenu du manifeste puis le réappliquiez à un cluster ? Comment passer de l'état B à l'état A sans tout effacer et redémarrer depuis le début ?

K8s ne se souvient pas de l'état précédent de votre manifeste une fois qu'il a fait l'application, il n'y a pas de bouton "annuler" dans ce contexte, donc vous ne pouvez pas revenir à un état précédent juste en faisant une forme d'hypothétique. kubectl undo commandement.

Si vous voulez annuler une forme de patch sur une ressource, vous devez vraiment utiliser d'autres outils en dehors de la portée de k8s. C'est pourquoi le contrôle de version devient très important, en particulier lorsque vous exploitez des piles plus compliquées. Dans le scénario que j'ai proposé, vous pourriez potentiellement extraire une version précédente et l'appliquer pour opérer comme votre "rollback". Comme toujours, il y a quelques réserves, mais pour la plupart des cas d'utilisation, cela fonctionnerait bien.

5voto

mrek Points 466

Si vous avez créé une nouvelle application, utilisez kubectl delete comme l'a suggéré @zerkms.

Cependant, si vous êtes comme moi et que vous avez déployé une version plus récente sur un cluster différent, l'application est bloquée en mode création comme ceci :

NAME                   READY   STATUS             RESTARTS   AGE
my-application-csbxl   0/1     ContainerCreating  0          5m25s
my-application-5bcvc   1/1     Running            0          2d1h

La meilleure solution est alors le retour en arrière, car il permet de revenir au déploiement précédent :

kubectl rollout undo deployment my-application

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