在Kubernetes集群中存储数据的位置

时间:2014-12-18 18:23:41

标签: java google-app-engine java-ee docker kubernetes

由复制控制器控制并在Kubernetes中的服务后面“隐藏”的pod如何写入/读取数据?如果我有一个应用程序从用户那里收到需要保留的图像,我该在哪里存储它?由于前面的服务,如果我使用卷,我无法控制它存储在哪个节点。

3 个答案:

答案 0 :(得分:4)

我认为您问题的“简单”答案是您需要在Kubernetes集群下共享存储,以便每个pod访问相同的数据。然后,pod正在运行的位置以及哪个pod实际执行服务并不重要。

可能是另一种解决方案Flocker,他们简要地描述了自己:

  

Flocker是一个数据卷管理器和多主机Docker集群管理工具。有了它,您可以使用与无状态应用程序相同的工具来控制数据,方法是利用Linux上ZFS的强大功能。

无论如何,我认为Kubernetes或任何其他码头化基础设施上的存储问题非常有趣。

默认情况下,google-app-engine不支持在他们的应用之间共享数据存储,就像他们在SO Question

中指出的那样

答案 1 :(得分:3)

如果您在Google Compute Engine中运行,则可以使用绑定到窗格的计算引擎永久磁盘(网络附加存储),并随窗格移动:

https://kubernetes.io/docs/concepts/storage/volumes/#gcepersistentdisk

我们希望支持其他类型的网络附加存储(iSCSI,NFS等),但我们还没有机会构建它们。拉请求欢迎! ;)

答案 2 :(得分:0)

GKE允许您创建用于存储数据的磁盘,并且该存储区域可以链接到多个Pod。请注意,群集和磁盘必须位于相同的区域/区域中。

gcloud compute disks create disk1 --zone=zone_name

现在您可以使用此磁盘来存储来自pod的数据。 这是一个使用disk1的简单mongodb复制控制器yaml文件。这可能不是一种有效的方法,但它是我所知道的最简单的方法。

apiVersion: v1
kind: ReplicationController
metadata:
  labels:
    name: mongo
  name: mongo-controller
spec:

 replicas: 1
  template:
    metadata:
      labels:
        name: mongo
    spec:
      containers:
      - image: mongo
       name: mongo
        ports:
        - name: mongo
          containerPort: 27017
          hostPort: 27017
        volumeMounts:
            - name: mongo-persistent-storage
              mountPath: /data/db
      volumes:
        - name: mongo-persistent-storage
          gcePersistentDisk:
            pdName: disk1
            fsType: ext4

即使您的Pod被删除或更换,磁盘1也将存在。