Какие показатели описывают в Kubernetes HorizontalPodAutoscaler в GKE?
Я настроил свой HorizontalPodAutoscaler, как описано здесь https://cloud.google.com/kubernetes-engine/docs/tutorials/external-metrics-autoscaling, чтобы прослушивать масштаб в соответствии с количеством незапакованных сообщений из моего Pub/Sub. Я хочу, чтобы модули масштабировались, если имеется более одного неподтвержденного сообщения. Когда я бегуk describe hpa
Я получил:
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"autoscaling/v2beta1","kind":"HorizontalPodAutoscaler","metadata":{"annotations":{},"name":"foobar-gke-prod","namespace":"defau...
CreationTimestamp: Mon, 25 May 2020 18:01:33 -0700
Reference: Deployment/foobar-gke-prod
Metrics: ( current / target )
"pubsub.googleapis.com|subscription|num_undelivered_messages" (target average value): 200m / 1
Min replicas: 3
Max replicas: 9
Deployment pods: 5 current / 5 desired
Возвращаемые данные метрик меня сбивают с толку. Когда я запустил эту команду, количество незапакованных сообщений знаний было около 4 согласно показателям консоли. Так что я не понимаю, что значит200m
жадный? Почему бы не сказать 4?
Вот моя конфигурация для HPA
# Template from https://cloud.google.com/kubernetes-engine/docs/tutorials/external-metrics-autoscaling
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: foobar-gke-prod
spec:
minReplicas: 3
maxReplicas: 9
metrics:
- external:
metricName: pubsub.googleapis.com|subscription|num_undelivered_messages
metricSelector:
matchLabels:
resource.labels.subscription_id: prod_foobar_subscription
targetAverageValue: "1"
type: External
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: foobar-gke-prod
1 ответ
Справочный пример:
Name: pubsub
...
Metrics: ( current / target )
"pubsub.googleapis.com|subscription|num_undelivered_messages" (target average value): 2250m / 2
Min replicas: 1
Max replicas: 4
Conditions:
Type Status Reason Message
---- ------ ------ -------
AbleToScale True SucceededRescale the HPA controller was able to update the target scale to 4
ScalingLimited True TooManyReplicas the desired replica count is more than the maximum replica count
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulRescale 7s horizontal-pod-autoscaler New size: 4; reason: external metric pubsub.googleapis.com|subscription|num_undelivered_messages(&LabelSelector{MatchLabels:map[string]string{resource.labels.subscription_id: echo-read,},MatchExpressions:[],}) above target
- В разделе "Метрики" указано последнее значение метрики, наблюдаемое HPA. Дробные значения представлены в миллиединицах. Например, в выходных данных выше представлено 4 реплики приложения, а текущее количество неподтвержденных сообщений в подписке Pub/Sub - 9. Таким образом, среднее количество сообщений на реплику составляет 2,25 или 2250 млн.
Возвращаемые данные метрик меня сбивают с толку. Когда я запустил эту команду, количество незапакованных сообщений знаний было около 4 в соответствии с показателями консоли. Так что я не понимаю, что значит 200 м? Почему бы не сказать 4?
- Это означает, что в вашем случае
200m/1
означает, что в этот момент среднее количество недоставленных сообщений на одну работающую реплику составляет 0,2(20%) на момент измерения HPA.
Соображения:
- Убедитесь, что вы делаете показания на консоли метрик и HPA примерно одновременно, чтобы избежать расхождений из-за масштабирования, выполняемого во время чтения.
чтение 4 сообщений для 5 модулей приведет к нагрузке 800 м, но в этот момент HPA может уже запустить другое событие масштабирования.
Я рекомендую вам одновременно прочитать консоль показателей и HPA и проверить еще раз.
Если вы все еще думаете, что результаты не соответствуют сообщению здесь с обновленным описанием HPA, мы можем взглянуть еще раз.
РЕДАКТИРОВАТЬ:
Есть ли способ сделать так, чтобы показатель не был средним по модулям? Т.е. если есть 5 распакованных сообщений, данные метрики будут равны 5000м?
Из Справочника API Kubernetes ExternalMetricSource v2beta1 Autoscaling:
targetAverageValue
- целевое значение глобального показателя для каждого пакета (в виде количества).targetValue
- целевое значение показателя (как количество).
Обратите внимание, что targetAverageValue
а также targetValue
являются взаимоисключающими.
Так что, если вам нужна общая сумма, а не среднее значение, просто поменяйте их на HPA.