0

我正在尝试围绕 Kubernetes 进行研究,作为练习,我想将我的 docker-compose 设置(由 nginx、php-fpm 和 mysql 组成)迁移到 k8s 集群。虽然我熟悉 Docker 和docker-compose,我似乎不知道如何将本地文件夹挂载到 Kunernetes pod 中。

我想要实现的是像-v /home/user/www:/var/www/html在 Docker 中进入每个 pod 一样简单的东西。

但无论我如何配置 PersistantVolume,挂载在 pod 中的文件夹都是空的。我在 WSL2 下尝试了带有 WSL2 的 Docker Desktop、microk8s(使用 systemd hack 安装的快照)和 WSL2 下的 minikube。

这个存储类是否相关?这在 WSL2 中甚至可能吗?

4

1 回答 1

2

Docker 绑定挂载模型不能真正按照您描述的方式在 Kubernetes 中使用。

Kubernetes 的模型围绕着一组本质上可互换的机器。假设您有 10 个系统。哪一个有那个 HTML 内容?它是如何到达那里的?如果您需要添加另一个节点,或者一个节点被销毁,会发生什么?您碰巧使用只有一个节点的测试设置并不会改变该设计点。

如果您使用的是 Kubernetes,则基本上需要将此内容构建到映像中,并将其推送到某种注册表中。有几种选择(单个index.html文件可以填充到 ConfigMap 中;您可以使用 AWS S3 之类的外部存储),但大多数情况下,您必须将 Dockerfile 写入映像,并在部署规范中COPY引用它。image:

对于您提到的特定堆栈,我还看到了一些使用命名卷将数据从 PHP 容器复制到 nginx 服务器的设置。这在 Kubernetes 中效果不佳:更容易设置的卷类型无法在容器之间共享,并且 Kubernetes 不会像 Docker 那样自动将内容复制到卷中。我建议避免在 Kubernetes 中进行任何类型的文件系统共享;在普通的 Docker 中避免它也是一个很好的做法(COPY基于 - 的图像设置在单主机 Compose 设置中可以正常工作)。

于 2020-06-04T18:59:01.107 回答