我正在使用Mac的Docker,但目前仅将其用于Kubernetes集群。 Kubernetes集群的单个节点名为 docker-for-desktop 。
我目前正在阅读有关持久卷(https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/)的Kubernetes教程,作为其中的一部分,我正在设置 hostPath 持久卷。看来这是一种工作方式,您可以在Kubernetes节点本身上创建路径,并将其用作开发和测试目的的永久卷。
为此,本教程将指导您通过SSH进入Kubernetes节点本身,并创建一个路径,然后将该路径转换为持久卷。唯一的问题是,我不知道如何直接通过SSH直接进入Kubernetes节点本身(而不是容器)。 minikube的等效项仅为minikube ssh
。我可以kubectl describe
节点,但是我只能得到一个内部IP地址,而不是一个外部IP地址。所以我不知道如何在ssh
命令中解决它。
有什么想法吗?
答案 0 :(得分:2)
OP中的评论应该对此有所贡献,但我会再次添加,以便在几个月后发现它更容易:
docker run -it --rm --privileged --pid=host justincormack/nsenter1
来自https://github.com/justincormack/nsenter1/blob/master/README.md
...这在运行轻量级,容器优化的Linux发行版(例如LinuxKit)时非常有用...例如,您正在使用Docker for Mac进行演示,例如,容器未直接在主机上运行,而是而是在专门为运行容器而构建的最小Linux OS虚拟机(即LinuxKit)内部运行。但是,LinuxKit是一个轻量级的环境,它没有运行sshd,那么如何访问shell,以便您可以运行nsenter来检查以pid 1运行的进程的名称空间?
答案 1 :(得分:0)
我在Docker桌面上运行k8时一直在寻找答案,然后尝试了docker ps
,令我惊讶的是,我的pod的容器在那里。
所以我就像使用任何docker容器一样ssh
$ docker exec -it 0b83055dac1b /bin/bash
答案 2 :(得分:-1)
更新:
如果节点是由docker-machine使用VirtualBox创建的,则类似于minikube,使用命令:
docker-machine ssh default
如果您为MAC使用默认的HyperKit
驱动程序,则没有像VirtualBox这样的VM,但是您应该能够使用以下命令打开外壳程序:
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
看看this帖子。
如果您正在云提供商中运行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
之类的节点中。