簡體   English   中英

將容量提供程序與 ECS 一起使用時,需要多長時間才能刪除實例?

[英]How long will it take for an instance to be removed when using capacity provider with ECS?

我為 ECS 集群啟用了容量提供程序,並將 EC2 自動縮放組的最小、最大和所需計數分別設置為 1,3 和 2。 我還為 ECS 任務啟用了自動縮放,最小值、最大值和所需計數分別為 2,6 和 2。

當我使用 terraform 部署整個設置時,這兩個任務中的每一個都在兩個單獨的實例上啟動,當運行負載測試時,ECS 任務和 EC2 實例成功擴展到 6 和 3。但是在負載測試完成后 ECS任務已縮小,但 EC2 實例仍未刪除。

managed_scaling 中的 target_capacity 是否指示用於為 EC2 集群創建自動縮放策略的閾值?

 resource "aws_autoscaling_group" "asg" {
  ...
  min_size             = var.asg_min_size
  max_size             = var.asg_max_size
  desired_capacity     = var.asg_desired_capacity
  protect_from_scale_in = true
  tags = [
    {
      "key"                 = "Name"
      "value"               = local.name
      "propagate_at_launch" = true
    },
    {
      "key"                 = "AmazonECSManaged"
      "value"               = ""
      "propagate_at_launch" = true 
    }
  ]
}

resource "aws_ecs_capacity_provider" "capacity_provider" {
   name = local.name

   auto_scaling_group_provider {
      auto_scaling_group_arn         = aws_autoscaling_group.asg.arn
      managed_termination_protection = "ENABLED"

      managed_scaling {
           maximum_scaling_step_size = 4
           minimum_scaling_step_size = 1
           status                    = "ENABLED"
           target_capacity           = 70
      }
   }

  
   provisioner "local-exec" {
      when = destroy

      command = "aws ecs put-cluster-capacity-providers --cluster ${self.name} --capacity-providers [] --default-capacity-provider-strategy []"
   }
}

resource "aws_ecs_cluster" "cluster" {
  name      = local.name
  capacity_providers = [
    aws_ecs_capacity_provider.capacity_provider.name,
  ]
  tags = merge(
    {
      "Name"        = local.name,
      "Environment" = var.environment,
      "Description" = var.description,
      "Service"     = var.service,
    },
    var.tags
  )
}

您已經為容量提供程序設置了 70 的目標容量,因此容量提供程序不希望 go 超過該利用率。

當您有 2 個任務在 2 個不同的實例上運行時,您將擁有 100% 的利用率,因為容量是根據運行非 daemonset 任務的實例數量來計算的。 因此,如果您的目標容量小於 100,它就不會想要擴展以僅留下非空實例可用。

如果您的目標容量為 60,並且您的 ASG 被允許擴展到最多 4 個實例,它仍會嘗試擴展到該數量並留下 2 個空實例,因為只有 1 個可用實例會使容量保持在 66.6,這是更高的比那個較低的目標容量。

如果您剛剛開始使用容量提供程序,那么這篇關於 ECS 容量提供程序的 AWS 深入研究博客文章是一本不錯的讀物。 我想當我開始使用它們時我一定已經讀了十幾遍了,但我仍然覺得縮放機制有點不尋常。 不過,它確實為我們解決了一些基於 ECS 內存/CPU 預留的簡單 ASG 縮放的關鍵問題。 如果您不想要任何備用容量(例如,將目標容量設置為 100)並且不介意等待實例橫向擴展,它還允許擴展為零。

  1. 確保容量提供程序及其支持的 Auto Scaling 都標記為受保護的縮減,並且所有正在運行的實例都以這種方式標記,如果它們是在 Auto Scaling 參數更改之前創建的
  2. 減小自動縮放組的大小。 這本身不會引起任何變化。 但是,如果任何實例不受 Scale In 保護,它們將立即被丟棄並且在它們上運行的任務被終止
  3. 在 Cluster Instance 選項卡中,標記負載最低的實例並將其設置為 drain。 這將開始逐步將任務移出該實例,並最終在沒有正在運行的任務時立即終止

注意:如果您的集群是通過模板創建的並分配了一些容量,您可能需要在耗盡的實例“重新出現”時跟蹤保留該容量的警報並將所有內容調整為您真正需要的數字

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM