У меня есть приложение Java, работающее на K8s с минимальным: 2 и максимальным: 6 модулями в развертывании. минимальная куча: 256 МБ, максимальная - 512 МБ. запрос и ограничение памяти - 1Gi Вот спецификация HPA:
spec:
scaleTargetRef:
apiVersion: extensions/v1beta1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 6
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 60
- type: Resource
resource:
name: memory
targetAverageUtilization: 60
Во время теста производительности я заметил, что развертывание очень агрессивно пытается масштабироваться.
Когда нет нагрузки, использование памяти составляет около 33%, и согласно этой ссылке https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/ формула для получения приблизительного представления о желаемых модулях: desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
Из мониторинга K8s я заметил, что он пытается масштабироваться, когда использование памяти увеличивается примерно до 40%. Если я правильно понимаю, как работает приведенная выше формула, desiredReplicas = ceil[2*(0.4/0.6)] = 2
, то масштабирование не должно увеличиваться.
Я правильно понимаю?
1 ответ
Выглядит правильно, но я немного догадываюсь, потому что вы не поделились выводом kubectl top pods
. Возможно, ваше развертывание масштабируется не из-за использования памяти, а в первую очередь из-за загрузки ЦП.
Если вы видите документы a> первые показатели, которые достигают цели, запускают процесс автомасштабирования:
Kubernetes 1.6 добавляет поддержку масштабирования на основе нескольких метрик. Вы можете использовать версию API автомасштабирования / v2beta2, чтобы указать несколько показателей для масштабирования горизонтального автомасштабирования модулей. Затем контроллер Horizontal Pod Autoscaler оценит каждую метрику и предложит новую шкалу на основе этой метрики. Самая большая из предложенных шкал будет использоваться в качестве новой шкалы.
Вы также можете попробовать метрику Value для целевой памяти для устранения неполадок:
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 60
- type: Resource
resource:
name: memory
targetAverageValue: 700M
Хороший способ увидеть текущие показатели - просто получить статус полного вывода на HPA:
$ kubectl get hpa <hpa-name> -o=yaml
Похожие вопросы
Новые вопросы
spring-boot
Spring Boot - это фреймворк, который позволяет легко создавать приложения и сервисы производственного уровня на основе Spring с минимальными усилиями. Он требует самоуверенного взгляда на платформу Spring, предназначенную для новых и опытных пользователей Spring.