近期,最新一份全球Docker生產(chǎn)數(shù)據(jù)報告中,根據(jù)全球Docker使用情況的最新調(diào)查顯示,容器已不再是一項利基技術(shù)。
隨著容器化變得越來越主流,我們決定研究編排容器工作負(fù)載的技術(shù)生態(tài)系統(tǒng)。 Kubernetes,Mesos,Amazon彈性容器服務(wù)(ECS),Azure容器服務(wù)和Google Kubernetes引擎等平臺提供了一個抽象層和自動化來幫助管理大量的臨時容器。 以下的調(diào)查探討了Datadog的客戶在任意一天中如何使用編排工具(尤其是ECS和Kubernetes)管理數(shù)百萬個容器。
1. ECS在AWS中盛行 但Kubernetes在其他領(lǐng)域領(lǐng)先
容器運行的環(huán)境似乎強烈地影響了編排工具的選擇。 我們在AWS中運行容器編排器的大多數(shù)客戶選擇ECS,但我們也看到在AWS環(huán)境中大量使用Kubernetes。 在Google云平臺,Azure,本地數(shù)據(jù)中心和其他環(huán)境中,絕大多數(shù)公司選擇Kubernetes進行編排。
值得注意的是,亞馬遜在2017年12月推出了兩項服務(wù),可能會重塑AWS環(huán)境中的編排環(huán)境。 Amazon為Kubernetes(EKS)提供的新彈性容器服務(wù)將托管的Kubernetes群集引入AWS云,而AWS Fargate是一種新的服務(wù),用于部署容器而不用管理底層基礎(chǔ)架構(gòu)。 我們將跟蹤這些服務(wù)在未來幾個月中將如何影響業(yè)務(wù)流程的使用。
2. Kubernetes的Docker環(huán)境份額 9個月內(nèi)增長了11%
隨著越來越多的公司采用Docker,我們也看到了更多容器編排器的使用——特別是Kubernetes。 (在本報告中,Kubernetes數(shù)據(jù)包括運行自我管理群集的公司,以及Google Kubernetes Engine,Azure Container Service和其他托管Kubernetes服務(wù)的用戶。)
截至2017年10月,Kubernetes占有Docker環(huán)境的41%份額,而今年年初只有30%。 考慮到Docker的快速增長,所有運行Kubernetes的Datadog客戶的份額增加了約50%。
3. ECS在AWS Docker環(huán)境中的份額 9個月內(nèi)增長7%
隨著編排越來越流行,AWS公司越來越多地采用Amazon ECS來管理其容器船隊。 截至2017年10月,ECS在AWS中擁有34%的Docker環(huán)境份額,高于1月份的27%。 由于AWS上的Docker使用情況正在不斷增加,這相當(dāng)于運行ECS的所有Datadog客戶的份額增加了大約40%。
4. 編排縮短了40%的Docker主機壽命
編排的范圍超出了容器船隊,也影響了底層基礎(chǔ)設(shè)施。 在由ECS或Kubernetes編排的集群中,主機的平均使用壽命約為10天,而沒有編排的Docker主機則有17天。 作為比較,非Docker主機平均生活23天。 我們得出結(jié)論:編排使組織能夠?qū)W⒂诜?wù)和工作負(fù)載,將主機視為一次性基礎(chǔ)設(shè)施單元,可根據(jù)需求自動配置或銷毀。
5. Kubernetes容器流失比ECS容器快8倍
盡管編排工具的選擇在很大程度上取決于基礎(chǔ)設(shè)施環(huán)境,但ECS和Kubernetes一旦部署,往往會出現(xiàn)重大的運營差異。 尤其是,Kubernetes的工作量非常快地通過容器來攪動:在Kubernetes環(huán)境中,容器的平均壽命僅為1.5天,而ECS管理的容器的平均壽命為12天。 這種差異可能部分歸因于Kubernetes對象的可用性,例如作業(yè),一旦完成就自動終止容器。
6. ECS運行較少的現(xiàn)成鏡像
在Kubernetes集群中,我們看到像NGINX,Elasticsearch和Postgres這樣的通用基礎(chǔ)設(shè)施技術(shù)的容器鏡像的廣泛部署。 這些相同的圖像往往出現(xiàn)在未經(jīng)調(diào)整的Docker環(huán)境中,盡管數(shù)量較少。 但是在ECS集群中,我們的調(diào)查顯示很少采用通用的,公開的容器鏡像:只有NGINX出現(xiàn)在超過10%的ECS環(huán)境中。 我們得出結(jié)論:許多ECS用戶可能采用托管的AWS服務(wù),例如Amazon Relational Database Service(RDS),Amazon Elasticsearch Service和Amazon Simple Queue Service(SQS),而不是為這些基礎(chǔ)架構(gòu)組件運行容器化服務(wù)。
7. Kubernetes的容器密度是ECS的3倍
在Kubernetes組織的中位數(shù)上,每個主機在五分鐘的抽樣窗口內(nèi)運行大約九個容器,而在ECS組織中只有三個容器。 結(jié)合事實5中發(fā)現(xiàn)的容器的巨大差異,看起來Kubernetes用戶傾向于運行大量短期的輕量級容器,而ECS則是更接近獨立應(yīng)用程序的運行時間更長的容器。
8. 大多數(shù)組織都采用“最新”容器與特定版本結(jié)合
從Docker Hub或其他容器注冊表中提取容器鏡像時,用戶可以通過提供標(biāo)簽來檢索鏡像的特定版本。 大約16%的組織單獨使用:最新的標(biāo)簽,這可能是一個明確或隱含的選擇:如果沒有提供標(biāo)簽,則最新的是docker pull命令的默認(rèn)值。 另一方面,大約10%的組織總是在提取容器鏡像時提供特定的版本標(biāo)簽。 其余的74%使用混合的標(biāo)簽——在某些情況下拉取:最新的鏡像,并在其他情況下指定特定的版本。