我是Kubernetes的noobie,所以如果这是一个基本问题,我深表歉意-我试图对这种神奇的技术有一个很好的了解。
比方说,我在Pod上进行了一些处理,并且有一些变量和数组。现在,我将承受沉重的负担,并且将分配/复制一个新的吊舱-现在,我有2个吊舱而不是1个吊舱来处理我的货物。第二个Pod的内存将如何处理? Pod 2是否使用相同的内存内容复制?会共享内存吗?如果我的微服务之间存在某种通信,需要内存保持一致,换句话说,存在一些变量相关性,那么复制具有新鲜内存的Pod将会带来灾难性的后果。为了澄清起见,让我们说在一个吊舱上有一个关键的价值图。复制了一个Pod,然后有两个键值映射(一个在pod1上,另一个在pod2上)。但是我们想要一个键值映射,其中包含这两个Pod之间共有的所有数据-跨复制的Pod的共享键值映射-而不是两个孤立的键值映射。
当然,我想一种解决方案是拥有一个共享的中央数据库供参考。但这对于我们只想共享几百个元素的数组来说是一个巨大的开销! Kubernetes处理此问题的方法是什么?
答案 0 :(得分:0)
@Zeruno也许我在这里大声思考,但是如果您使用现有的etcd
集群作为应用程序的键值存储会怎么办
自从它已经存在并由K8s自己进行维护以来,没有任何维护费用 在分布式集群模式下也是如此。
这可能是一个存储点,该集群中的所有Pod都可以访问它。
答案 1 :(得分:0)
在解决有关第二个窗格的内存的问题时,第二个pod将被分配一个新的内存。
在解决有关新容器的复制内存内容的问题时,将根据容器规格复制所有新容器。
解决有关Pod之间共享内存的问题,没有Pod之间不共享内存。如果要在Pod之间共享元素,则需要确保它在容器规范中,例如volume或environment variables。
为解决有关键值的问题,如果您正在寻找存储解决方案,则可以考虑使用卷1,2。如果您只是想将一些键值传递给Pod,则可以考虑使用configmaps。
1 https://kubernetes.io/docs/concepts/storage/persistent-volumes/
答案 2 :(得分:0)
您提出的解决方案有时是适当的,但我只会使用> 1GB的共享数据。对于您的“几百个元素的阵列”,我将在PVC(卷)上使用文件监视程序,但是我的群集具有用于共享存储的快速SSD阵列,如果您在传统磁盘或磁盘上运行,我不建议这样做。传统SAN。
也就是说,截至2020-04-28,尚未在Kubernetes中实现> 1GB的共享内存。参见https://github.com/kubernetes/kubernetes/issues/28272。
我对这个线程的阅读是,今天Kube将共享内存限制为64MB。如果您的数据集很小,您可以足够快地读取共享存储中的更改(我猜是200ms-3sec)。如果您需要更快的速度,我建议您今天使用一种缓存服务:禁用持久性或Redis的Redis或memcached等,并在实施问题28272时重新考虑共享内存。