我正在将 Tomcat + Postgres 应用程序的 docker-compose 文件迁移到 kubernetes。我的测试环境是启用了 Kubernetes 的 Windows 版 Docker。
如果我对 postgres 使用 emptyDir 卷,我可以成功测试我的应用程序,但无法保留 postgres 数据。
volumes:
- name: "pgdata-vol"
emptyDir: {}
在 MacOS 上,我能够使用 hostPath 卷保存 postgres 数据。
volumes:
- name: "pgdata-vol"
hostPath:
path: /tmp/vols/pgdata
不幸的是,如果我在 Windows 上尝试相同的解决方案,我会遇到权限错误。这在之前的问题中已经讨论过。请参阅Kubernetes (in Docker for Windows) Volume Configuration for Postgres .
我不需要通过主机文件系统访问我的卷。我只是希望我的音量从一次运行到下一次运行都能保持不变。使用以下卷定义运行 docker-compose ... up 和 docker-compose ... down 时,我能够实现此行为。
volumes:
pgdata:
体积引用
environment:
- PGDATA=/pgdata
volumes:
- pgdata:/pgdata
有一个好的名称可以用来描述这种类型的卷吗?有没有办法将这种类型的卷转换为 Kubernetes?
最佳答案
空目录确实是用于临时数据的。 如果您需要持久数据,您可以选择使用 Docker 中的主机路径,但如果您有多个节点,并且为不同节点安排了 pod,则数据将会丢失。
因此,更好的解决方案是使用持久卷。这必须由您的基础设施提供,因此特定于您的环境。
详情参见:https://kubernetes.io/docs/concepts/storage/volumes/
对于 Windows 版 Docker 上的权限问题,您可能需要考虑使用 minikube。
关于kubernetes - 在 kubernetes 中复制 docker-compose 卷行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57378980/