1

我正在寻找在同一节点上的 pod 之间共享只读内存缓存的任何现有实现。这种设置将允许快速访问,而无需将整个缓存加载到每个 pod 内存中。

示例:1GB 查找字典保持最新,每个 pod 都具有对数据的读取访问权限,从而允许快速查找而无需有效地将数据克隆到内存中。所以最终结果将是节点上仅使用 1GB 内存,而不是 1GB * N(pod 数量)

k8s的想象解决方案:

  1. 具有 tmpfs 卷 RW 的单个(守护进程)pod,维护最新的缓存数据
  2. 具有相同 tmpfs 卷 R(only) 的多个 pod,映射数据文件以读取数据
    1. 自然地读出值并对其进行操作预计会产生传递内存使用

笔记:

  • 我发现了多个关于 pod 之间的卷共享的条目,但没有针对上述内容的完整解决方案参考
  • tmpfs 是 R/W 缓存速度的理想选择,但显然它可以超过常规 fs
  • 寻找可以是特定语言或不可知论的解决方案以供参考
    • 特定语言将利用特定语言将文件数据映射为字典/其他 KV 查找
    • 语言不可知和更通用的解决方案可以使用sqlite,在我们这里的例子中,进程是 pod
4

1 回答 1

0

您可以使用hostIPC和/或hostPath安装在 上tmpfs,但这会带来一系列问题:

  1. hostPath本身会带来安全风险,并且在使用时,应仅限于所需的文件或目录,并以只读方式挂载。它还附带一个警告,即不知道谁会为内存“收费”,因此必须配置每个 pod 以便能够吸收它,这取决于它是如何编写的。它也可能“泄漏”到根命名空间并被收费给任何人,但显示为“开销”
  2. hostIPCPod 安全策略 的一部分,自1.21起已弃用,未来将被删除

一般来说,最好的想法是使用Redis,它是此类场景中最常用的工具之一。

于 2022-01-19T15:02:41.380 回答