本文介绍了在Kubernetes/OpenShift中将客户端-服务器流量保持在同一区域的最佳方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们运行的是Kubernetes兼容(OKD 3.11)的本地/私有云集群,后端应用程序与用作缓存和K/V存储的低延迟Redis数据库进行通信。新的架构设计即将在两个地理位置分散的数据中心(地区和地区)之间平均分配工作节点。我们可以假设节点名称和区域之间存在静电配对,现在我们还添加了带有区域名称的节点标签。

要保护与内存中数据库的低延迟通信,使客户端应用程序与允许它们使用的数据库保持在同一区域,推荐的方法是什么?旋转数据库的其他副本是可行的,但不会阻止两个区域之间的循环路由.

相关:Kubernetes node different region in single cluster

推荐答案

因此,有效的区域固定解决方案比仅在首选版本中使用nodeAffinity复杂得多。单单这一点就会给您带来很多不可预知的惊喜,因为Kubernetes的固执己见的性格让区域传播是硬编码的,如Github issue所示,他们显然试图将至少一些鸡蛋放在另一个篮子里,并将区域选择视为一种反模式。

在实践中,仅有nodeAffinity的用处仅限于具有非常有限数量的Pod副本的方案,因为当Pod数量超过区域中的节点数量时(即,通常对于2节点/2区域设置中的第三个副本),计划程序将启动&q;校正&q;或&q;战斗&q;,并且用户首选项权重(即使是100:1的不平衡)非常有利于传播,放置至少一个&q;代表每个区域的每个节点上的Pod(包括权重最小为1的非首选节点)。

但是,如果您创建将充当&q;主&或&q;锚&q;(数据库是一个自然示例)的单一副本容器,则可以克服此默认区域扩散问题。对于此单Pod&Quot;Master&Quot;nodeAffinity仍将正常工作-当然,在HA变体中,即&Quot;首选&Quot;而不是&Quot;Required&Quot;版本。对于其余的多Pod应用程序,您可以使用其他内容-podAffinity(这次是在";Required";版本中),这将使";从&pod在区域之间跟随其";master";,因为设置任何基于Pod的传播都会禁用默认区域传播。您可以拥有任意数量的";从属&pod的副本,并且永远不会遇到单个放错位置的pod(至少在计划时间内),因为";必需";关联用于";从属&pod;。请注意,nodeAffinity的已知限制也适用于此:";master";pod副本的数量不得超过区域中的节点数,否则";区域扩展";将生效。

下面是如何为podAffinity和使用部署配置YAML文件正确标记";master";pod的示例:https://stackoverflow.com/a/70041308/9962007

这篇关于在Kubernetes/OpenShift中将客户端-服务器流量保持在同一区域的最佳方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 03:13