我有一个 Kubernetes 部署,可以有多个副本 Pod。我希望根据 python 应用程序中的某些逻辑(而不是 hpa 中的自定义指标)水平增加和减少 pod。
我有两种方法:
以上两件事都适用于高档和低档。
但是,当我缩小规模时,我想删除一个特定的 Pod,而不是任何其他 Pod。
如果我更新 HPA 中的 minReplicas maxReplicas,那么它会随机删除一个 pod。 当我更新部署中的 /spec/replicas 字段时也是如此。
如何在缩小规模的同时删除特定的 Pod?
我不知道有什么方法可以确保在缩减规模期间删除 ReplicaSet 中的特定 pod。您可以使用 StatefulSet 来实现此行为,它始终会在缩小规模时删除最后一个 pod。
例如,如果我们有一个 StatefulSet foo 缩放为 3,我们将拥有 pod:
如果我们将 StatefulSet 缩放为 2,控制器将删除 foo-2。但请注意,StatefulSet 还有其他限制需要注意。
实现此目的的一种方法是向您的 pod 发送消息(或使用其他标准,例如让 POD 在 x 小时后或基于某些条件响应未就绪),以便 pod 在某个时间段内返回未就绪消息活性健康检查。这将阻止请求发送到您的 Pod。它也将在缩小规模的选择列表中名列前茅,HPA 决定是时候缩小规模或者是否诱导缩小规模。