Est-ce que quelqu'un sait pourquoi celui-ci ne le fait pas (montre une ligne vide):
kubectl exec kube -- sh -c 'echo $KUBERNETES_SERVICE_HOST'
mais celui-ci fonctionne?
kubectl exec kube -- echo $KUBERNETES_SERVICE_HOST
3 Réponses :
L'exécution réussie dépendra de l'image que vous utilisez pour kube
. Mais en termes généraux, echo
est une commande Bourne shell intégrée.
Avec cette commande:
$ kubectl exec kube -- sh -c 'echo $KUBERNETES_SERVICE_HOST'
Vous n'instanciez pas un environnement Bourne Shell et il n'y a pas d'exécutable echo
dans le conteneur. Il s'avère que ce kubectl
fait kubectl
est essentiellement d'exécuter echo $KUBERNETES_SERVICE_HOST
sur votre client! Vous pouvez essayer d'exécuter par exemple:
$ kubectl exec kube -- echo $PWD
Vous verrez que c'est le répertoire personnel de votre client.
Alors qu'avec cette commande:
$ kubectl exec kube -- echo $KUBERNETES_SERVICE_HOST
Il existe un exécutable sh
dans votre environnement et c'est Bourne Shell qui comprend la commande echo
intégrée avec l'environnement Kubernetes donné dans le conteneur par défaut de votre pod.
La raison pour laquelle cela montre une ligne vide n'a rien à voir avec kubernetes ou le conteneur. Dans votre première ligne, $KUBERNETES_SERVICE_HOST
est interprété par le shell dans lequel vous exécutez . Et vous ne devez pas avoir KUBERNETES_SERVICE_HOST défini dans ce shell, il utilise donc une chaîne vide à la place.
Sur la base de ce que vous voyez, j'en déduis que vous essayez de trouver la valeur de la variable KUBERNETES_SERVICE_HOST à l' intérieur de votre conteneur kubernetes. Votre dernière commande fera cela pour vous, et je suppose que la suivante ferait de même.
kubectl exec kube -- echo '$KUBERNETES_SERVICE_HOST'
Btw, cette commande ne fonctionne pas. La réponse acceptée mentionnait que l' echo
sera simplement exécuté sur le shell actuel. Donc, cette commande affichera simplement $KUBERNETES_SERVICE_HOST
dans le shell actuel.
Une option qui fonctionne généralement sans sh -c
, au cas où cela serait nécessaire, est:
kubectl exec kube -- env | grep KUBERNETES_SERVICE_HOST