集群架構選擇最佳容器工具:AWS ECS與Docker Swarm與Kubernetes

集群架構選擇最佳容器工具:AWS ECS與Docker Swarm與Kubernetes

在管理容器及其運行的集群基礎架構時,適合你的工具是什麼?

通過在不同環境中同步開發,推廣和部署代碼,容器化迅速普及。 容器是應用程序層的抽象,將必要的庫,依賴項和環境設置的代碼包裝到單個可執行程序包中。

容器旨在簡化代碼的部署,但管理數千個代碼並非易事。 在創建高可用性部署時,根據負載進行擴展和縮小,檢查容器運行狀況並使用新容器替換不健康的容器,暴露端口和負載平衡 - 需要另一種工具。 這就是容器編排的用武之地。容器和微服務齊頭並進,與傳統環境中運行的整體數量相比,顯著增加了在典型環境中運行的各個服務的數量。 隨著這種增加的複雜性,容器編排是大規模實際部署的必要條件。

除了編排問題,另一個問題仍有待解決 - 容器在何處以及如何運行? 運行群集和管理群集基礎結構需要其他工具。 幸運的是,我們有一些選擇來滿足這種需求。

Docker已成為創建容器的事實標準。 對於編排和集群管理ECS,Docker Swarm和Kubernetes是三種主流的選擇,每種選擇各有利弊。下面讓我們看看吧:

1. AWS彈性容器服務(ECS)

集群架構選擇最佳容器工具:AWS ECS與Docker Swarm與Kubernetes

一種解決方案是通過使用亞馬遜的彈性容器服務(ECS)將集群管理工作卸載到AWS。 對於已熟悉Amazon Web Services的組織,ECS是一個很好的解決方案。 只需單擊幾下即可配置和部署集群,由您管理的EC2實例或完全託管的集群服務Fargate提供支持。

ECS包含有如下組件:

  • ECS clusters:是運行各項任務的EC2實例組。
  • Task definition:是一份JSON格式的文本文件,其中包含Docker的運行命令,以及應該在哪一臺主機上運行哪些容器的細節。
  • Service:是用於在整個集群上運行和維護指定數量的、各種任務定義實例的工具。
  • Service scheduler:能夠持續監控運行的任務,以確保具有合理的在線服務數量,並能在任何失敗出現時重新安排任務的上線。
  • Container agents:此功能可以幫助您將各個集群的實例與容器相連接。

優點:現有AWS用戶將熟悉術語和基礎計算資源。 快速簡便的入門,輕鬆擴大規模以滿足需求。 與其他AWS服務集成良好。 為生產工作負載大規模部署高可用容器的最簡單方法之一。

缺點:專有解決方案。 供應商鎖定:容器可以輕鬆移動到其他平臺,但配置特定於ECS。 無法訪問Fargate中的群集節點使故障排除變得困難。 不可自定義,不適用於非標準部署。

總結:快速且易於使用,尤其適用於現有AWS用戶。 對於不想維護自己的集群的小團隊來說,這是一個很好的選擇。 但供應商鎖定以及無法定製或擴展解決方案可能對大型企業來說是一個問題。

2. Docker Swarm

集群架構選擇最佳容器工具:AWS ECS與Docker Swarm與Kubernetes

Docker Swarm擴展了單主機的Docker模式,對於那些剛開始使用Docker的人來說,Swarm模式可以快速、方便地部署多個容器與微服務,是一個簡單的解決方案。 Swarm擴展了標準的Docker命令行實用程序,增加了用於管理集群和節點,擴展服務和滾動更新的命令。服務發現,負載平衡等都由平臺處理。

Swarm的集群包括如下重要組件:

  • Manager nodes:用於控制編排、集群管理和任務分配。
  • Worker nodes:其唯一的功能就是運行由Manager Node所分配的容器和服務。
  • Services:描述了您希望單個容器將如何在不同節點之間分發。如果您想創建服務,請在普通Docker運行時指定確切的信息,再添加好新的參數(如:容器的副本數量)。
  • Tasks:是Swarm的基本單位。Manager Node根據在服務描述中設置的副本數量把任務分配該Worker Nodes。一旦一個任務被分配給了某個節點,它就不能被移到其他節點上。

優點:對於那些剛接觸Docker或者之前使用過Docker Compose的人來說,這是一個很好的起點。無需安裝其他軟件,Docker內置了Swarm模式。簡單明瞭,適合小型組織或剛剛開始使用容器的人員。

缺點:作為一個新人,Swarm缺乏Kubernetes的高級特性和功能,例如內置的日誌記錄和監控工具。同樣,整體採用落後於Kubernetes和ECS等專有產品。

總結:Swarm在開始時是一個不錯的選擇,它快速且易於使用,內置於Docker,不需要額外的軟件,但您可能會發現自己很快就會失去其功能。

3. Kubernetes

集群架構選擇最佳容器工具:AWS ECS與Docker Swarm與Kubernetes

對於高級用戶,Kubernetes提供了最強大的工具集,用於管理群集及其上運行的工作負載。 Kubernetes是GitHub上最受歡迎的開源項目之一,由谷歌,微軟和其他公司提供支持,是在生產中部署容器的最流行的解決方案。該平臺具有良好的文檔和可擴展性,允許組織對其進行自定義以滿足其需求。雖然設置起來相當複雜,但可以使用許多託管解決方案,包括AWS的EKS,GCP的GKE,Azure的AKS,Pivotal的PKS,現在甚至Docker都提供自己的託管Kubernetes服務。

Kubernetes的集群包括如下重要組件:

  • Pods:在同一節點上創建、調度和部署出一組、或多組容器。
  • Labels:是被分配出來用於標識各種pod、service和replication controllers鍵值(key-value)的標籤(如:名稱)。
  • Services:為一組pod提供名稱,如負載均衡器一般,將流量引入正在運行的容器之中。
  • Replication controllers:一種框架,它負責確保特定數量pod的副本能在任何給定時刻按照調度運行。

在這三種工具中,數Kubernetes的安裝最為複雜,當然如果您能使用正確的工具,那麼其過程會簡化許多。

  • Kubeadm(https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/)能夠提供很好的、與現有編排系統、或裸金屬環境的集成。
  • Helm(https://github.com/kubernetes/helm)是一種能夠優化安裝、並管理Kubernetes各種應用的流行工具。

優點:適用於大型企業部署的空間中最受歡迎且廣泛採用的工具。由大型開源社區和大型科技公司支持。靈活且可擴展,可在任何環境中工作。

缺點:要學習複雜,難以設置,配置和維護。缺乏與Docker Swarm和Compose CLI以及清單的兼容性。

總結:對於真正的企業級集群和容器管理,沒有什麼能比Kubernetes更好。雖然複雜,但最終複雜性轉化為額外的功能,隨著容器化工作量開始擴展,這些功能非常有價值。隨著雲供應商競相通過託管k8s產品簡化事務,只會更容易在Kubernetes中部署和維護集群。

綜述

可見,如何選擇適當的容器編排工具,完全取決於您需求的側重點,同時也要兼顧您所需要協同使用的技術。如果您的應用與AWS密切相關,那麼選用ECS肯定會比Kubernetes更合理。反之,如果您使用Google雲作為提供商,而且熱衷於各種配置,並願意為完美的服務付出複雜性和精力的話,那麼Kubernetes一定是您的首選。


分享到:


相關文章: