2017-06-18 62 views
3

我正在使用ECS羣集作爲Jenkins代理/從站,使用Jenkins ECS plugin無法放置任務時擴展ECS EC2實例

插件放置一個精英任務,當任務要求構建節點。現在我想根據需求在與ECS羣集關聯的自動縮放組中擴展EC2實例。

  1. 詹金斯經常閒置。在這種情況下,我不希望在自動調節組中有任何實例。
  2. 如果一個節點(並因此在ECS任務)被請求並且不能被放置,我想一個EC2實例添加到自動縮放組。
  3. 如果一個實例是空閒和計費小時前不久,我想該實例被刪除。

3.點可以由EC2實例上的cronjob完成,它定期檢查條件是否滿足並刪除EC2實例。

但我怎麼能完成2點?如果無法放置任務,我無法創建觸發的CloudWatch警報。

我該如何做到這一點?

回答

0

對於第2點,解決此問題的一種方法是在沒有足夠的cpu單元來放置新的jenkins從站時自動縮放。

您應該使用羣集上的CPU預留指標規模。 http://docs.aws.amazon.com/AmazonECS/latest/developerguide/cloudwatch-metrics.html#cluster_reservation

+1

這並不能真正解決問題2.我希望當一個任務不能放在發生規模的事件。不是當它可能無法放置時:原因是,有些任務需要12GB Ram,這幾乎是完整的EC2實例。如果我按照你的建議進行縮放,我總是會有一個額外的EC2實例在運行。我不想要。 – Nathan

0

實現此目的相當不方便:您可以使用Lambda函數檢測服務何時有runningCount + pendingCount < desiredCount超過X秒。 (我還沒有測試過。) 提出了類似的解決方案here

似乎沒有適合的解決方案,只能在無法放置任務時進行縮放。也許AWS希望我們過度配置集羣,這對於高可用性來說可能是一個好的做法,但並不總是最好的或最便宜的解決方案。

0

當無法放置任務時,這意味着將該任務放置在您的ECS羣集中將超過您的MemoryReservation或CPUReservation。您可以爲這些ECS指標中的一個或兩個設置Cloudwatch警報,也可以設置一個自動擴展策略來添加和刪除ECS羣集中的EC2實例。

此,在與擴展的ECS您ECS服務的自動縮放政策組合:服務:DesiredCount尺寸應該足以讓您將您的ECS集羣需要底層的EC2實例。

例如,您的ECS服務的ScalingPolicy可能是「當我們使用70%的分配內存用於此服務時,將2添加到DesiredCount」。添加1個服務任務後,您的ECS羣集MemoryReservation指標可能會超過「80」閾值,此時Cloudwatch警報會觸發ECS MemoryReservation上的某個閾值,並使用自動擴展策略添加另一個EC2節點,任務現在可以放置。