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