我们有一个服务的状态集(德鲁伊历史记录),该服务在本地SSD上缓存了很多数据。 (我们使用污点和相似性在SSD中的每个节点上运行一个Pod。)当我们需要更换底层计算机时,这意味着Pod从空的本地磁盘启动,然后需要一段时间来重新填充其缓存。理想情况下,我们只希望一次有计划地替换节点(例如,GKE节点池升级)一次,然后等到新节点上的Pod完全填满其缓存后再推出下一个节点。
好的,这意味着我们需要将PodDisruptionBudget设置为1,并设置“就绪”探针,以使新节点在缓存被填满之前未准备就绪。
问题是:系统并没有真正为我们提出一个很好的方式来问这个问题:“ Pod X是否下载了所有必需的东西,才能使整个系统完全复制。”
我们要问的是“整个系统是否已完全复制?”。
因此,我们很想编写一个Readiness探针,说“除非完整地复制整个系统,否则还没有准备好”。但这意味着在节点池升级(或其他短暂的短暂的“未完全复制”状态)期间,有状态集中的每个吊舱都将无法就绪。
我的问题是:我并不真正了解k8涉及“就绪”状态的每个部分的全部含义。如果单个吊舱正在“装载”,SS中的每个吊舱都准备就绪,那会很糟糕吗?
我的理解是,就绪状态用于控制Deployment或StatefulSet推出的速度(在这里很好)之类的东西,并且还用于让服务确定要路由到哪个Pod。在这种情况下,我们实际上并没有使用与StatefulSet关联的Service进行路由(客户端直接连接到各个Pod)。因此看来这实际上可能很好。但是吗?还是还有其他处于“就绪”状态的应用程序会使我们将所有Pod标记为“未就绪”,而全局复制不是100%呢?
答案 0 :(得分:0)
我无法回答有关Kubernetes准备就绪调查的一般含义的问题,但是我碰巧非常了解您的应用程序(德鲁伊)。
我相信您的假设是错误的。您说没有办法询问单个历史节点有关深度存储中分段加载的状态,但是实际上有这样的API:
/druid/historical/v1/readiness
以及相关的
/druid/historical/v1/loadstatus
如此处所述:https://druid.apache.org/docs/latest/operations/api-reference.html