有没有办法在没有持久性的情况下在 pod 之间共享文件?
对于持久性,我只需使用< code > read write many < code > access mode 并将其安装到某个位置:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: some-sc
resources:
requests:
storage: 1Gi
我需要在没有PVC的情况下做这样的事情,或者使用使用存储类的PVC,它只是通过仅使用内存来模拟持久性。
我可以用一个不同的pod来解决这个问题,它通过使用K8s api来重新分发文件。< br >但是我觉得对于这样一个简单的任务来说,这有点让人不知所措。
编辑:使用< code>configmap是不可能的,因为该文件应该是可写的。
发布了社区维基,以便通过通用解决方案提高可见性,因为没有提供更多详细信息。随意扩展它。
正如@DavidMaze在评论中提到的:
我认为真的没有办法做到这一点(如果没有 PVC 声明,吊舱怎么知道要安装什么?如果它们位于不同的节点上,它们将如何共享内存?
在Kubernetes中,如果没有持久性,就不可能在pods之间共享文件。
如果您想在同一个pod中的容器之间共享存储,可以查看emptyDir卷。它可以使用内存(tmpfs)系统:
根据您的环境,emptyDir
卷存储在支持节点的任何介质上,如磁盘、SSD或网络存储。但是,如果您将emptyDir.media
字段设置为“Memory”
,Kubernetes将为您安装tmpfs(RAM支持的文件系统)。虽然tmpfs非常快,但请注意,与磁盘不同,tmpfs在节点重新启动时被清除,您写入的任何文件都将计入容器的内存限制。
正如@DavidMaze在他的评论中提到的,如果你的应用能够通过HTTP传递内容,你可以使用消息队列:
您的应用程序是否可以通过HTTP传递内容,或者使用RabbitMQ之类的消息队列,而不是依赖文件系统?
检查RabbitMQ和Apache Kafaka。
另请查看本主题,其中包含有关在 Pod 之间共享存储(但具有持久性)的不同答案/解决方案。