Kubernetes HPA на AKS не работает с ошибкой `` отсутствует запрос на процессор ''
Я пытаюсь настроить HPA для своего кластера AKS. Ниже приведен файл манифеста Kubernetes:
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.cmd: XXXXXX\tools\kompose.exe
convert
kompose.version: 1.21.0 (992df58d8)
creationTimestamp: null
labels:
io.kompose.service: loginservicedapr
name: loginservicedapr
spec:
replicas: 1
selector:
matchLabels:
io.kompose.service: loginservicedapr
strategy: {}
template:
metadata:
annotations:
kompose.cmd: XXXXXX\kompose.exe
convert
kompose.version: 1.21.0 (992df58d8)
creationTimestamp: null
labels:
io.kompose.service: loginservicedapr
spec:
containers:
image: XXXXXXX.azurecr.io/loginservicedapr:latest
imagePullPolicy: ""
name: loginservicedapr
resources:
requests:
cpu: 250m
limits:
cpu: 500m
ports:
- containerPort: 80
resources: {}
restartPolicy: Always
serviceAccountName: ""
volumes: null
status: {}
---
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: XXXXXXXXXX\kompose.exe
convert
kompose.version: 1.21.0 (992df58d8)
creationTimestamp: null
labels:
io.kompose.service: loginservicedapr
name: loginservicedapr
spec:
type: LoadBalancer
ports:
- name: "5016"
port: 5016
targetPort: 80
selector:
io.kompose.service: loginservicedapr
status:
loadBalancer: {}
Ниже приведен мой yaml-файл HPA:
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: loginservicedapr-hpa
spec:
maxReplicas: 10 # define max replica count
minReplicas: 3 # define min replica count
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: loginservicedapr
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
- type: Pods
pods:
name: cpu
target:
type: Utilization
averageUtilization: 50
Но когда HPA выходит из строя с ошибкой "FailedGetResourceMetric" - "отсутствует запрос для ЦП".
Я также установил metrics-server (хотя не уверен, требуется ли это или нет), используя следующую инструкцию:kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml
Но все же я получаю следующий результат, когда выполняю команду kubectl describe hpa:
Name: loginservicedapr-hpa
Namespace: default
Labels: fluxcd.io/sync-gc-mark=sha256.Y6dHhIOs-hNYbDmJ25Ijw1YsJ_8f0PH3Vlruj5rfbFk
Annotations: fluxcd.io/sync-checksum: d5c0d9eda6db0c40f1e5e23e1356d0268dbccc8f
kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"autoscaling/v1","kind":"HorizontalPodAutoscaler","metadata":{"annotations":{"fluxcd.io/sync-checksum":"d5c0d9eda6db0c40f1e5...
CreationTimestamp: Wed, 08 Jul 2020 17:19:47 +0530
Reference: Deployment/loginservicedapr
Metrics: ( current / target )
resource cpu on pods (as a percentage of request): <unknown> / 50%
Min replicas: 3
Max replicas: 10
Deployment pods: 3 current / 3 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 FailedComputeMetricsReplicas 33m (x1234 over 6h3m) horizontal-pod-autoscaler Invalid metrics (1 invalid out of 1), last error was: failed to get cpu utilization: missing request for cpu
Warning FailedGetResourceMetric 3m11s (x1340 over 6h3m) horizontal-pod-autoscaler missing request for cpu
У меня есть еще 2 службы, которые я развернул вместе с loginservicedapr. Но я не писал HPA для этих услуг. Но я также включил ограничения ресурсов для этих сервисов в их файлы YAML. Как заставить работать этот HPA?
4 ответа
resources
дважды появляется в спецификации вашего модуля.
resources: # once here
requests:
cpu: 250m
limits:
cpu: 500m
ports:
- containerPort: 80
resources: {} # another here, clearing it
Мне удалось решить проблему, изменив следующее в моем файле манифеста kubernetes:
resources:
requests:
cpu: 250m
limits:
cpu: 500m
на следующее:
resources:
requests:
cpu: "250m"
limits:
cpu: "500m"
После этого HPA сработала. Ниже приводится ссылка на GitHub, которая дала решение: https://github.com/kubernetes-sigs/metrics-server/issues/237. Но я не добавлял никаких команд внутреннего IP-адреса или чего-либо еще.
У меня возникла эта проблема, потому что у меня все еще был завершенный модуль, в котором не был указанcpu
ресурс
Т.е. yaml был:
resources: {}
вместо:
resources:
requests:
cpu: 250m
Обычно это связано с сервером метрик.
Убедитесь, что вы не видите ничего необычного в установке сервера метрик:
# This should show you metrics (they come from the metrics server)
$ kubectl top pods
$ kubectl top nodes
или проверьте логи:
$ kubectl logs <metrics-server-pod>
Также проверьте журналы kube-controller-manager на наличие записей, связанных с событиями HPA.
Кроме того, если вы хотите узнать больше о том, есть ли в ваших модулях недостающие запросы / ограничения, вы можете просто увидеть полный вывод своего рабочего модуля, управляемого HPA:
$ kubectl get pod <pod-name> -o=yaml
Некоторым другим людям тоже повезло с удалением и переименованием HPA.