Эквивалент "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 есть хороший пример