与带有docker-for-desktop的Kubernetes节点的“ minikube ssh”等效

时间:2019-03-27 13:40:37

标签: docker kubernetes

我正在使用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命令中解决它。

有什么想法吗?

3 个答案:

答案 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之类的节点中。

AKS docs

中有一个很好的例子