首页 > 解决方案 > GKE 自动缩放器在无限循环中覆盖我的 Horizo​​ntalPodAutoscaler

问题描述

我在 GCP 上拥有一个 GKE 集群,我有 1 个节点池和 1 个节点(4 个 CPU/16Gb RAM)。

今天我尝试将我的一个应用程序扩展到 10 个副本(我们希望在其上运行大量并发请求)。

我首先编辑了我的horizontalPodAutoscaler.yamlmaxReplicas从 5 更改为 50 和minReplicas从 1 更改为 10。

然后我从3到10进行了编辑deployment.yaml和修改。spec.replicas

现在我的部署陷入了一个循环:它尝试部署 10 个 Pod,一旦 10 个准备就绪,它就会杀死其中的 5 个以返回到 5 个,无限循环。

这是循环期间自动缩放器状态的屏幕截图,就像它尝试应用 1 个配置并且立即配置被另一个配置覆盖。

在此处输入图像描述

在此处输入图像描述

这是我正在使用的配置文件:

水平PodScheduler.yaml

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  labels:
    app: my-app
    env: production
  name: my-app-hpa
  namespace: production
spec:
  maxReplicas: 50
  metrics:
    - resource:
        name: cpu
        targetAverageUtilization: 80
      type: Resource
  minReplicas: 10
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app

部署.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: my-app
    env: production
  name: my-app
  namespace: production
spec:
  replicas: 10
  selector:
    matchLabels:
      app: my-app
      env: production
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: my-app
        env: production
    spec:
      nodeSelector:
        cloud.google.com/gke-nodepool: my-pool
      containers:
        - image: gcr.io/my_project_id/github.com/my_org/my-app
          imagePullPolicy: IfNotPresent
          name: my-app-1
          resources:
            requests:
              cpu: "50m"

标签: kubernetesgoogle-cloud-platformgoogle-kubernetes-enginekubernetes-hpa

解决方案


推荐阅读