3

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

4

3 回答 3

4

我认为您问题的“简单”答案是您需要在 Kubernetes 集群下共享存储,以便每个 pod 访问相同的数据。那么 pod 在哪里运行以及哪个 pod 实际执行服务都无关紧要。

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

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

无论如何,我认为关于 Kubernetes 或任何其他 dockerized 基础设施的存储问题非常有趣。

看起来 google-app-engine 默认不支持在他们的应用程序之间共享数据存储,就像他们在这个SO Question中指出的那样

于 2014-12-19T13:10:14.957 回答
3

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

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

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

于 2014-12-22T19:42:19.417 回答
0

GKE 允许您创建磁盘来存储数据,并且此存储区域可以链接到多个 pod。请注意,您的集群和磁盘必须在同一区域/区域中。

gcloud compute disks create disk1 --zone=zone_name

现在您可以使用此磁盘存储来自 pod 的数据。这是一个使用 disk1 的简单 mongodb replicationcontroller 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 也会存在。

于 2019-02-04T06:23:34.220 回答