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)