Эквивалент "minikube ssh" с докер-узлом Kubernetes для рабочего стола

Я использую Docker для Mac, но в настоящее время использую его только для своего кластера Kubernetes. Единственный узел кластера Kubernetes называется docker-for-desktop.

В настоящее время я прохожу учебное пособие по постоянным томам в Kubernetes ( https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/) и как часть этого я устанавливаю постоянный том hostPath. Кажется, как это работает, вы создаете путь на самом узле Kubernetes и можете использовать его в качестве постоянного тома для целей разработки и тестирования.

Чтобы сделать это, учебник инструктирует вас подключиться к SSH непосредственно к вашему узлу Kubernetes и создать путь, который затем можно превратить в постоянный том. Единственная проблема в том, что я понятия не имею, как подключить SSH непосредственно к самому узлу Kubernetes (не к контейнеру). Эквивалент для миникуба будет просто minikube ssh, Я могу kubectl describe узел, но я получаю только внутренний IP-адрес, а не внешний. Так что я понятия не имею, как решить это в ssh команда.

Есть идеи?

5 ответов

Комментарий в OP должен получить за это кредит, но я добавлю еще раз, чтобы мне было легче через несколько месяцев:

docker run -it --rm --privileged --pid=host justincormack/nsenter1

С https://github.com/justincormack/nsenter1/blob/master/README.md

... это полезно, когда вы используете облегченный, оптимизированный для контейнеров дистрибутив Linux, такой как LinuxKit... вы демонстрируете, например, с помощью Docker для Mac, что ваши контейнеры не работают напрямую на вашем хосте, а вместо этого работают внутри минимальной виртуальной машины под ОС Linux, специально созданной для запуска контейнеров, например LinuxKit. Но, будучи облегченной средой, LinuxKit не запускает sshd, поэтому как получить доступ к оболочке, чтобы можно было запустить nsenter для проверки пространств имен для процесса, запущенного как pid 1?

Я искал то же самое. Я играю с PV / PVC и действительно просто хотел «присмотреться» к тому, что хранится.

Я использую Kubernetes 1.22.5 и Docker Desktop 4.5.0.

Чтобы получить доступ к узлу docker-desktop

      docker run -it --rm --privileged --pid=host justincormack/nsenter1

Мой PV

      apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
  namespace: my-namespace
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"

Поиск каталога /mnt/data

Было довольно много разных мест, и нюхать вручную было немного сложно. Это поиск, чтобы просто найти то, что вы ищете:

Поиск каталога «данные»

      find / -type d -name "data"

Это вернет список совпадений. У меня было довольно много результатов. Но теперь вы можете выполнить поиск в своем терминале по запросу «mnt/data», и вот оно.

Мой был в /containers/services/docker/rootfs/mnt/data

Я искал ответ, когда запускал k8s на Docker Desktop, потом попробовал docker ps и, к моему удивлению, там были контейнеры с моей капсулой.

Так что я просто использую ssh, как и вы, с любым докер-контейнером

      $ docker exec -it 0b83055dac1b /bin/bash

Спасибо OP. Этот пост очень ценится. Многие, кто сталкивается с этой проблемой, в конечном итоге хотят знать, что путь к хосту укоренен таким образом: / mnt / host / c / ...... Используя ответ здесь, я смог это найти.

Обновить:

Если бы узел был создан на Docker-машине с использованием VirtualBox, был бы похож на minikube, с командой:

docker-machine ssh default

Если вы используете по умолчанию HyperKit Драйвер для MAC, нет виртуальной машины, такой как VirtualBox, но вы сможете открыть оболочку с помощью следующей команды:

screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

Оригинал:

Если у вас есть прямой доступ к узлу и сертификату, это так же просто, как команда:

ssh -i certificatename 10.0.0.1

или же

ssh -i certificatename docker@10.0.0.1

взгляните на этот пост.

Если вы используете Kubernetes в облачном провайдере, вы должны использовать инструменты провайдера для этого.

Примером может служить Google Cloud:

gcloud compute ssh <NODE_NAME> --zone <ZONE>

Azure и Aws также имеют похожие параметры, вы также можете использовать их портал для этого.

Другой альтернативой является использование контейнера bastian\helper в кластере для подключения к узлам без настройки сетевых разрешений, он работает в облаке или в локальных кластерах.

Что-то вроде:

kubectl run -it --rm aks-ssh --image=debian

Это запустит контейнер с bash, затем вы должны установить ssh-клиент apt-get update && apt-get install openssh-client -y скопируйте клиентский сертификат в контейнер и ssh в узел как ssh -i id_rsa azureuser@10.240.0.4,

В документах AKS есть хороший пример

Другие вопросы по тегам