亞馬遜ECS和Kubernetes管理百萬容器的8個洞察
近期,美國雲應用監控服務提供商Datadog發布最新一份全球Docker生產數據報告。報告闡述:根據我們對現實世界中Docker使用情況的最新調查,容器已不再是一項利基技術——超過35%的至少擁有500台主機的Datadog客戶採用了Docker。
隨著容器化變得越來越主流,我們決定研究編排容器工作負載的技術生態系統。 Kubernetes,Mesos,Amazon彈性容器服務(ECS),Azure容器服務和Google Kubernetes引擎等平台提供了一個抽象層和自動化來幫助管理大量的臨時容器。 以下的調查探討了Datadog的客戶在任意一天中如何使用編排工具(尤其是ECS和Kubernetes)管理數百萬個容器。
1. ECS在AWS中盛行 但Kubernetes在其他領域領先
容器運行的環境似乎強烈地影響了編排工具的選擇。 我們在AWS中運行容器編排器的大多數客戶選擇ECS,但我們也看到在AWS環境中大量使用Kubernetes。 在Google雲平台,Azure,本地數據中心和其他環境中,絕大多數公司選擇Kubernetes進行編排。
值得注意的是,亞馬遜在2017年12月推出了兩項服務,可能會重塑AWS環境中的編排環境。 Amazon為Kubernetes(EKS)提供的新彈性容器服務將託管的Kubernetes群集引入AWS雲,而AWS Fargate是一種新的服務,用於部署容器而不用管理底層基礎架構。 我們將跟蹤這些服務在未來幾個月中將如何影響業務流程的使用。
2. Kubernetes的Docker環境份額 9個月內增長了11%
隨著越來越多的公司採用Docker,我們也看到了更多容器編排器的使用——特別是Kubernetes。 (在本報告中,Kubernetes數據包括運行自我管理群集的公司,以及Google Kubernetes Engine,Azure Container Service和其他託管Kubernetes服務的用戶。)
截至2017年10月,Kubernetes佔有Docker環境的41%份額,而今年年初只有30%。 考慮到Docker的快速增長,所有運行Kubernetes的Datadog客戶的份額增加了約50%。
3. ECS在AWS Docker環境中的份額 9個月內增長7%
隨著編排越來越流行,AWS公司越來越多地採用Amazon ECS來管理其容器船隊。 截至2017年10月,ECS在AWS中擁有34%的Docker環境份額,高於1月份的27%。 由於AWS上的Docker使用情況正在不斷增加,這相當於運行ECS的所有Datadog客戶的份額增加了大約40%。
4. 編排縮短了40%的Docker主機壽命
編排的範圍超出了容器船隊,也影響了底層基礎設施。 在由ECS或Kubernetes編排的集群中,主機的平均使用壽命約為10天,而沒有編排的Docker主機則有17天。 作為比較,非Docker主機平均生活23天。 我們得出結論:編排使組織能夠專註於服務和工作負載,將主機視為一次性基礎設施單元,可根據需求自動配置或銷毀。
5. Kubernetes容器流失比ECS容器快8倍
儘管編排工具的選擇在很大程度上取決於基礎設施環境,但ECS和Kubernetes一旦部署,往往會出現重大的運營差異。 尤其是,Kubernetes的工作量非常快地通過容器來攪動:在Kubernetes環境中,容器的平均壽命僅為1.5天,而ECS管理的容器的平均壽命為12天。 這種差異可能部分歸因於Kubernetes對象的可用性,例如作業,一旦完成就自動終止容器。
6. ECS運行較少的現成鏡像
在Kubernetes集群中,我們看到像NGINX,Elasticsearch和Postgres這樣的通用基礎設施技術的容器鏡像的廣泛部署。 這些相同的圖像往往出現在未經調整的Docker環境中,儘管數量較少。 但是在ECS集群中,我們的調查顯示很少採用通用的,公開的容器鏡像:只有NGINX出現在超過10%的ECS環境中。 我們得出結論:許多ECS用戶可能採用託管的AWS服務,例如Amazon Relational Database Service(RDS),Amazon Elasticsearch Service和Amazon Simple Queue Service(SQS),而不是為這些基礎架構組件運行容器化服務。
7. Kubernetes的容器密度是ECS的3倍
在Kubernetes組織的中位數上,每個主機在五分鐘的抽樣窗口內運行大約九個容器,而在ECS組織中只有三個容器。 結合事實5中發現的容器的巨大差異,看起來Kubernetes用戶傾向於運行大量短期的輕量級容器,而ECS則是更接近獨立應用程序的運行時間更長的容器。
8. 大多數組織都採用「最新」容器與特定版本結合
從Docker Hub或其他容器註冊表中提取容器鏡像時,用戶可以通過提供標籤來檢索鏡像的特定版本。 大約16%的組織單獨使用:最新的標籤,這可能是一個明確或隱含的選擇:如果沒有提供標籤,則最新的是docker pull命令的默認值。 另一方面,大約10%的組織總是在提取容器鏡像時提供特定的版本標籤。 其餘的74%使用混合的標籤——在某些情況下拉取:最新的鏡像,並在其他情況下指定特定的版本。
推薦閱讀:
※把docker鏡像當作桌面系統來用
※如何編寫最佳的Dockerfile
※來自滬江、滴滴、蘑菇街、扇貝架構師的 Docker 實踐分享
※docker的幾點疑問?
※Docker 有什麼優勢?
TAG:Kubernetes | Docker | 容器 |