web-dev-qa-db-fra.com

Comment SSH à conteneur de docker dans le cluster Kubernetes?

Je connais assez bien la plate-forme Google Cloud et Docker, et j'ai configuré un cluster de nœuds, créé un fichier Docker qui copie un référentiel et exécute un Clojure REPL sur un port public. Je peux me connecter à partir de mon IDE et jouer avec mon code, génial!

Cela REPL devrait cependant probablement être tunnelisé via SSH, mais voici où mon problème commence. Je ne trouve pas d'endroit approprié pour SSH dans pour apporter des modifications au référentiel sur lequel Docker exécute le REPL sur:

  • L’adresse IP exposée expose simplement le service REPL (terme kubernetes correct?) Et ne me permet pas de SSH dans. 
  • Le terminal maître ne le fait pas non plus, il me donne une erreur de clé publique même si j'ai suivi la Adding or removing SSH keys for all of the instances in your project part here .

J'aimerais éditer les fichiers sources via SSH, mais il me faudrait accéder au dépôt de code de docker. Je ne sais pas comment procéder.

Je comprends que ce n'est pas vraiment une façon typique de déployer des applications, donc je ne suis même pas sûr qu'il soit possible de faire fonctionner plusieurs nœuds avec une base de code docker modifiée (les nœuds partagent-ils la JVM d'une manière ou d'une autre?).

Concrètement, ma question est de savoir comment puis-je SSH dans le conteneur Docker pour accéder à la base de code?

27
bbs

Je ne trouve pas d’emplacement approprié dans lequel SSH peut modifier le référentiel dans lequel Docker exécute le REPL sur

Lorsque vous créez un cluster, vous configurez un certain nombre de machines virtuelles de nœud dans votre projet Google Cloud. Si vous regardez https://console.cloud.google.com/compute/instances , vous devriez les voir et chacun d'entre eux aura une adresse IP externe sur laquelle vous pourrez vous connecter. Créez ensuite un tunnel ssh sur un noeud VM qui transfère un port local à l'adresse IP du pod. 

Notez que si vous exécutez plusieurs réplicas de votre application clojure, vous devez vous connecter à chaque réplica séparément pour mettre à jour l'application. 

3
Robert Bailey

Le format de commande pour Kubernetes 1.5.0:

kubectl exec -it <POD NAME> -c <CONTAINER NAME> bash
50
Sergey Shcherbakov

Liste des instances:

gcloud compute instances list

SSH en instance:

gcloud compute ssh <instance_name> --zone=<instance_zone>

Dans l'instance, répertoriez les processus en cours d'exécution et leurs ID de conteneur:

Sudo docker ps -a

Joindre à un conteneur:

Sudo docker exec -it <container_id> bash  
18
Yoshua Wuyts

La meilleure façon de s'attacher au conteneur à l'aide de la commande exec.

Attacher au conteneur en cours d'exécution

docker exec -it YOUR_CONTAINER_ID bash

Attachez le conteneur en cours d'exécution à Kubernetes.

kubectl exec -it YOUR_CONTAINER/POD_NAME bash

Attachez le conteneur en cours d'exécution de Kubernetes dans un espace de noms donné.

kubectl exec -it YOUR_CONTAINER/POD_NAME -n YOUR_NAMESPACE bash
13
Nitin

Si le pod est dans votre espace de noms actuel, obtenez la liste des pods:

kubectl get pods

Choisissez un pod. Exécutez une session bash dessus:

kubectl exec -it [POD_NAME] -- /bin/bash

Vous pouvez également rechercher le pod de votre choix dans un autre espace de noms:

kubectl get pods --all-namespaces

Choisissez un pod et exécutez une session bash dessus:

kubectl exec -it [POD_NAME] --namespace [NAMESPACE] -- /bin/bash
1
John McGehee