繁体   English   中英

相当于带有 docker-for-desktop Kube.netes 节点的“minikube ssh”

[英]equivalent of "minikube ssh" with docker-for-desktop Kubernetes node

我在 Mac 上使用 Docker,但目前仅将其用于其 Kube.netes 集群。 Kube.netes 集群的单个节点名为 docker -for-desktop

我目前正在阅读关于持久卷的 Kube.netes 教程 ( https://kube.netes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/ ) 作为其中的一部分,我正在设置一个hostPath持久卷。 看起来它的工作方式是,您在 Kube.netes 节点本身上创建一个路径,您可以将其用作用于开发和测试目的的持久卷。

为此,本教程将指导您 SSH 进入您的 Kube.netes 节点本身并创建一个路径,然后可以将其转换为持久卷。 唯一的问题是,我不知道如何将 SSH 直接放入 Kube.netes 节点本身(不是容器)。 minikube 的等价物就是minikube ssh 我可以kubectl describe节点,但我只得到一个内部 IP 地址,而不是外部地址。 所以我不知道如何在ssh命令中解决它。

有任何想法吗?

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 操作系统虚拟机,即 LinuxKit。 但是作为一个轻量级环境,LinuxKit 没有运行 sshd,那么您如何访问 shell 以便您可以运行 nsenter 来检查作为 pid 1 运行的进程的命名空间?

我一直在寻找同样的东西。 我正在玩弄 PV/PVC,真的只是想“关注”正在存储的东西。

我正在运行 Kube.netes 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

我在 Docker 桌面上运行 k8s 时一直在寻找答案,然后我尝试了 docker docker ps ,令我惊讶的是,我的 pod 的容器就在那里。

所以我就像你对任何 docker 容器一样 ssh

$ docker exec -it 0b83055dac1b /bin/bash

更新:

如果节点是由 docker-machine 使用 VirtualBox 创建的,则类似于 minikube,使用命令:

docker-machine ssh default

如果您使用 MAC 的默认HyperKit驱动程序,则没有像 VirtualBox 这样的 VM,但您应该能够使用以下命令打开 shell:

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 文档中有一个很好的例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM