kubernetes - 在 kubernetes 中复制 docker-compose 卷行为

标签 kubernetes docker-compose docker-volume

我正在将 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/

相关文章:

node.js - 在 docker 容器内调试 Angular

docker - Docker-compose卷无法按预期工作

ubuntu - Docker 容器卷不写入主机

ruby-on-rails - 在 rails docker 容器中找不到 rake-11.1.2

docker-compose - Systemd "No such file or directory"本身在 "docker-compose up"期间

kubernetes - Helm 套件选项(--set)|更新数组的第 N 个键值

amazon-web-services - Kubernetes 如何选择节点添加到 AWS 上的负载均衡器?

django - 使用docker时无法从Django访问安装目录

kubernetes - 在 kubernetes 集群的所有节点上运行 daemonset

kubernetes - kubectl : Unable to connect to the server : dial tcp 192. 168.214.136:6443:连接:主机没有路由