Подтвердить что ты не робот

Как SSH для контейнера докеров в кластере кубернетов?

Я новичок в платформе Google Cloud и Docker и настроил кластер узлов, сделал файл Docker, который копирует репозиторий и запускает Clojure REPL в общедоступном порту. Я могу подключиться к нему из своей IDE и поиграть с моим кодом, потрясающе!

Тем не менее, REPL, вероятно, туннелируется через SSH, но здесь начинается моя проблема. Я не могу найти подходящее место для SSH в для внесения изменений в репо, которые Docker запускает REPL:

  • Открытый IP-адрес просто предоставляет службу REPL (правильный термин кубернетов?) и не позволяет мне использовать SSH.
  • Конечная точка мастера кластера также не дает мне открытого ключа, даже если я следил за Adding or removing SSH keys for all of the instances in your project частью здесь.

Я хотел бы отредактировать исходные файлы через SSH, но мне нужно будет получить доступ к репозиторию докеревого кода. Я не знаю, как действовать.

Я понимаю, что это не совсем типичный способ развертывания приложений, поэтому я даже не уверен, что можно работать с несколькими узлами с измененной кодовой базой docker (как узлы совместно используют JVM?).

Конкретно мой вопрос: как я могу использовать SSH в контейнере докера для доступа к кодовой базе?

4b9b3361

Ответ 1

Я не могу найти подходящее место для SSH для внесения изменений в репо, которые Docker запускает REPL на

Когда вы создаете кластер, вы предоставляете несколько node виртуальных машин в вашем проекте Google Cloud. Если вы посмотрите https://console.cloud.google.com/compute/instances, вы увидите их, и каждый из них будет иметь внешний IP-адрес, с которым вы сможете ssh. Затем создайте туннель ssh для node виртуальной машины, которая перенаправляет локальный порт на IP-адрес pod.

Обратите внимание, что если вы используете несколько реплик вашего приложения clojure, вы должны подключиться к каждой реплике отдельно, чтобы обновить приложение.

Ответ 2

Формат команды для Kubernetes 1.5.0:

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

Ответ 3

Список экземпляров:

gcloud compute instances list

SSH в пример:

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

В этом экземпляре укажите запущенные процессы и их идентификаторы контейнеров:

sudo docker ps -a

Прикрепите к контейнеру:

sudo docker exec -it <container_id> bash  

Ответ 4

Лучший способ присоединиться к контейнеру с помощью команды exec.

Присоединить к докеру работающего контейнера

docker exec -it  YOUR_CONTAINER_ID bash

Прикрепите к Кубернетесу бегущий контейнер.

kubectl exec -it  YOUR_CONTAINER/POD_NAME bash

Присоединить к Kubernetes запущенный контейнер в заданном пространстве имен.

kubectl exec -it  YOUR_CONTAINER/POD_NAME -n YOUR_NAMESPACE bash

Ответ 5

Вы можете использовать инструмент kubectl для прикрепления или выполнения в запущенных контейнерах в вашем кластере K8s.

Ответ 6

Если модуль находится в вашем текущем пространстве имен, получите список модулей:

kubectl get pods

Выберите стручок. Выполните сессию Bash на нем:

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

Кроме того, найдите нужный модуль в другом пространстве имен:

kubectl get pods --all-namespaces

Выберите модуль и выполните на нем сеанс bash:

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