Как 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 в контейнере докера для доступа к кодовой базе?
Ответы
Ответ 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