#kubernetes
#kubernetes
Вопрос:
У меня есть кластер kuberentes. Один мастер и один рабочий. Я устанавливаю сервер метрик для автоматического масштабирования, а затем запускаю стресс-тест
$ kubectl run autoscale-test --image=ubuntu:16.04 --requests=cpu=1000m --command sleep 1800
deployment "autoscale-test" created
$ kubectl autoscale deployment autoscale-test --cpu-percent=25 --min=1 --max=5
deployment "autoscale-test" autoscaled
$ kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
autoscale-test Deployment/autoscale-test 0% / 25% 1 5 1 1m
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
autoscale-test-59d66dcbf7-9fqr8 1/1 Running 0 9m
kubectl exec autoscale-test-59d66dcbf7-9fqr8 -- apt-get update
kubectl exec autoscale-test-59d66dcbf7-9fqr8 -- apt-get install stress
$ kubectl exec autoscale-test-59d66dcbf7-9fqr8 -- stress --cpu 2 --timeout 600s amp;
stress: info: [227] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
все работает нормально, и модуль был автоматически масштабирован, но после этого модуль, созданный с помощью автоматического масштабирования, все еще запущен, и они не завершаются после стресс-теста
hpa показывает, что используется 0% ЦП, но 5 автоматически масштабируемых модулей все еще работают
#kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
autoscale-test Deployment/autoscale-test 0%/25% 1 5 5 74m
#kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default autoscale-test-8f4d84bbf-7ddjw 1/1 Running 0 61m
default autoscale-test-8f4d84bbf-bmr59 1/1 Running 0 61m
default autoscale-test-8f4d84bbf-cxt26 1/1 Running 0 61m
default autoscale-test-8f4d84bbf-x9jws 1/1 Running 0 61m
default autoscale-test-8f4d84bbf-zbhvk 1/1 Running 0 71m
Я жду час, но ничего не происходит
Комментарии:
1. Не могли бы вы, пожалуйста, проверить значение флага —horizontal-pod-autoscaler-sync-period для вашего кластера.. Автоматическое масштабирование использует этот флаг для принятия решения о масштабировании
Ответ №1:
Из документации:
—horizontal-pod-autoscaler-downscale-delay: значением для этого параметра является длительность, которая указывает, как долго автоскалер должен ждать, прежде чем можно будет выполнить другую операцию уменьшения масштаба после завершения текущей. Значение по умолчанию равно 5 минутам (5 секунд).
Примечание: При настройке значений этих параметров оператор кластера должен знать о возможных последствиях. Если значение задержки (перезарядки) установлено слишком большим, могут быть жалобы на то, что автоскалятор горизонтального модуля не реагирует на изменения рабочей нагрузки. Однако, если значение задержки установлено слишком малым, масштаб набора реплик может продолжать колебаться, как обычно.
Наконец, непосредственно перед тем, как HPA масштабирует цель, записывается рекомендация по масштабированию. Контроллер рассматривает все рекомендации в настраиваемом окне, выбирая самую высокую рекомендацию из этого окна. Это значение может быть настроено с помощью флага —horizontal-pod-autoscaler-downscale-stabilization-window, который по умолчанию равен 5 минутам. Это означает, что масштабирование будет происходить постепенно, сглаживая влияние быстро меняющихся значений показателей.
Комментарии:
1. я жду час, но ничего не происходит
2. возможно, вы сделали что-то вроде -cpu-percent = 1 вместо -cpu-percent = 80
3. я пишу автоматическое масштабирование развертывания kubectl-test —cpu-percentage =25 —min=1 —max = 5
4. сделайте его 90 вместо 25 и протестируйте еще раз
5. 25 процентов — это совершенно очевидно, вы говорите, что 25-процентная загрузка процессора — это большая нагрузка, поэтому он думает именно так и никогда не уменьшает ее, пока вы не скажете, что на самом деле 90 процентов загрузки процессора не составляет высокой нагрузки, чего не происходит, когда нагрузочный тест завершен, поэтому он масштабируется