从 docker-compose 转换为 Kubernetes - 如何处理本地卷

Converting from docker-compose to Kubernetes - how to deal with volumes on local

我正在尝试将我的本地开发环境从 docker-compose 转换为轻量级 Kubernetes,因为我们的生产环境都是 Kubernetes(类似)。在 Kompose 的帮助下,我可以转换我的设置。然而,我遇到的问题是将 Docker 卷转换为本地开发机器卷和卷声明。我找到的大多数示例涵盖 S3 或 NFS 的驱动程序,这不是我的开发笔记本电脑提供的。

所以当我在 docker-compose.yml 中有这样的设置时,k8s 中的本地开发等效项是什么?

version: "3.6"
services:
  my_test:
    image: "myregistry.com/my_test"
    container_name: "demo"
    hostname: "demo.acme.local"
    stop_grace_period: 120s
    cap_add:
      - SYS_PTRACE
    ports:
      - 80:80
    volumes:
      - my_vol:/local/my_app
volumes:
  my_vol:
    name: "/local/containers/my_app"
    external: false

我“只”在寻找音量部分。其余的似乎很清楚。
感谢帮助

是的,您可以使用主机路径,或者您可以使用您

上的emptydir

可能 hostpath 是更好的选择。

如果您打算使用 minikube,您还可以查看 PVPVC 选项,主要用于 Kubernetes 中的 persistence 存储。

主机路径 : https://kubernetes.io/docs/concepts/storage/volumes/#hostpath-configuration-example

空目录 : https://kubernetes.io/docs/concepts/storage/volumes/#emptydir

您发现的两种解决方案(hostpathemptydir)看起来都不错。

这里有两个文件:


A hostPath volume mounts a file or directory from the host node's filesystem into your Pod.

对于需要的path属性,您还可以为hostPath卷指定一个type

NOTE: HostPath volumes present many security risks, and it is a best practice to avoid the use of HostPaths when possible. When a HostPath volume must be used, it should be scoped to only the required file or directory, and mounted as ReadOnly.


An emptyDir volume is first created when a Pod is assigned to a node, and exists as long as that Pod is running on that node.

EmptyDir 卷最初是空的。 pod 中的所有容器都在 emptyDir 卷中具有读取和写入相同文件的权限,尽管该卷可能存在不同的本地化(它可以安装在每个容器中的相同或不同路径)。

如果 Pod 因任何原因从节点中删除,emptyDir 中的数据将被永久删除

Depending on your environment, emptyDir volumes are stored on whatever medium that backs the node such as disk or SSD, or network storage.