kubernetes - 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 一起使用。
解决方案
HPA 不会杀死(删除)Pod,它会扩展 Deployment,进而扩展底层 ReplicaSet。所以 Pod 删除是由 RS 规模变化触发的。这使得.process 不知道缩放是否以任何方式与 HPA 相关。您应该以可以删除部署中的任何 Pod 的方式编写您的应用程序,并使其正常处理正常关闭。
推荐阅读
- django - ReactJS (create-react-app) 和 Django 后端 - 处理身份验证的最佳方式?
- laravel - 从数据透视表 laravel 中删除一个条目
- sqlite - 如何在 Swift 中通过 SQLite 获取前一天
- jquery - 网格的列调整大小在剑道网格的最后一列留下空白
- django - 发生模板不存在错误
- python - 使用 python 更新 accessdb 时出错
- variables - Snakemake:如何在同一调用的多个实例中维护一个类似蛇的实例值
- corda - 如何在 Corda 流中创建随机数生成?
- android - AdMob 广告在发布应用中不时停止工作
- android - 我们应该在 targetSDK 28 中使用什么支持库版本?