Kubernetes 持久卷的存储位置在哪里?

Tyl*_*one 5 mysql storage docker kubernetes persistent-volumes

我正在学习 Kubernetes 并尝试按照以下教程创建 Mysql 数据库:

https://kubernetes.io/docs/tasks/run-application/run-single-instance-stateful-application/#:~:text=Deploy%20MySQL,MySQL%20and%20references%20the%20PersistentVolumeClaim

到目前为止,我一直使用 Docker 和 Docker-compose 来完成所有的开发和生产工作。

使用 Docker Desktop(在 Mac 上)的 Kubernetes 单主节点集群,我能够使示例正常运行并与 Mysql 交互,创建表并填充一些数据。删除资源并重试后,数据仍然存在,并且我能够在重新安装部署、服务、PV 和 PVC 后立即访问数据。连接应用程序成功的先决条件。

然而,我一生都无法找出数据实际上存储在笔记本电脑的本地文件系统上的位置。这些示例中仅列出了 2 个文件路径。部署中的一个(我假设是容器的内部文件系统,类似于Docker的容器内部路径):

volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql 
Run Code Online (Sandbox Code Playgroud)

以及持久卷路径(我假设是 docker 的主机系统等效文件路径):

hostPath:
    path: "/mnt/data" 
Run Code Online (Sandbox Code Playgroud)

我的问题是:在我的笔记本电脑上我找不到这些路径中的任何一个。尽管 PV 仍然处于活动状态,但 /mnt/data 并不直接存在于我笔记本电脑的根目录中(我希望它存在),而且我在文件系统上看不到 kubernetes 集群、节点或 pod 挂载的位置。这些数据存储在我的笔记本电脑上的什么位置?这不一定是一个实际有用的知识,但为了更好地理解 kubernetes 及其工作原理,了解这一点至关重要,而且我不愿意也无法继续学习 kubernetes,直到我能弄清楚物理位置数据存储在主机文件系统上。

我看到另一个问题说“SSH 到正在运行 PV 资源的节点”,但我觉得这是引用一个分布式云系统,其中节点存在于单独的服务器上,并且如上所述,我找不到我的安装路径一个本地运行的主节点。其他一切似乎都指向关于 PV 和 PVC 的无用官方文档。

谁能向我解释一下这个mysql数据应该在哪里?

Mik*_*ant 5

Mac 上的 Docker Desktop 运行一个虚拟机来在里面运行 docker。当您查看它时,您是对的hostPath.path- 这就是它的存储位置。但因为 docker/Kubernetes 位于虚拟机内部,所以路径是相对的。

要亲自看到这一点有点棘手,Docker Desktop 不提供进入虚拟机内部的指南。不过,社区有一些选择。一个简单的方法是docker run -it --rm --privileged --pid=host justincormack/nsenter1。该命令在 docker 内运行一个容器,为您提供包含 docker 守护进程的虚拟机上的 shell。

至于它在笔记本电脑上的位置,您可以按照有关虚拟机磁盘映像的文档进行操作。首选项 > 资源 > 高级将显示磁盘映像文件在笔记本电脑上的物理位置。