首页 > 解决方案 > Kubernetes HPA 在缩减期间杀死随机 pod | 无论如何,为了避免杀死一个随机的 pod,而不是去使用低利用率的 pod

问题描述

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

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 一起使用。

标签: kubernetesgoogle-kubernetes-enginedevopsautoscaling

解决方案


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


推荐阅读