[FIXED] In AWS EKS konnte HPA (Horizontal-Pod-Autoscaler) keine CPU-Auslastung abrufen

Ausgabe

Um Kubernetis zum ersten Mal als Backend-Entwickler eines Startups anzuwenden, habe ich nach dem EKS-Leitfaden von AWS gesucht und ein gutes Dokument gefunden und es befolgt.

Der Link zur Anleitung lautet wie folgt.
https://aws-eks-web-application.workshop.aws/en/10-intro.html

Hier habe ich mit dem Start mit einer AWS-Kontomethode auf 2-1 fortgefahren und alle vorherigen Optionen weggelassen.

ex. 5-2. (Optional) Konsolenanmeldeinformationen hinzufügen

Im ersten Versuch haben wir den Prozess mit Option weitergeführt, weil wir in der Bewerbungsphase immer wieder gescheitert sind und neue Dinge ausprobieren.

Alle Prozesse waren einfach bis “10-1. Stufe HPA anwenden”.

Als ich jedoch den HPA-Status über den Befehl kubectl get hpa überprüfte, wurde die CPU-Auslastung als unbekannt markiert.

Die Anleitung sagte, wenn Sie es etwas später versuchen, wird es richtig herauskommen, also habe ich es eine Stunde später versucht, aber es war dasselbe.

Als ich also den Status über den Befehl kubectl describe hpa überprüfte, stellte ich fest, dass ein Fehler aufgrund der fehlenden CPU-Anforderung wie unten beschrieben aufgetreten war.

Name:                                                  demo-flask-backend-hpa
Namespace:                                             default
Labels:                                                <none>
Annotations:                                           <none>
CreationTimestamp:                                     Tue, 14 Sep 2021 09:03:53 +0000
Reference:                                             Deployment/demo-flask-backend
Metrics:                                               ( current / target )
  resource cpu on pods  (as a percentage of request):  <unknown> / 30%
Min replicas:                                          1
Max replicas:                                          5
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: failed to get cpu utilization: missing request for cpu
Events:
  Type     Reason                        Age   From                       Message
  ----     ------                        ----  ----                       -------
  Warning  FailedGetResourceMetric       5s    horizontal-pod-autoscaler  failed to get cpu utilization: missing request for cpu
  Warning  FailedComputeMetricsReplicas  5s    horizontal-pod-autoscaler  invalid metrics (1 invalid out of 1), first error is: failed to get cpu utilization: missing request for cpu

Um dieses Problem zu lösen, haben wir auf viele Arten gesucht, aber wir haben keine passende Lösung gefunden, weil wir noch wenig Wissen über Kubernetis haben.

Die bisher erstellten Yaml-Einstellungsdateien lauten wie folgt.

Alle in der Bashshell verwendeten Anweisungen folgten der Anleitung, und es gab keine kritischen Fehler außer veralteten Fehlern.

Wie könnte ich diesen Fehler beheben?


Flask-hpa.yaml

---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: demo-flask-backend-hpa
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: demo-flask-backend
  minReplicas: 1
  maxReplicas: 5
  targetCPUUtilizationPercentage: 30

Flask-Bereitstellung.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-flask-backend
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo-flask-backend
  template:
    metadata:
      labels:
        app: demo-flask-backend
    spec:
      containers:
        - name: demo-flask-backend
          image: $ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/demo-flask-backend:latest
          imagePullPolicy: Always
          ports:
            - containerPort: 8080
          resources:
            requests:
              cpu: 250m
            limits:
              cpu: 500m

ingress.yaml

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: "backend-ingress"
  namespace: default
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
spec:
  rules:
    - http:
        paths:
          - path: /contents
            pathType: Prefix
            backend:
              service:
                name: "demo-flask-backend"
                port:
                  number: 8080
          - path: /services
            pathType: Prefix
            backend:
              service:
                name: "demo-nodejs-backend"
                port:
                  number: 8080
          - path: /
            pathType: Prefix
            backend:
              service:
                name: "demo-frontend"
                port:
                   number: 80

Lösung

HPA arbeitet mit den Metrics-Serverdaten, um POD zu skalieren oder nicht.

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

Installation: https://docs.aws.amazon.com/eks/latest/userguide/metrics-server.html

In AWS müssen Sie es zuerst installieren, was in GKE standardmäßig bereits installiert ist.

https://aws.amazon.com/premiumsupport/knowledge-center/eks-metrics-server/

Sie können überprüfen, ob der Metrikserver läuft oder nicht verwendet wird

kubectl top pods

Wenn die Ausgabe mit der Ressourcennutzung erfolgt, ist Ihr Metrikserver betriebsbereit, es gibt ein anderes Problem mit HPA.


Beantwortet von –
Harsh Manvar


Antwort geprüft von –
Gilberto Lyons (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like

[FIXED] Session-Manager-Plugin auf Amazon Linux 2 nicht gefunden

Ausgabe Folgen Sie den Dokumenten zur Installation des Session-Manager-Plugins: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html Auf Amazon Linux 2: curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/session-manager-plugin.rpm" -o "session-manager-plugin.rpm"…