Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 如何在Kubernetes吊舱之间共享存储空间?_Docker_Google Cloud Platform_Kubernetes - Fatal编程技术网

Docker 如何在Kubernetes吊舱之间共享存储空间?

Docker 如何在Kubernetes吊舱之间共享存储空间?,docker,google-cloud-platform,kubernetes,Docker,Google Cloud Platform,Kubernetes,我正在评估Kubernetes作为我们新应用程序的平台。现在看来,这一切都非常令人兴奋!但是,我遇到了一个问题:我在GCE上托管集群,需要某种机制在两个POD(持续集成服务器和应用服务器)之间共享存储。对库伯内特斯来说,最好的方法是什么?所有的卷类型似乎都不适合我的需要,因为如果一个pod需要写入磁盘,GCE磁盘就不能共享。NFS将是完美的,但似乎需要kubernetes集群的特殊构建选项 编辑:共享存储似乎是我在使用Kubernetes时多次遇到的问题。有多种使用情形,我只想拥有一个卷并将其连

我正在评估Kubernetes作为我们新应用程序的平台。现在看来,这一切都非常令人兴奋!但是,我遇到了一个问题:我在GCE上托管集群,需要某种机制在两个POD(持续集成服务器和应用服务器)之间共享存储。对库伯内特斯来说,最好的方法是什么?所有的卷类型似乎都不适合我的需要,因为如果一个pod需要写入磁盘,GCE磁盘就不能共享。NFS将是完美的,但似乎需要kubernetes集群的特殊构建选项

编辑:共享存储似乎是我在使用Kubernetes时多次遇到的问题。有多种使用情形,我只想拥有一个卷并将其连接到多个pod(具有写访问权限)。我只能假设这是一个常见的用例,不是吗


EDIT2:例如,描述了如何设置Elasticsearch群集,但无法将其与持久性存储连接(),这使得它变得毫无意义:(

更新:最好的选择可能是云文件存储,这是一个受管理的NFS系统。与只支持上载/下载的GCS不同,它提供对文件的完全随机读/写访问。请参阅文档

原件:
您试过了吗?您甚至可以使用来将其映射为网络磁盘。

如果您希望将日志写入磁盘,我建议您查看logspout。这将收集每个pod的日志,然后您可以使用google云平台全新的日志服务,该服务使用fluentd。这样可以收集每个pod的所有日志到一个地方

如果是通常写入数据库或类似性质的数据,我建议在运行数据库的kubernetes集群之外有一个单独的服务器

编辑


为了在pod之间共享文件,我建议在kubernetes群集中的每个节点上安装一个google云存储驱动器,然后将其设置为每个pod中的一个卷,装载到节点上装载的目录,而不是直接装载到驱动器。将其装载到每个节点是好的,因为pod不会在指定的节点上运行,所以最好是这样在这种情况下将其集中。

NFS是一个内置的卷插件,支持多个pod编写器。没有特殊的构建选项可以让NFS在Kube中工作


我在Kubernetes上的Red Hat工作,主要关注存储。

@Marco-关于Maven相关的问题,我的建议是不要将其视为集中存储问题,而可能将其视为服务问题


我过去在HTTP下运行过Maven存储库(只读),我只需创建一个Maven repo,并在Apache/Nginx上在自己的pod(docker容器)中公开它您只需要使用该pod所需的专用存储,然后使用服务发现将其链接到您的应用程序并构建系统。

回答这个问题有点晚了,但根据我对Kubernetes/MSA的经验,这里的问题更多地存在于您的设计模式中。基本设计模式之一仍在继续出现在MSA中,通常是服务的适当封装,其中也包括其数据

您的服务应该关注与其关注领域相关的数据,并且与OOP非常相似,应该允许其他服务通过接口(API、PUBSUB消息等)访问此数据。多服务访问数据是一种反模式,类似于OOP中的全局变量

我认为谷歌也有同样的观点,这就是为什么Kubernetes是以这种方式成立的


例如,如果您希望在何处写入日志,您应该拥有一个日志服务,每个服务都可以调用该服务,并提供它需要记录的相关数据。直接写入共享磁盘意味着您需要更新每个容器,如果您更改日志目录结构等,或者决定添加额外功能,如错误电子邮件。

你看过kubernetes吗?你可能在看创建一个gcePersistentDisk

gcePersistentDisk卷装载Google计算引擎(GCE) 将永久磁盘放入pod中。与emptyDir不同,emptyDir会在 Pod被移除,PD的内容物被保留,并且体积被减小 只是卸载。这意味着PD可以预先填充数据, 这些数据可以在吊舱之间“传递”。重要提示:您必须 使用gcloud或GCE API或UI创建PD,然后才能使用它 使用gcePersistentDisk时有一些限制:节点 运行POD的必须是GCE虚拟机,这些虚拟机必须位于 与PD相同的GCE项目和区域PD的一个特点是它们可以 由多个使用者同时以只读方式安装。此 这意味着您可以使用数据集预先填充PD,然后提供服务 它可以从您需要的任意多个吊舱中并行运行。不幸的是,PDs可以 只能由单个耗电元件在读写模式下安装-否 允许同时写入程序。在由 除非PD为只读或 副本计数为0或1


要支持从各种pod进行多次写入,您可能需要创建一个beefy pod,该pod公开thrift或socket类型服务,该服务公开readFromDisk和WriteToDisk方法。

谷歌最近发布的云文件存储,这里有一个教程:


在某些情况下,可能是云存储/存储桶的良好替代方案。

首先,Kubernetes没有在主机之间共享存储的集成功能。下面有几个选项。但首先,如果您已经设置了一些卷,如何共享存储

要在多个POD之间共享卷,您需要创建一个访问模式为ReadWriteMany的PVC

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
    name: my-pvc
spec:
    accessModes:
      - ReadWriteMany
    storageClassName: myvolume
    resources:
        requests:
            storage: 1Gi
之后,您可以将其装载到多个吊舱:

apiVersion: v1
kind: Pod
metadata:
  name: myapp1
spec:
  containers:
...
      volumeMounts:
        - mountPath: /data
          name: data
          subPath: app1
  volumes:
    - name: data
      persistentVolumeClaim:
        claimName: 'my-pvc'
---
apiVersion: v1
kind: Pod
metadata:
  name: myapp2
spec:
  containers:
...
      volumeMounts:
        - mountPath: /data
          name: data
          subPath: app2
  volumes:
    - name: data
      persistentVolumeClaim:
        claimName: 'my-pvc'
当然,持久卷必须可以通过网络访问。否则,您需要创建一个持久卷
volumes:
      - name: store-folder
        persistentVolumeClaim:
          claimName: [pvc_name]
volumeMounts:
        - name: store-folder
          mountPath: "/stored-files"
containers:
....
      - env:
        - name: any-property-used-inside-the-application-for-saving-files
          value: /stored-files