Увеличение масштаба Fargate работает стабильно, но уменьшение масштаба работает нестабильно

У нас есть простой пример автомасштабирования слежения за целями, настроенного для контейнерного приложения ecs на основе ЦП и памяти. У нас есть 4 будильника, которые автоматически настраиваются с помощью приведенного ниже кода (2 ЦП - 1 масштабирование вверх, 1 уменьшение масштаба и 2 памяти, 1 масштабирование вверх и 1 уменьшение масштаба)

Мы видим, что при срабатывании тревожных сигналов облачного монитора для автоматического масштабирования наши задачи обслуживания ecs автоматически масштабируются (на стороне ecs сразу же присутствуют события, устанавливающие желаемый счетчик в сторону увеличения). Тем не менее, мы наблюдаем другое поведение, когда срабатывает тревожный сигнал Cloudwatch для автоматического уменьшения масштаба:

  1. Иногда задачи обслуживания ecs сразу же масштабируются (аварийные сигналы с уменьшением масштаба сразу же срабатывают и устанавливают желаемый счетчик вниз, событие присутствует сразу на стороне ecs)
  2. Иногда задачи обслуживания ecs масштабируются с задержкой, например 7-15 минут спустя или даже несколько часов спустя (тревога уменьшения масштаба срабатывает сразу же, но установка желаемого обратного отсчета события задерживается на стороне ecs на 7-15 минут или несколько часов спустя)
  3. Иногда задачи обслуживания ecs вообще не масштабируются (на выходных мы видели, что срабатывали аварийные сигналы с уменьшением масштаба, но задачи обслуживания ecs никогда не уменьшались в течение 48 часов, и установившее желаемое событие обратного отсчета никогда не достигало стороны ecs)

Что касается будильника облачного наблюдения, мы наблюдаем, что будильник всегда срабатывает, когда ожидается, как при увеличении, так и при уменьшении масштаба, на стороне ecs, по нашему мнению, проблема заключается.

Код автомасштабирования следующий:

resource aws_appautoscaling_target this {
  max_capacity = 5
  min_capacity = 1
  resource_id = "service/dev/service1"
  scalable_dimension = "ecs:service:DesiredCount"
  service_namespace = "ecs"
}

resource aws_appautoscaling_policy memory {
  name               = "memory"
  policy_type        = "TargetTrackingScaling"
  resource_id        = aws_appautoscaling_target.this.resource_id
  scalable_dimension = aws_appautoscaling_target.this.scalable_dimension
  service_namespace  = aws_appautoscaling_target.this.service_namespace

  target_tracking_scaling_policy_configuration {
    predefined_metric_specification {
      predefined_metric_type = "ECSServiceAverageMemoryUtilization"
    }

    scale_in_cooldown = 60
    scale_out_cooldown = 60
    target_value       = 50
  }
}

resource aws_appautoscaling_policy cpu {
  name = "cpu"
  policy_type = "TargetTrackingScaling"
  resource_id = aws_appautoscaling_target.this.resource_id
  scalable_dimension = aws_appautoscaling_target.this.scalable_dimension
  service_namespace = aws_appautoscaling_target.this.service_namespace

  target_tracking_scaling_policy_configuration {

    predefined_metric_specification {
      predefined_metric_type = "ECSServiceAverageCPUUtilization"
    }

    scale_in_cooldown = 60
    scale_out_cooldown = 60
    target_value = 60
  }
}

Кто-нибудь видел такое поведение, т.е. что сигналы тревоги в облачных часах срабатывают правильно, служба ecs всегда увеличивается, когда ожидается, но не всегда уменьшается, когда ожидалось? Мы упускаем здесь что-то очевидное? Помощь очень ценится


person bstack    schedule 16.02.2021    source источник


Ответы (1)


Проверьте конфигурацию вашей политики. Если у вас есть несколько политик масштабирования, все они должны быть готовы к масштабированию вместе.

Если ваша цель - уменьшить масштаб после бездействия, вы можете попробовать поиграть с отключением масштабирования для определенных политик, чтобы уменьшить переменные для уменьшения и / или повысить целевое использование для определенных политик. Если есть периодическая активность, это может быть сигналом для данной политики, что ее пока не следует сокращать. Для уменьшения масштабов требуется устойчивая низкая активность.

person Tony    schedule 22.02.2021