Kubernetes HPA 在缩容期间杀死随机 pod |无论如何,为了避免杀死一个随机的 pod 而不是使用低利用率的 pod

Kubernetes HPA kills random pod during scale down | anyway to avoid killing a random pod rather go for pod with low utilization

我已经部署了 HPA 来监控内存和 CPU,我们的应用程序不够健壮,无法处理当 pod 在缩减期间崩溃或终止时终止任务的故障,需要手动干预重新启动任务数据丢失,需要很多努力。我环顾四周是否有办法在触发终止信号之前发送触发器命令发送和接收。我看到了 prestop 钩子,但不确定我如何才能让它发挥作用。是否有可能在缩小期间发送 kill 信号之前触发预停止挂钩,其中 运行 通过监视 pod 中的脚本并在 CPU 或 mem 达到一定数量时将信号发送回 kubernetes 然后 kubernetes发送 kill 信号以启动关机过程。任何 help/suggestions.?

NAME                                      REFERENCE                             TARGETS             MINPODS   MAXPODS   REPLICAS   AGE
horizontalpodautoscaler.autoscaling/hpa   Deployment/task-deployment1   545%/85%, 1%/75%            2         5         5          36h

下面是 hpa 清单文件

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa
  namespace: namespace-CapAm
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: task-deployment1
  minReplicas: 2
  maxReplicas: 5
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 75
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 85

我们将无法使用 promotheus,因为它不受坚定支持,我们被建议将 HPA 与 Mem 和 CPU 一起使用。

HPA 不会杀死(删除)Pod,它会扩展 Deployment,而 Deployment 又会扩展底层 ReplicaSet。所以 Pod 删除是由 RS 规模变化触发的。这使得 the.process 不知道缩放 was.in 是否与 HPA 有任何关系。您应该以一种可以删除部署中的任何 Pod 的方式编写您的应用程序,并使其优雅地处理正常关闭。