我们有一个服务(德鲁伊历史记录)的状态集,它缓存了大量本地SSD上的数据。(我们使用污染和亲和力在SSD中运行每个节点一个荚。)当我们需要替换底层机器时,这意味着荚从空的本地磁盘开始,然后需要一段时间才能重新填充它们的缓存。理想情况下,我们只想做计划中的节点替换(例如,GKE节点池升级)一次一个节点,并等待直到新节点上的吊舱完全填满它的缓存,然后推出下一个节点。
好的,这意味着我们需要设置一个1的PodDisruptionBudget,并设置就绪探测,以使新节点在缓存被填充之前没有准备好。
问题是:这个系统并没有真正为我们提供一个很好的方式来问这个问题:“pod X下载了所有它需要的东西才能使整个系统完全复制”。
我们要问的是,“整个制度是否完全复制?”
因此,我们很想写一份准备度调查报告,上面写着“除非整个系统被完全复制,否则没有准备好”。但这意味着,在节点池升级(或其他具有短暂“未完全复制”状态的短时间)期间,状态集中的将成为未准备好的。
我的问题是:我并不真正理解k8s中咨询就绪状态的每个部分的全部含义。如果党卫军中的每个吊舱都没有准备好,而单个吊舱正在“装载”,那会不会很糟糕呢?
我的理解是,就绪是用于控制部署或StatefulSet推出的速度(这里很好),而且它还用于让服务确定路由到哪个吊舱。在这种情况下,我们实际上不使用与StatefulSet相关联的服务进行路由(客户端直接连接到单个荚)。所以这看起来真的很好。但这是吗?或者,是否还有其他就绪状态的应用程序会使我们在全局复制不是100%的情况下将所有的豆荚标记为未准备好?
发布于 2019-07-19 01:23:10
我不能回答您关于Kubernetes准备状态探测器的一般含义的问题,但我碰巧非常了解您的应用程序(Druid)。
我相信你的假设是错误的。您说无法询问单个历史节点关于从深度存储加载段的状态,但实际上存在这样一个API:
/druid/historical/v1/readiness
以及相关的/druid/historical/v1/loadstatus
如本文所述:https://druid.apache.org/docs/latest/operations/api-reference.html
https://stackoverflow.com/questions/53526075
复制