我在 GKE 上有一个 Kubernetes 集群。其中,我当前的布局有一个配置了 Horizontal pod autoscaler 的 Pod(worker-pod),它可以根据 BlueMedora 的 BindPlane 在 Stackdriver 上提供的外部指标进行缩放。
自动缩放工作完美,但有时当需要缩减时,Pod 在执行一项永远不会完成的任务时会被耗尽。
该 pod 正在运行一个 Celery 工作者,而作业队列由另一个使用 RabbitMQ 的 Pod 管理,我不确定是在 K8s 端还是 rabbitMQ 端解决这个问题。
我怎样才能避免 HPA 在他执行任务时缩小 pod?
我的吊舱规格(简化):
apiVersion: apps/v1
kind: Deployment
metadata:
name: pod-worker
labels:
component: worker
spec:
selector:
matchLabels:
app: pod-worker
replicas: 1
template:
metadata:
labels:
app: pod-worker
component: worker
spec:
containers:
- name: worker
image: custom-image:latest
imagePullPolicy: Always
command: ['celery']
args: ['worker','-A','celery_tasks.task','-l','info', '-Q', 'default,priority','-c','1', '-Ofair']
resources:
limits:
cpu: 500m
requests:
cpu: 150m
memory: 200Mi
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
restartPolicy: Always
---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: pod-worker
labels:
component: worker
spec:
maxReplicas: 30
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: pod-worker
metrics:
- external:
metricName: external.googleapis.com|bluemedora|generic_node|rabbitmq|cluster|messages
targetAverageValue: "40"
type: External