将本地目录映射到kubernetes

将本地目录映射到kubernetes,kubernetes,local-storage,persistent-volumes,Kubernetes,Local Storage,Persistent Volumes,我正在使用Docker desktop在kubernetes平台上运行一个应用程序,我需要在其中存储文件的位置如何使用我的本地目录(c:\app data)指向kubernetes中运行的应用程序。我遇到了类似的问题。Docker容器通常是一次性/网关容器,因此人们通常不使用它们来存储文件 也就是说,您有两种选择: 将路径和文件添加到docker容器,这将导致docker容器的大小过大(不推荐)。Docker构建将需要大量的时间和内存,因为所有文件都将被复制。下面是一个使用docker创建本地u

我正在使用Docker desktop在kubernetes平台上运行一个应用程序,我需要在其中存储文件的位置如何使用我的本地目录(c:\app data)指向kubernetes中运行的应用程序。

我遇到了类似的问题。Docker容器通常是一次性/网关容器,因此人们通常不使用它们来存储文件

也就是说,您有两种选择:

  • 将路径和文件添加到docker容器,这将导致docker容器的大小过大(不推荐)。Docker构建将需要大量的时间和内存,因为所有文件都将被复制。下面是一个使用docker创建本地ubuntu容器的示例

  • 通过另一台服务器/api托管您的文件,并使用应用程序中的简单请求获取这些文件。我使用了这个解决方案。唯一的警告是你需要 能够以某种方式托管您的文件。这很容易,但可能需要额外付款


  • 我也有类似的问题。Docker容器通常是一次性/网关容器,因此人们通常不使用它们来存储文件

    也就是说,您有两种选择:

  • 将路径和文件添加到docker容器,这将导致docker容器的大小过大(不推荐)。Docker构建将需要大量的时间和内存,因为所有文件都将被复制。下面是一个使用docker创建本地ubuntu容器的示例

  • 通过另一台服务器/api托管您的文件,并使用应用程序中的简单请求获取这些文件。我使用了这个解决方案。唯一的警告是你需要 能够以某种方式托管您的文件。这很容易,但可能需要额外付款


  • 你真的不能这么做。正确的方法取决于您试图存储的数据是什么

    如果您只是想将数据存储在某个地方——也许它是MySQL状态集的备份数据——您可以像正常情况一样创建PersistentVolumeClaim。Minikube包括,因此您应该自动创建一个PersistentVolume;您不需要为此进行任何特殊设置。但是,PersistentVolume将位于minikube容器/VM中;如果您完全删除minikube设置,它可能会删除该数据,您将无法直接从主机访问数据

    如果您的容器需要访问主机上的数据集,那么有几种方法可以做到这一点。请记住,在“真正的”Kubernetes集群中,您根本无法访问本地文件系统。如上所述创建一个PersistentVolume,然后运行一个pod将数据复制到其中可能是一种方法;正如@ParmandeepChaddha在中所建议的,将数据烘焙到图像中是另一种合理的方法(如果数据只有几兆字节,这可能非常合理)

    如果数据是进程的输入或输出数据,还可以考虑重构应用程序,以便通过HTTP之类的协议传输数据。在应用程序前面设置NodePort服务,并使用类似于

    curl
    的工具以HTTP方式将数据发布到服务中

    最后,您可以考虑一种设置,其中所有重要数据都是本地的:您在本地系统上有一些批处理文件,作业的目的是将一些本地文件转换为其他本地文件,只是程序在minikube中。(或者,类似地,您正在尝试开发应用程序,并且源文件位于本地系统上。)在这种情况下,Kubernetes作为一个分布式集群容器系统并不是正确的工具。直接在系统上运行应用程序是最好的方法;您可以使用
    docker run-v
    bind mount模拟这种情况,但这很不方便,可能会导致权限和环境问题


    (理论上,你也可以使用
    主机路径
    卷,minikube对它有一些支持。实际上,执行此操作所需的设置与Kubernetes设置的其余部分的组合一样复杂,并且无法移植到任何其他Kubernetes安装中。我不会尝试这样做。)

    你不能真正做到这一点。正确的方法取决于您试图存储的数据是什么

    如果您只是想将数据存储在某个地方——也许它是MySQL状态集的备份数据——您可以像正常情况一样创建PersistentVolumeClaim。Minikube包括,因此您应该自动创建一个PersistentVolume;您不需要为此进行任何特殊设置。但是,PersistentVolume将位于minikube容器/VM中;如果您完全删除minikube设置,它可能会删除该数据,您将无法直接从主机访问数据

    如果您的容器需要访问主机上的数据集,那么有几种方法可以做到这一点。请记住,在“真正的”Kubernetes集群中,您根本无法访问本地文件系统。如上所述创建一个PersistentVolume,然后运行一个pod将数据复制到其中可能是一种方法;正如@ParmandeepChaddha在中所建议的,将数据烘焙到图像中是另一种合理的方法(如果数据只有几兆字节,这可能非常合理)

    如果数据是进程的输入或输出数据,还可以考虑重构应用程序,以便通过HTTP之类的协议传输数据。在应用程序前面设置NodePort服务,并使用类似于

    curl
    的工具以HTTP方式将数据发布到服务中

    最后,您可以考虑一种设置,其中所有重要数据都是本地的:您在本地系统上有一些批处理文件,作业的目的是将一些本地文件转换为其他本地文件,只是程序在minikube中。(或者,类似地,您正在尝试开发您的应用程序,并且源文件位于您的本地系统上。)在本例中,Kubernetes作为一个分布式的cl