DevOps課程-AWS-EKS 1

在AWS上的容器服務

ZONGRU Li
8 min readOct 3, 2022

AWS上面也有許多種容器化的服務形式,簡單概述以下

1.high-level來概述

2.Elastic Container Service (ECS)

3.Elastic Kubernetes Service (EKS)

4.EC2 vs Fargate

5.Elastic Container Registry (ECR)

在開發了微服務之後,我們進行了容器化,以容器形式運行微服務應用

其中微服務應用會有很多個,甚至有複製(replica)的實體容器

這些可以簡單部署到裝有dockerEC2的機台上面:

但是困難的問題來了

該怎麼管理!?

  1. 機台上還有多少可用的資源?
  2. 哪一台適合拿來部署下一個容器應用?
  3. 是否有容器應用掛了?(可能資源不夠等問題),然後還要手動重啟嗎?
  4. 假設有個容器應用replica成5個,如何設置load balanceing?如果有replica 50的容器應用要移除時,該怎麼做比較好!?一個個移除!?或是客製化一個shell腳本!?
  5. 假設有10個replica,我該上哪知道它其實應該要50還是10!?決定該多少定義在哪?

不管10個容器還是100個容器,都需要有管理

所以我們需要Automation Tool — Container Orchestration Tool

Container Orchestration Tool

=Managing,scaling and deploying containers

其中最知名的就是Kubernetes:

Kubernetes

其他還有很多類似的工具:

接著會簡單介紹甚麼是ECS

Elastic Container Service(ECS)

  • 容器編排(Orchestration)服務
  • 管理整個容器的生命週期(start,re-schedule,load balance)

ECS如何運作?

  • 運行容器化應用程式叢集在AWS上
  • 需要先建立由AWS管理的ECS Cluster
  • 其中ECS叢集包含所有管理容器的服務,並透過Control Plane管理
  • 其中Control Plane在叢集建立時就會有,並提供re-scheduling,Orchestration等服務
  • 但是其中被管理的應用程式容器需要運行在某處,也就是EC2機台上
  • 而這些EC2機台上的容器都將統一被ECSControl Plane控管
  • 這些EC2機台還是需要另外管理
  • 並且這些EC2機台需要安裝Container Runtime(如docker)ECS Agent

ECS與EC2機台:

  • ECShost即是那些EC2機台,並且管理其上的容器
  • 但是還是需要人力去管理這些EC2機台(例如要人力去建立EC2機台)
  • 然後人為進去設定使其加入ECS叢集
  • 人為檢查是否有足夠資源
  • 人為管理裡面的OS
  • 人為安裝維護剛剛提到的Container RuntimeECS Agent
  • 但是就代表有完全的基礎設施掌控

ECS with Fargate

ECS & Fargate

如果想將那些基礎設施的管理也交給AWS來搞?

也就是

  • 容器編排(Orchestration)交給AWS
  • Hosting Infrastructure Management也交給AWS
  • 原本是自建EC2後納入ECS叢集
  • 改由Fargate的實例納入ECS叢集

AWS的Fargate如何運作?

  • 他是無伺服器(Serverless,)建立容器
  • 不再需要自行建立或提供伺服器
  • 只要請求Fargate運行容器就好
  • 並且Fargate就會自行查看這個容器要多少資源(CPU/MEM/Storage…)來運行
  • i.e.不用供應與管理伺服器了
  • 只要給要求給Fargate就夠了
  • 這帶來的好處即是只會需要足夠的基礎設施資源來提供給容器運行
  • 只要為這些需要的資源付錢就好!
  • 很容器擴展而不需要調整資源配置

接著可能會問Fargate怎麼收費:

  • 依據使用的時間收費
  • 被佈署上的容器吃掉多少CPUMemory而定

以自建EC2來說要付整台Server的錢

EC2即便上面沒有運行各種應用程式也要花錢

也就是使用了Fargate就代表你的基礎設施(Infrastructure)也交由AWS管理

所以當ECS+Fargate即代表:

  • Infrastructure是由AWS管理(Fargate)
  • 容器也是由AWS管理(ECS)
  • 最終只要專心於應用程式怎麼建立,然後打包成image
  • 並且可以串接各種AWS服務

可串接的各種AWS服務有:

  • CloudWatch for Monitoring
  • Elastic Load Balancing for LoadBalancing
  • IAM for Users and Permissions
  • VPC for Networking
  • …etc

而現在越來越多傾向直接使用Kubernetes的解決方案

市佔也是最高的

若在AWS上面是否可以使用Kubernetes呢?

答案就會是EKS這個AWS上的解決方案

由其建議的是已經有在使用Kubernetes相關解決方案

不論是地端Kubernetes或是GCP,AzureKubernetes要轉移到AWS

都更是建議使用EKS,而非ECS

但是都要注意這類升級到不同平台都一定是困難的

ECS稍微比EKS適合的場景大概是針對較沒那麼複雜的使用場景

以及ECScontrol plane不用收費

EKS如何運作?

當建立了EKS叢集後,AWS就會在背後自動建立master node

並且這些master node上會安裝好Kubernetes必要元件

符合High Availability-Master Nodes replicated across Availability Zones

而針對Kubernetes的Worker Node部分

1.EKS與EC2機台(完全自己管理):

首先要先建立EC2的機台,這邊稱之為Compute Fleet

建立許多台,讓EKS連線到這類機台

相比於ECS要在EC2上面自行加裝Docker AgentECS Agent

EKSWorker Node也就是Compute Fleet則要加裝

除了Docker Agent外再加上K8s Processes

也就是要自行管理EC2來當作Worker node

2.EKS與Nodegroup(半管理):

另外EKS有一層叫Nodegroup,提供半管理式的worker node管理

Nodegroup設置下可以統一建立,移除EC2 instance

以及統一安裝Container Runtime(但是這要自己做設定)

但是要記得的是,這仍未包含worker機台的自動擴展

3.EKS與Fargate(完全託管):

透過Fargate實現完全託管的worker node機台

4.甚至於可以EKS搭配EC2+Fargate等組合

實際概念可以達到如下圖

AWS上各種容器管理與實際運行機台的服務排列組合

實際建立EKS Cluster的步驟

  1. 建立EKS Cluster:此時AWS會依據設定協助建立出Master Node
  2. 建立EC2機台群的Nodegroup:以此方式建Worker Node不論幾百幾千台
  3. 連線上述NodegroupEKS Cluster(或是第二步改Fargate,也是要設連線)
  4. 使用kubectl工具連線到EKSCluster開始部署容器應用

Elastic Container Registry(ECR)

前面描述了兩個關於容器應用的AWS服務

  1. ECS
  2. EKS

還有另一個服務即是ECR,就是存放Docker image的地方

並且也比較方便與ECSEKS整合(較容易設置)

以上大概就介紹完了AWS上有關容器的相關應用:

後面應該會上到如何跟Jenkins整合完成CICDECR儲存imageEKS的佈署

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet