新聞中心
六大容器管道大比拼:配置、優(yōu)勢、局限性和價格
譯文
作者:陳峻編譯 2020-04-13 09:00:26
云計算 在本文中,我們將為您選擇:Heroku、Azure DevOps、Beanstalk、Gitlab CI/CD、JenkinsX六個容器管道,討論并比較它們的配置、優(yōu)勢、局限性和價格。

【51CTO.com快譯】眾所周知,隨著DevOps帶來了巨大的轉(zhuǎn)變,容器讓開發(fā)團隊能夠以前所未有的速度交付出程序代碼。當然,我們?nèi)匀恍枰瓿蓸?gòu)建、包裝和部署容器的過程。這就是為什么我們要使用容器管道(container pipelines)的原因。
[[321441]]
如今,業(yè)界有著許多在容器管道方面的選擇,到底哪一款會適合您和您手頭項目呢?在本文中,我們將為您選擇六個容器管道,討論并比較它們的配置、優(yōu)勢、局限性和價格。
什么是容器管道?
首先,讓我們討論一下容器管道的真正含義。管道有助于自動化軟件開發(fā)過程中的各個階段,尤其是持續(xù)集成和持續(xù)交付(CI/CD)階段。從最初構(gòu)建初始鏡像,到部署至生產(chǎn)環(huán)境的過程中,容器管道能夠使得容器的每個階段都實現(xiàn)自動化。也就是說,整個容器管道通常包括三個階段:
- 集成:將更改簽入源代碼的管理之中,從而觸發(fā)構(gòu)建過程和單元測試。
- 驗收測試:將容器部署到測試環(huán)境并驗證其功能。
- 部署:將完成了全面測試的最終鏡像部署到生產(chǎn)環(huán)境中。
目前,各種容器管道工具之間雖然有所差異,但通常會包括上述二到三個階段。下面,我們來具體討論其中最常見的六種容器管道:
1. Heroku
Heroku是一個利用Docker的完整容器管道。您可以在同一個平臺上構(gòu)建,測試,驗證和部署各種容器,而無需額外配置硬件,或利用不同的服務提供者。
配置
Heroku應用程序使用heroku.yml(https://devcenter.heroku.com/articles/build-docker-images-heroku-yml)清單來進行配置。該清單定義了構(gòu)建和部署容器所需的各個步驟。如下是一個帶有自定義Dockerfile應用程序的清單示例:
- Dockerfile
- build:
- docker:
- web: Dockerfile
如您需要使用Git來部署該容器(https://devcenter.heroku.com/articles/git),只需運行如下命令:
- $ heroku stack:set container
- $ git add heroku.yml
- $ git commit -m "Add heroku.yml"
- $ git push heroku master
由于支持管道,Heroku允許您將容器部署到多個不同的環(huán)境中,以反映持續(xù)交付工作流程中的各個階段。例如:您可以在部署到生產(chǎn)環(huán)境之前,使用管道來測試登臺(staging)環(huán)境中的更改。
優(yōu)勢和局限性
Heroku非常易于使用,整個管道只需一個YAML文件即可。由于受到全面的管理,它為測試和部署的更改提供了多種環(huán)境。您甚至可以在部署不當?shù)那闆r下,實現(xiàn)更改的回滾。
當然,并非所有Heroku的功能都能夠支持Docker部署。例如:您就不能夠使用Heroku CI來運行應用程序的測試套件。這意味著:要么在構(gòu)建鏡像時運行測試套件,要么使用多階段的構(gòu)建。而且您也不能使用pipeline promotions,將容器從一個管道階段升級到下一個階段。相反,您必須將容器重新部署到目標階段。
價格
Heroku提供了一項免費計劃,其中包括:一個每月有1,000個免費運行時間的Web dyno和worker dyno。而其付費計劃的起價為:每月每個運行時間dyno 7美元,并包含諸如更大容量的dyno和改進的可擴展性等功能。您若想了解更多Heroku的定價信息,請參見。
我的觀點
Heroku是一個非常簡單且經(jīng)濟高效的容器管道解決方案。它提供了完全托管的環(huán)境,以便您全面控制CI/CD流程。它既提供了免費版本,又提供標準,因此您值得一試。
2. Azure DevOps
Azure DevOps是Microsoft的用于項目管理、源代碼管理(SCM)和CI/CD的多合一服務。它不但使您能夠控制DevOps生命周期的幾乎每個階段,而且提供了許多特定于容器的高級功能。其中包括:私有容器注冊表、以及與Azure Kubernetes Service(AKS)的集成。同時,Azure Pipelines提供了平臺式的CI/CD服務。
配置
您可以使用基于Web的用戶界面,來管理所有Azure DevOps。當然,您也可以通過已簽入的應用源碼和基于YAML的清單,來配置Azure Pipelines。其Web UI使您可以管理和跟蹤部署環(huán)境、發(fā)行版本、以及工件(artifact)等。
優(yōu)勢和局限性
如果您的團隊正在使用Azure,那么Azure DevOps則是您現(xiàn)有工作流程的自然擴展。它既支持托管和本地安裝,又支持包括Azure App Service、Kubernetes和Azure Functions在內(nèi)的多個Azure目標的部署。
不過,Azure DevOps與包括Azure在內(nèi)的其他服務并不容易集成。在配置集成時,您甚至需要從Azure容器注冊表等服務中,去復制與粘貼值。此類設置不但麻煩而且效率低下。
價格
Azure Pipelines提供了一個免費層,其中包含一個每月1800分鐘的免費并發(fā)CI/CD作業(yè)。其他“作業(yè)”的費用為40美元,而托管工件(如鏡像)的費用則為每月每GB 2美元。當然,那些Azure Boards之類的增值服務也會按月收費。您若想了解更多Azure DevOps Services的定價信息,請參見。
我的觀點
Azure DevOps非常適合需要一站式DevOps管理解決方案、或已經(jīng)使用了Azure的團隊。它通過集中到一處,極大地簡化了開發(fā)的生命周期。不過,它對于那些只需要基本容器管道的團隊來說,可能過于復雜了一些。
3. GitLab CI/CD
GitLab源于一個開源的SCM,不過它很快發(fā)展成為了一個完整的DevOps管理解決方案。與Azure DevOps類似,它提供的功能包括:項目管理、私有容器注冊表、以及包括Kubernetes在內(nèi)的一個精心構(gòu)建的環(huán)境。
配置
GitLab CI/CD由GitLab Runner所驅(qū)動,能夠在自包含的環(huán)境中,執(zhí)行CI/CD管道中的每個步驟。它通過gitlab-ci.yml清單來完成配置。該清單支持包括條件邏輯、以及導入其他清單在內(nèi)的高級配置。
另外,您也可以使用Auto DevOps,在無需配置的情況下實現(xiàn)整個管道的自動化。通過Herokuish,GitLab使用Heroku buildpacks并基于源代碼(如Dockerfile)來自動確定如何構(gòu)建應用程序。Auto DevOps可以自動運行單元測試,執(zhí)行代碼質(zhì)量分析,以及通過掃描圖像來查看安全性問題。
GitLab使用dpl工具進行部署。該工具支持包括云平臺和Kubernetes集群在內(nèi)的各種提供者。
優(yōu)勢和局限性
通過GitLab提供的非常靈活的管道,您既可以自行配置,又可以使用內(nèi)置工具實現(xiàn)完全自動化。其YAML配置允許更大范圍的項目結(jié)構(gòu)和步驟,例如:創(chuàng)建項目依賴項,以及組合來自不同項目的多個管道。由于GitLab使用的是諸如Herokuish和dpl之類的開源工具,因此它支持廣泛的項目類型、語言和部署目標。
盡管GitLab可以將Runners和工件部署到現(xiàn)有的環(huán)境中,但它本身無法配置或維護這些環(huán)境(當然,Google Kubernetes Engine和Amazon Elastic Kubernetes Service除外)。而且,它還缺少圖形化的管道配置工具,無法像使用Azure Pipelines那樣直觀。
價格
GitLab使用開放的內(nèi)核模型:它提供了一個開源的基本版本和一個帶有附加功能的付費企業(yè)版。付費版的定價從每位用戶每月4到99美元不等。這種定價機制是基于用戶數(shù)量的。它劃歸了每月可運行CI管道的分鐘,以及對于某些功能的訪問權(quán)。當然,所有版本都包括了無限的代碼存儲庫,項目計劃工具、以及每月2,000分鐘的免費管道時間。
我的觀點
GitLab是一種功能強大的CI/CD工具。在功能的豐富程度上,其開源版本足以與許多商業(yè)工具相媲美,而且它還支持托管。不過,它需要您維護一個單獨的部署環(huán)境。
4. AWS Elastic Beanstalk
Elastic Beanstalk不再是簡單的管道,而是更多用于編排的AWS資源工具。它可以實現(xiàn)自動設置,負載均衡,擴展與監(jiān)視包括ECS容器、S3存儲桶和EC2實例在內(nèi)的各種資源。您可以根據(jù)自己的特定需求,在AWS內(nèi)創(chuàng)建一個完全自定義的管道。
配置
Beanstalk的配置描述了如何部署容器,以及部署該容器的環(huán)境。這恰恰是在Dockerrun.aws.json文件中被定義的。此外,Beanstalk也引入了一些獨特的概念,例如:
- 應用程序:包括環(huán)境和版本在內(nèi)的Beanstalk組件的邏輯集合。
- 應用版本:易于部署的源代碼版本。
- 環(huán)境:運行應用程序版本所需的一組AWS資源。
優(yōu)勢和局限性
Beanstalk是一個非常強大的工具。它不僅適用于Docker,也適用于AWS。它通過提供自動擴展,滾動更新,監(jiān)視和發(fā)布管理等服務,以便用戶可以直接訪問和管理資源。
但是,Beanstalk比普通管道更加復雜。除非您使用的是單個容器環(huán)境,并且能夠?qū)⑷萜鞯陌姹九c環(huán)境緊密耦合,否則您需要在鏡像存儲庫中預構(gòu)建和托管各種Docker鏡像。而且,您只能通過Beanstalk CLI觸發(fā)相關(guān)更新。因此,如果容器失敗的話,您需要使用Beanstalk控制臺來手動予以解決。
價格
Beanstalk本身是免費的,但是它提供的AWS組件則按照正常的價格收費。例如:如果您使用ECS節(jié)點和ELB負載平衡器來配置環(huán)境,那么節(jié)點和負載平衡器都會根據(jù)您的正常配置予以收費。
我的觀點
依靠大量可用的AWS服務,Beanstalk提供了一種管理所有服務的有效方法。作為編排工具時,它功能雖然非常強大;但是用作容器管道時,則配置過于復雜。
5. Google Cloud Build
Cloud Build是基于Google Cloud Platform(GCP)所構(gòu)建的基礎(chǔ)容器CI服務。它可以直接從源代碼或Dockerfile處構(gòu)建鏡像,并直接部署到GKE、Cloud Run、以及其他GCP服務中。
配置
Cloud Build是通過cloudbuild.yaml或JSON文件配置的。您可以定義構(gòu)建鏡像的過程以及存儲結(jié)果鏡像的位置。例如:您可以構(gòu)建Docker鏡像,并通過如下簡單命令,將其推送到Google容器存儲器中:
- name: gcr.io/cloud-builders/docker
- args: ['build', '-t', 'gcr.io/$PROJECT_ID/myimage', '.']
- images: ['gcr.io/$PROJECT_ID/myimage']
同時,Cloud Build也支持觸發(fā)器,以根據(jù)源代碼的更改自動啟動構(gòu)建過程。
優(yōu)勢和局限性
Cloud Build可與其他GCP服務巧妙地集成到一起,其中包括:GKE、App Engine和Cloud Run。您可以直接控制構(gòu)建主機的大小、容量、以及緩存鏡像層,以加快構(gòu)建的速度。您還可以運行本地構(gòu)建,在完成驗證或調(diào)試構(gòu)建之后,再推送到Cloud Run處。
由于Cloud Build是圍繞著GCP構(gòu)建的,因此它僅支持有限數(shù)量的部署目標。如果您想將容器部署到其他平臺,則需要其他的步驟。此外,與GitLab類似,Cloud Build也并不提供可視化的管道配置工具。
價格
其定價主要基于構(gòu)建機器的大小和構(gòu)建的時間。標準的n1-standard-1實例每個構(gòu)建分鐘的成本為0.003美元,因此在n1-highcpu-32實例上,最高為0.064美元。而在n1-standard-1實例上,您每天可以獲得120分鐘的免費構(gòu)建時間。
我的觀點
Cloud Build的主要優(yōu)勢在于簡單、快速、易學、便宜、并且能與其他GCP服務進行良好的集成。如果您已經(jīng)有了一個部署環(huán)境,或者已經(jīng)使用到了GCP,那么建議您試用一下Cloud Build。
6. Jenkins X
Jenkins是最流行的CI/CD工具之一,Jenkins X通過添加全面的Kubernetes集成,進一步實現(xiàn)了擴展。Jenkins X不僅可以被部署到Kubernetes,還可以為您配置和管理Kubernetes集群。
配置
Jenkins X Pipelines建立在Tekton Pipelines之上,該管道有助于在Kubernetes上運行CI/CD管道。您可以使用jenkins-x.yml文件來配置管道。Jenkins X還提供了構(gòu)建包,可以幫助您將源代碼打包到鏡像之中,然后將其部署到Kubernetes里。
優(yōu)勢和局限性
Jenkins X通過兩大流行的現(xiàn)有項目-Jenkins和Kubernetes,來創(chuàng)建可擴展的CI/CD平臺。它可以自動化整個CI/CD管道,并支持預覽環(huán)境和管道升級。由于包含了Jenkins,因此它可以訪問Jenkins開發(fā)人員的整個社區(qū)。
不過值得一提的是,由于Jenkins X需要Kubernetes,因此會涉及到配置集群等問題。當然,其命令行工具可以自動化執(zhí)行此過程中的大部分操作。
價格
Jenkins X是開源的。
我的觀點
對于使用Jenkins的團隊來說,Jenkins X是順理成章之事。雖然有著一些嚴格的限制和要求,但是對于使用Kubernetes的團隊來說,它可以通過根據(jù)現(xiàn)有的基礎(chǔ)架構(gòu)實現(xiàn)原生的集成。
總結(jié)
- 對于希望在穩(wěn)定的環(huán)境中,簡單部署和托管Docker容器的團隊而言,Heroku非常適用。它提供了一個快速且可配置的平臺,支持廣泛的集成,并擁有龐大的第三方插件市場。
- Elastic Beanstalk憑借其協(xié)調(diào)AWS資源的能力,成為了那些具有復雜要求團隊的首選。
- 對于容器CI而言,GitLab具有廣泛的功能,可謂最全面的選擇。
- 除了基本功能,Auto DevOps還具有開放的內(nèi)核模型。
- Google Cloud Build能夠利用Google Cloud Platform的效率和容量進行快速的構(gòu)建。
- Jenkins X主要受益于Jenkins項目。
由于這些服務大多數(shù)都是開源的、或提供免費試用版本,因此您可以通過試用,找到最適合自己工作流程的一種容器管道。
原文標題:Comparing Container Pipelines,作者:Michael Bogan
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】
本文標題:六大容器管道大比拼:配置、優(yōu)勢、局限性和價格
文章路徑:http://fisionsoft.com.cn/article/cohspeh.html


咨詢
建站咨詢
