web-dev-qa-db-fra.com

kubectl wait --for = condition = complete - timeout = 30s

J'essaie de vérifier l'état d'un pod à l'aide de la commande d'attente kubectl via ce documentation . Voici la commande que j'essaie

kubectl wait --for=condition=complete --timeout=30s -n d1 job/test-job1-oo-9j9kj

Voici l'erreur que je reçois

Kubectl error: status.conditions accessor error: Failure is of the type string, expected map[string]interface{}

et mon kubectl -o json output can be accessed via this githublien .

Quelqu'un peut-il m'aider à résoudre le problème

5
Auto-learner

Il semble que vous exécutiez kubectl wait --for=condition=complete sur un Pod comme décrit dans votre sortie plutôt que sur un Job .

Un pod n'a pas le --for=condition=complete option. Exactement, ce que j'obtiens quand je l'exécute sur un pod:

$ kubectl wait --for=condition=complete pod/mypod-xxxxxxxxxx-xxxxx
error: .status.conditions accessor error: Failure is of the type string, expected map[string]interface{}
1
Rico

Pour attendre que votre pod soit en cours d'exécution, vérifiez "condition = prêt". De plus, préférez filtrer par étiquette, plutôt que de spécifier l'ID du pod. Par exemple:

$ kubectl wait --for=condition=ready pod -l app=netshoot 
pod/netshoot-58785d5fc7-xt6fg condition met

ne autre option, consiste à attendre la fin du déploiement:

$ kubectl rollout status deployment netshoot
deployment "netshoot" successfully rolled out

Les deux options fonctionnent très bien dans les scripts d'automatisation, lorsqu'il est nécessaire d'attendre qu'une application soit en cours d'exécution.

1
Noam Manos