【问题标题】:Kubernetes share files among pods without persistenceKubernetes 在 Pod 之间共享文件,无需持久化
【发布时间】:2021-12-24 00:38:52
【问题描述】:

有没有办法在 pod 之间共享文件而无需持久化?

有了持久性,我只需使用 ReadWriteMany accessMode 并将其挂载到某个地方:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
  - ReadWriteMany
  storageClassName: some-sc
  resources:
    requests:
      storage: 1Gi

我需要在没有 PVC 或 PVC 使用存储类的情况下执行类似的操作,该存储类仅通过仅使用内存来模拟持久性。

我可以通过使用 K8s api 重新分发文件的不同 pod 来解决这个问题。
但是对于这样一个简单的任务,我觉得有点不知所措。

编辑:使用configmap 是没有问题的,因为该文件应该是可写的。

【问题讨论】:

  • 您使用的是哪个 Kubernetes 版本?
  • @MikolajS。 1.19.7
  • 我认为没有真正的方法可以做到这一点(如果没有 PVC 声明,Pod 怎么知道要挂载什么?如果它们在不同的节点上,它们将如何共享内存?)。您的应用程序能否通过 HTTP 传递内容,或者使用 RabbitMQ 之类的消息队列,而不是依赖文件系统?
  • 这能回答你的问题吗? How to share storage between Kubernetes pods?
  • 嗨@beatrice,有进展吗?您是否考虑过实现消息队列?

标签: kubernetes


【解决方案1】:

已发布社区 wiki,以提高通用解决方案的可见性,因为没有提供更多详细信息。随意扩展它。


正如@DavidMaze 在他的评论中提到的那样:

我不认为真的有办法做到这一点(如果没有 PVC 声明,pod 怎么知道要挂载什么?如果它们位于不同的节点上,它们将如何共享内存?)

在 Kubernetes 中没有这种可能性,可以在没有持久性的情况下在 pod 之间共享文件。

如果您想在同一 pod 中的容器之间共享存储,您可以查看emptyDir volume。它可以使用内存(tmpfs)系统:

根据您的环境,emptyDir 卷存储在支持节点的任何介质上,例如磁盘或 SSD,或网络存储。但是,如果您将emptyDir.medium 字段设置为"Memory",Kubernetes 会为您安装一个 tmpfs(RAM 支持的文件系统)。虽然 tmpfs 非常快,但请注意,与磁盘不同,tmpfs 在节点重新启动时会被清除,并且您写入的任何文件都将计入容器的内存限制。

正如@DavidMaze 在他的评论中提到的,如果您的应用能够通过 HTTP 传递内容,您可以使用消息队列:

您的应用程序能否通过 HTTP 传递内容,或者使用 RabbitMQ 之类的消息队列,而不是依赖文件系统?

检查RabbitMQ 和Apache Kafaka。

还请查看this topic,了解有关在 pod 之间共享存储(但具有持久性)的不同答案/解决方案。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-09-15
  • 2019-10-26
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 2022-06-24
  • 2019-09-12
  • 2022-12-19
相关资源
最近更新 更多