HPA表示FailedComputeMetricsReplicas

问题描述

我已经部署了一个应用程序并将其作为负载均衡器服务公开。我在部署的Yaml中添加了资源字段,以请求100m cpu。定义了当cpu超过50%时可扩展应用程序的HPA。该应用无法自动缩放,并且cpu利用率始终显示为未知。kubectl describe hpa得到以下结果:

Name:                                                  storyexporter-hpa
Namespace:                                             default
Labels:                                                <none>
Annotations:                                           kubectl.kubernetes.io/last-applied-configuration:
                                                         {"apiVersion":"autoscaling/v2beta1","kind":"HorizontalPodAutoscaler","Metadata":{"annotations":{},"name":"storyexporter-hpa","namespace":"...
CreationTimestamp:                                     Sat,24 Oct 2020 18:23:46 +0530
Reference:                                             Deployment/storyexporter-deployment
Metrics:                                               ( current / target )
  resource cpu on pods  (as a percentage of request):  <unkNown> / 50%
Min replicas:                                          1
Max replicas:                                          3
Deployment pods:                                       1 current / 0 desired
Conditions:
  Type           Status  Reason                   Message
  ----           ------  ------                   -------
  AbletoScale    True    SucceededGetScale        the HPA controller was able to get the target's current scale
  ScalingActive  False   FailedGetResourceMetric  the HPA was unable to compute the replica count: missing request for cpu
Events:
  Type     Reason                        Age                 From                       Message
  ----     ------                        ----                ----                       -------
  Warning  FailedGetResourceMetric       11s (x7 over 103s)  horizontal-pod-autoscaler  missing request for cpu
  Warning  FailedComputeMetricsReplicas  11s (x7 over 103s)  horizontal-pod-autoscaler  invalid metrics (1 invalid out of 1),first error is: Failed to get cpu utilization: missing request for cpu

Kubectl顶部节点命令有效。我部署了一个演示wordpress应用程序,并为其附加了HPA,它显示cpu利用率,而不是未知。

为部署和HPA附加我的Yaml。

apiVersion: v1
kind: Service
Metadata:
  name: storyexporter
  labels:
    app: storyexporter
spec:
  ports:
    - port: 8080
  selector:
    app: storyexporter
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
Metadata:
  name: storyexporter-deployment
spec:
  selector:
    matchLabels:
      app: storyexporter
  replicas: 1
  template:
    Metadata:
      labels:
        app: storyexporter
    spec:
      containers:
      - name: storyexporter
        image: <ImagePath>
        env:
        - name: STORYEXPORTER_MONGO_HOST
          value: storyexporter-mongodb
        - name: STORYEXPORTER_MONGO_USERNAME
          value: admin
        - name: STORYEXPORTER_MONGO_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mongodb-password
              key: password
        - name: STORYEXPORTER_RABBIT_HOST
          value: storyexporter-rabbitmq
        - name: STORYEXPORTER_RABBIT_USERNAME
          value: guest
        - name: STORYEXPORTER_RABBIT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: rabbitmq-password
              key: password
        - name: EXPIRED_RESOURCES_TTL
          value: '3600000'
        - name: CHROMIUM_TIMEOUT_IN_SECONDS
          value: '900'
        - name: CHROMIUM_WINDOW_SIZE
          value: '1920,1020'
        - name: AVG_MB_PER_STORY
          value: '1000'
        - name: CHROMIUM_ATTEMPTS_BEFORE_FAIL
          value: '0'
        - name: JAVA_OPTS
          value: ''
        - name: SKIP_EQS_ROUTING
          value: 'false'
        - name: CHROMIUM_POOL_SIZE
          value: '4'
        - name: DEV
          value: 'true'
        - name: LOCAL
          value: 'true'
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: "100m"
          limits:
            cpu: "200m"
        imagePullPolicy: Always
      imagePullSecrets:
        - name: regcred

HPA YAML

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
Metadata:
  name: storyexporter-hpa
  namespace: default
spec:
  scaleTargetRef:                            
    apiVersion: apps/v1
    kind: Deployment
    name: storyexporter-deployment
  minReplicas: 1
  maxReplicas: 3
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageutilization: 50

解决方法

如果您使用基于多容器的 Pod,则必须为所有容器设置资源(即 CPU 和内存的请求和限制)。

+  resources:
+    requests:
+      cpu: 100m
+      memory: "256Mi"
+    limits:
+      cpu: 200m
+      memory: "512Mi"