Amazon Elastic Container Service (ECS) 是一項以雲端為基礎的完全託管式容器協調服務。它使您可以在雲端環境中執行應用程式,而無需設定及維護基礎架構。
為確保以最佳方式滿足容量需求並保持巔峰效能,您可以設定 ECS 持續評估和監控記憶體與 CPU 處理程序。此資料可協助您判斷每個容器的最佳部署策略。此外,您也可以根據需要利用 ECS 來擴充容器和發佈更新。
ECS 支援整合多種實用的 AWS 服務和功能,包括 Identity and Access Management (AWS IAM) 角色、Elastic Block Store (AWS EBS) 磁碟區和 AWS Elastic Load Balancing (AWS ELB)。
這篇文章是我們關於 Kubernetes on AWS 的系列文章的一部分。
在本文中,您將瞭解:
ECS 使您能夠輕鬆地將容器 (container) 用於各種使用案例。您可以利用 ECS 來託管簡單的網站,也可以用它管理分散式微服務架構。ECS 簡化了容器的管理工作,但不會自動化執行整個過程。您仍然可以微調和自訂其處理程序。
以下是 Amazon ECS 的幾個主要優勢:
請參閱我們的指南以瞭解更多資訊:AWS ECS vs Kubernetes 和 AWS ECS vs EKS
下圖顯示在 AWS Fargate 上執行容器的 Amazon ECS。在以下各節中,我們將討論其中顯示的主要元件。
資料來源:AWS
若要在 Amazon ECS 上部署應用程式,您需要先設計欲在容器中執行哪些應用程式元件。容器是從稱為「映像」的唯讀範本建立的,
映像則通常是從 Dockerfile 建置,Dockerfile 是一個純文字檔,勇以指定需要在容器中執行的所有元件。構置好之後,這些映像將會儲存在一個容器登錄檔之中,可以下載並在叢集上執行。
為了準備要在 Amazon ECS 上執行的應用程式,您需要建立一個任務定義。任務定義是一個純文字檔(JSON 格式),用於描述組成應用程式的一或多個容器(最多 10 個)。
工作定義可以為容器化的應用程式指定各種參數。例如,您可以使用這些參數來指示要執行哪些容器、應打開哪些連接埠、應使用哪些資料磁碟區、要使用什麼 Docker 連網模式、以及 Identity and Access Management (IAM) 角色。
幾乎所有可以在命令列 Docker 指令中執行的內容,都可以使用 ECS 任務定義來定義。所有任務定義參數的詳情請參閱官方文件。
任務是在叢集中執行的任務定義執行個體。在 Amazon ECS 中為應用程式建立了任務定義之後,您就可以指定要在叢集上執行多少數量的任務。
Amazon ECS Task Scheduler 會負責將任務放置在一個叢集中。有兩種主要的排程器策略:
資料來源:AWS
Amazon ECS 叢集是所有服務的邏輯分組,每個服務則由一或多個任務組成。首次使用 Amazon ECS 時,會建立一個預設叢集。您可以在帳戶中建立更多叢集,以實現不同工作負載或專案的資源隔離。
有兩種方法可以執行叢集資源:在 EC2 執行個體上,或透過 Amazon Fargate。如需每個選項如何運作的詳細資訊,請參閱以下章節。
容器代理程式在 Amazon ECS 叢集的每個容器執行個體上執行。此代理程式會將目前執行中任務和資源使用情況的相關資訊傳送至 Amazon ECS。Amazon ECS 可以視需要使用代理程式來啟動和停止任務。
資料來源:AWS
ECS 可以使用 Elastic Compute Cloud (EC2) 執行個體來執行容器。EC2 執行個體會部署為 Amazon EC2 服務的一部分,並「登錄」到一個已定義的 ECS 叢集中,這表示 EC2 可以使用這些執行個體來部署容器。您可以在現有的 VPC 內執行 ECS 叢集,使該 VPC 中執行的現有 AWS 資源可以存取該叢集。
部署 ECS 容器的另一種方法是使用 Amazon Fargate。Fargate 免除了佈建、設定和管理 EC2 執行個體的責任,由 AWS 為您管理 EC2 執行個體。
使用 Fargate 時,您無需管理伺服器,但必須確保任務定義是無狀態的。目前,您無法將儲存磁碟區(例如 Elastic Block Storage 磁碟區)掛載到已於工作中定義的容器。
這意味著,如果您要搭配使用 Fargate 與持久儲存空間,您將需要使用 S3 或 Relational Data Service (RDS) 等外部儲存服務。
以下情況請搭配使用 ECS 與 EC2:
以下情況請使用 ECS Fargate:
EC2 的功能可協助您簡化容器管理工作,同時您可以繼續微調其流程。另一方面,AWS Elastic Beanstalk 則會自動為您管理基礎架構。如果您只需要關注程式碼,就可以使用 Beanstalk。
AWS Elastic Beanstalk 是一項雲端型服務,可協助您輕鬆部署及擴充應用程式和服務。Beanstalk 會自動管理 ELB、EC2、Auto Scaling、RDS 和 Auto Scaling 等服務,也會自動部署應用程式,並監控應用程式的健全狀況。
使用 Beanstalk 時,您需要指定希望服務部署哪些容器映像,以及記憶體和 CPU 要求、容器連結和連接埠對應。一旦您定義了這些資訊,Beanstalk 就會開始自動處理所有管理工作。它會佈建 ECS 叢集、管理自動擴充和監控、執行負載平衡,以及在叢集中部署容器。
Amazon ECS 提供的功能可簡化容器和叢集的管理工作,但不會完全自動化執行該過程。您需要瞭解佈建處理程序的運作方式,並持續設定及擴充資源。EC2 會公開伺服器,為您提供擴充和最佳化環境的必要資訊。
AWS Lambda 可讓您編寫由事件驅動的任務,將運算基礎架構予以自動化。Lambda 可讓您定義無伺服器基礎架構,除了編寫用以觸發事件的程式碼之外,不需要也不允許您人工介入。Lambda 可讓您設定資料變更或網站點擊等事件,並定義要以何種反應來回應該事件。
NetApp Cloud Volumes ONTAP 是領先業界的企業級儲存管理解決方案,可在 AWS、Azure 和 Google Cloud 上提供安全可靠、實證肯定的儲存管理服務。Cloud Volumes ONTAP 支援高達 368TB 的容量,並支援各種使用案例,例如檔案服務、資料庫、DevOps 或任何其他企業工作負載,並具有一系列強大的功能,包括高可用度、資料保護、儲存效率、Kubernetes 整合等。
特別是,Cloud Volumes ONTAP 可支援容器化工作負載對於持續磁碟區資源配置和管理的要求。
如需深入瞭解 Cloud Volumes ONTAP 如何幫助解決這些 Kubernetes 工作負載中關於容器化應用程式的挑戰,請參閱 Cloud Volumes ONTAP 案例研究。