由复制控制器控制并“隐藏”在 Kubernetes 服务背后的 Pod 如何写入/读取数据?如果我有一个应用程序从需要持久化的用户那里接收图像,我在哪里存储它?由于前面的服务,如果我使用卷,我无法控制它存储在哪个节点。
3 回答
我认为您问题的“简单”答案是您需要在 Kubernetes 集群下共享存储,以便每个 pod 访问相同的数据。那么 pod 在哪里运行以及哪个 pod 实际执行服务都无关紧要。
另一个解决方案可能是Flocker,他们简短地描述了自己:
Flocker 是一个数据卷管理器和多主机 Docker 集群管理工具。有了它,您可以利用 Linux 上 ZFS 的强大功能,使用用于无状态应用程序的相同工具来控制数据。
无论如何,我认为关于 Kubernetes 或任何其他 dockerized 基础设施的存储问题非常有趣。
看起来 google-app-engine 默认不支持在他们的应用程序之间共享数据存储,就像他们在这个SO Question中指出的那样
如果您在 Google Compute Engine 中运行,则可以使用绑定到 pod 并随 pod 移动的 Compute Engine 永久磁盘(网络附加存储):
https://kubernetes.io/docs/concepts/storage/volumes/#gcepersistentdisk
我们希望支持其他类型的网络附加存储(iSCSI、NFS 等),但我们还没有机会构建它们。欢迎请求请求!;)
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 也会存在。