#kubernetes #hpa #horizontal-pod-autoscaling #metrics-server #horizontalpodautoscaler
#kubernetes #hpa #горизонтальный модуль -автоматическое масштабирование #метрики-сервер #horizontalpodautoscaler
Вопрос:
Следуя приведенному здесь примеру https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects , я создал установленный metrics-server и изменил его следующим образом:
spec:
containers:
- command:
- metrics-server
- --secure-port=8443
- --kubelet-insecure-tls=true
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
image: docker.io/bitnami/metrics-server:0.3.7-debian-10-r89
imagePullPolicy: IfNotPresent
name: metrics-server
ports:
- containerPort: 8443
name: https
protocol: TCP
resources: {}
Мои узлы отображаются при запросе:
kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes"
{"kind":"NodeMetricsList","apiVersion":"metrics.k8s.io/v1beta1","metadata":{"selfLink":"/apis/metrics.k8s.io/v1beta1/nodes"},"items":[{"metadata":{"name":"eo-test-metrics-35lks","selfLink":"/apis/metrics.k8s.io/v1beta1/nodes/eo-test-metrics-35lks","creationTimestamp":"2020-11-04T04:05:58Z"},"timestamp":"2020-11-04T04:05:28Z","window":"30s","usage":{"cpu":"770120208n","memory":"934476Ki"}},{"metadata":{"name":"eo-test-metrics-35lkp","selfLink":"/apis/metrics.k8s.io/v1beta1/nodes/eo-test-metrics-35lkp","creationTimestamp":"2020-11-04T04:05:58Z"},"timestamp":"2020-11-04T04:05:25Z","window":"30s","usage":{"cpu":"483763591n","memory":"850756Ki"}}]}
Но цели HPA остаются «неизвестными»:
kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache <unknown>/50% 1 10 1 31m
Запуск верхних узлов работает, а верхние модули — нет
kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
eo-test-metrics-35lkp 93m 4% 934Mi 30%
eo-test-metrics-35lks 166m 8% 1053Mi 33%
Верхние модули возвращают ошибку error: Metrics not available
:
kubectl top pods
W1104 11:19:27.854485 62798 top_pod.go:266] Metrics not available for pod default/php-apache-d4cf67d68-blt2c, age: 13h1m51.854463s
error: Metrics not available for pod default/php-apache-d4cf67d68-blt2c, age: 13h1m51.854463s
Это зависит от версии сервера Kubernetes v1.19.3
и версии сервера metrics 0.3.6
Журналы с сервера метрик
E1104 21:21:56.496129 1 reststorage.go:160] unable to fetch pod metrics for pod default/php-apache-d4cf67d68-blt2c: no metrics known for pod
E1104 21:22:10.945091 1 reststorage.go:160] unable to fetch pod metrics for pod default/php-apache-d4cf67d68-blt2c: no metrics known for pod
E1104 21:22:26.496814 1 reststorage.go:160] unable to fetch pod metrics for pod default/php-apache-d4cf67d68-blt2c: no metrics known for pod
Ответ №1:
Проблема устранена, когда Docker 19.03 используется в Kubernetes версии 1.19 в связи с этой проблемой, связанной с восходящим потоком: https://github.com/kubernetes/kubernetes/issues/94281
Ответ №2:
Используйте эту версию сервера метрик
git clone https://github.com/kodekloudhub/kubernetes-metrics-server
kubectl apply -f kubernetes-metrics-server
Затем следуйте тем же инструкциям, что и в этой ссылке
Это увеличит количество модулей по мере увеличения нагрузки
НО я заметил, что автоскалер не уменьшает масштаб развертывания при остановке загрузки. Может потребоваться некоторое время, пока он снова не уменьшится
Примечание: эта версия сервера метрик может использоваться только в среде разработки или обучения.
Я использовал среду Katakoda для тестирования ответа.