wake-up-neo.net

Wie kann man einen SSH-Container in kubernetes Cluster andocken

Ich bin relativ neu für die Google Cloud-Plattform und Docker und habe ein Cluster von Knoten eingerichtet, eine Docker-Datei erstellt, die ein Repo kopiert und ein Clojure REPL auf einem öffentlichen Port ausführt. Ich kann von meiner IDE aus eine Verbindung herstellen und mit meinem Code herumspielen, super!

Das REPL sollte jedoch wahrscheinlich durch SSH getunnelt werden, aber hier beginnt mein Problem. Ich kann keinen geeigneten Ort für SSH in finden, um Änderungen am Repo vorzunehmen, an dem Docker das REPL ausführt:

  • Die offengelegte IP macht nur den REPL - Dienst verfügbar (richtige Bezeichnung für kubernetes?) Und erlaubt mir nicht, SSH einzuschalten. 
  • Der Cluster-Master-Endpunkt tut dies auch nicht, er gibt mir einen öffentlichen Schlüsselfehler, obwohl ich dem Adding or removing SSH keys for all of the instances in your project-Teil hier gefolgt bin.

Ich möchte die Quelldateien über SSH bearbeiten, aber ich müsste auf das Docker-Code-Repo zugreifen. Ich weiß nicht, wie ich vorgehen soll.

Ich verstehe, dass dies nicht gerade ein typischer Weg ist, um Anwendungen bereitzustellen, daher bin ich nicht einmal sicher, ob mehrere Knoten mit einer modifizierten Docker-Codebase arbeiten können (teilen die Knoten die JVM irgendwie?).

Konkret meine Frage ist, wie kann ich mit SSH in den Docker-Container gelangen, um auf die Codebase zuzugreifen?

27
bbs

Ich kann keinen geeigneten Ort für SSH finden, um Änderungen an dem Repo vorzunehmen, auf dem Docker die REPL ausführt

Wenn Sie einen Cluster erstellen, stellen Sie eine Anzahl von Knoten-VMs in Ihrem Google-Cloud-Projekt bereit. Wenn Sie auf https://console.cloud.google.com/compute/instances schauen, sollten Sie sie sehen und jeder wird eine externe IP-Adresse haben, in die Sie ssh eingeben können. Erstellen Sie dann einen SSH-Tunnel mit einem Knoten VM, der einen lokalen Port an die IP-Adresse des Pods weiterleitet. 

Wenn Sie mehrere Repliken Ihrer Clojure-App ausführen, müssen Sie für jedes Update separat eine Verbindung herstellen, um die App zu aktualisieren. 

3
Robert Bailey

Das Befehlsformat für Kubernetes 1.5.0:

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

Instanzen auflisten:

gcloud compute instances list

SSH in Instanz:

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

Listen Sie in der Instanz die laufenden Prozesse und ihre Container-IDs auf:

Sudo docker ps -a

An einen Container anhängen:

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

Die beste Methode zum Anhängen an den Container über den Befehl exec.

Am Docker laufenden Container anbringen

docker exec -it YOUR_CONTAINER_ID bash

An Kubernetes laufenden Container anschließen.

kubectl exec -it YOUR_CONTAINER/POD_NAME-Bash

Verbindung zu Kubernetes, die Container in einem bestimmten Namespace ausführen.

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

Wenn sich der Pod in Ihrem aktuellen Namespace befindet, rufen Sie die Liste der Pods ab:

kubectl get pods

Wähle eine Schote. Führen Sie eine Bash-Session aus:

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

Alternativ können Sie den gewünschten Pod in einem anderen Namespace suchen:

kubectl get pods --all-namespaces

Wähle einen Pod und führe eine Bash-Session darauf aus:

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