Kubernetes 應(yīng)用程序部署工具概覽
將應(yīng)用程序部署到 Kubernetes 就像在 yaml 或 json 中編寫(xiě)一些資源定義并將其與 kubectl 一起應(yīng)用一樣簡(jiǎn)單,但它也可以自動(dòng)化很多(并且很復(fù)雜)。
在應(yīng)用程序部署中,一個(gè)流行的方式是持續(xù)部署和GitOps的組合:每次更改源代碼后自動(dòng)部署資源。為了使你能夠使用 GitOps 將應(yīng)用程序部署到 Kubernetes,你需要做幾件事:
- 容器鏡像構(gòu)建,用于將源代碼和本地依賴(lài)項(xiàng)構(gòu)建到容器鏡像中。
- 資源模板,為你的環(huán)境自定義部署資源。
- 軟件包管理,可將多個(gè)資源捆綁到版本發(fā)布中并管理軟件包依賴(lài)。
- 持續(xù)部署,通常使用使用一系列步驟和階段對(duì)您的環(huán)境進(jìn)行新的更改。
- 命令式部署,可通過(guò)編程方式管理復(fù)雜的服務(wù)生命周期,并減少手動(dòng)或脆弱的腳本化步驟。
- 自動(dòng)縮放,可根據(jù)使用和消耗情況隨時(shí)對(duì)應(yīng)用進(jìn)行復(fù)制和資源分配。
在本文中,我列出了應(yīng)用程序生命周期管理中每個(gè)階段的許多工具(主流的和非主流的)。由于很難客觀(guān)地判斷受歡迎程度或成功程度,因此我嘗試對(duì)這些工具進(jìn)行注釋?zhuān)允蛊湟子诓榭茨男┐笮推髽I(yè)支持者已在這些項(xiàng)目上進(jìn)行了投資。請(qǐng)記住,大型的云計(jì)算支持者可能會(huì)進(jìn)行多項(xiàng)競(jìng)爭(zhēng)性投資,因此,僅僅因?yàn)樗鼡碛幸晃恢耐顿Y者,并不意味著它可以長(zhǎng)期生存和發(fā)展。
希望如下列表將為您尋找應(yīng)用程序部署問(wèn)題的解決方案提供一個(gè)起點(diǎn)。
容器鏡像構(gòu)建
- Moby / buildkit(Docker)——用于將源代碼轉(zhuǎn)換為構(gòu)建包的工具。
- kaniko(Google)——從容器或 Kubernetes 集群內(nèi)部的 Dockerfile 構(gòu)建容器鏡像的工具。
- img(Jess Frazelle)——一個(gè)獨(dú)立的,無(wú)守護(hù)進(jìn)程的,無(wú)特權(quán)的 Dockerfile 和 OCI 兼容的容器鏡像構(gòu)建器。
- buildah(IBM/Red Hat)——一種有利于構(gòu)建開(kāi)放容器計(jì)劃(OCI)容器鏡像的工具。
- Source-To-Image(IBM/Red Hat)——用于從源碼生成構(gòu)建包并將其注入容器鏡像的工具。
- Tanzu Build Service / kpack / pack(VMware/Pivotal)——用于使用云原生構(gòu)建包來(lái)構(gòu)建應(yīng)用程序的 CLI 和服務(wù)。
- Carvel / kbld(VMware/Pivotal)——一種用于構(gòu)建并推送鏡像到開(kāi)發(fā)和部署工作流中的服務(wù)。
- Google Cloud Buildpacks(Google)——一種用于在 Google 云平臺(tái)運(yùn)行的構(gòu)建器和構(gòu)建包。
- Makisu(Uber)——一種快速靈活的 Docker 鏡像構(gòu)建工具,可在 Mesos 和 Kubernetes 等無(wú)特權(quán)的容器化環(huán)境中使用。
資源模板
- Helm(Microsoft,Google)——Kubernetes 軟件包管理器
- Kustomize(Google,Apple)——一種用來(lái)自定義原始、無(wú)模板的 YAML 文件的CLI,使原始 YAML 保持不變并可以按原樣使用。
- Carvel / ytt(VMware/Pivotal)——一種 YAML 模板工具,該工具可在 YAML 格式而非文本格式上運(yùn)行
- jsonnet / go-jsonnet(Google)——一種JSON 模板語(yǔ)言。
- gomplate(Dave Henderson)——一種用于 Golang 模板渲染的 CLI,支持本地和遠(yuǎn)程數(shù)據(jù)源。
- Mustache(Github)——與框架無(wú)關(guān)的 JSON 模板引擎。
包管理器
- Helm(Microsoft,Google)——Kubernetes 軟件包管理器
- Cloud Native Application Bundles (CNAB) / Porter / Duffle(Microsoft/Deis,Docker)——一種軟件包格式規(guī)范、打包和安裝程序,用于管理與云無(wú)關(guān)的分布式應(yīng)用程序。
持續(xù)部署
- Spinnaker(Netflix,Google)——一個(gè)多云的持續(xù)交付平臺(tái),用于平穩(wěn)高效的發(fā)布軟件變更。
- Terraform Kubernetes Provider(Hashicorp)——一個(gè)Terraform 插件,可以對(duì) Kubernetes 資源進(jìn)行完整的生命周期管理。
- Concourse(VMware/Pivotal)——一個(gè)用 Go 和 Elm 編寫(xiě)的基于容器的連續(xù)事物。
- JenkinsX(CloudBees)——用于 Kubernetes 的自動(dòng)化 CI/CD,具有使用 Tekton,Knative,Lighthouse,Skaffold 和 Helm 進(jìn)行拉取請(qǐng)求的預(yù)覽環(huán)境。
- Argo CD(Intuit)——用于 Kubernetes 的說(shuō)明性 GitOps 持續(xù)交付工具。
- Tekton / Tekton Pipelines(Google)——一個(gè) Kubernetes 控制器,提供 CI/CD 樣式的管道資源。
- Cloud Build(Google)——提供在 Google Platform 基礎(chǔ)架構(gòu)上執(zhí)行構(gòu)建的服務(wù)。
- Skaffold(Google)——有助于持續(xù)開(kāi)發(fā) Kubernetes 應(yīng)用程序的 CLI。
- Azure DevOps / Azure Pipelines(Microsoft)——一種云服務(wù),可自動(dòng)構(gòu)建和測(cè)試您的項(xiàng)目代碼并將其提供給其他用戶(hù)。
- Brigade(Microsoft)——Kubernetes 的基于事件的腳本。
- Habitat / habitat-operator(Chef)——一個(gè) Kubernetes 控制器,用于在 Kubernetes 上運(yùn)行和管理 Habitat 服務(wù)。
- gitkube(Hasura)——使用 git push 在 Kubernetes 上構(gòu)建和部署 Docker 鏡像的工具。
命令式部署
- Kubebuilder(CNCF, Google,Apple,IBM/Red Hat)——一個(gè)使用 CRD 構(gòu)建 Kubernetes API(以及控制器和操作員)的 SDK。
- Operator Framework / Operator SDK(IBM/Red Hat/CoreOS)——用于構(gòu)建 Kubernetes 應(yīng)用程序操作員的 SDK。
- KUDO(D2IQ)——使用聲明式方法構(gòu)建生產(chǎn)級(jí) Kubernetes 操作員的框架。
- Pulumi(Pulumi)——一種基礎(chǔ)架構(gòu),像是 Code SDK,用于在任何云上使用容器,無(wú)服務(wù)器函數(shù),托管服務(wù)和基礎(chǔ)架構(gòu)來(lái)創(chuàng)建和部署云軟件。
- Carvel / kapp / kapp-controller(VMware/Pivotal)——一個(gè) CLI 和 Kubernetes 控制器,用于安裝 App CRD 所述的配置(helm 圖表,ytt 模板,純 yaml)。
- Isopod(Cruise)——在不使用 YAML 的情況下,用于 Kubernetes 資源配置的表達(dá)性 DSL 和框架。
自動(dòng)縮放
- 水平 Pod 自動(dòng)縮放器(內(nèi)置)——Kubernetes 控制器會(huì)根據(jù)配置的指標(biāo)自動(dòng)縮放 replication controller,deployment,replica set 或 stateful set 中的pod數(shù)量。
- 垂直 Pod 自動(dòng)縮放器 (Google) --- 一組 Kubernetes 組件,可自動(dòng)調(diào)整 Kubernetes 集群中運(yùn)行的 Pod 請(qǐng)求的 CPU 和內(nèi)存。
- Addon Resizer (Google) --- 垂直 Pod 自動(dòng)縮放器的簡(jiǎn)化版本,可根據(jù) Kubernetes 集群中的節(jié)點(diǎn)數(shù)量修改部署的資源請(qǐng)求。
- KEDA (Microsoft) --- 基于 Kubernetes 的事件驅(qū)動(dòng)自動(dòng)縮放組件。
- Watermark Pod 自動(dòng)縮放器 (DataDog) --- 自定義控制器,用于擴(kuò)展水平 Pod 自動(dòng)縮放器(HPA)。
- Pangolin (Damian Peckett) --- 用于 Kubernetes 的增強(qiáng)型水平 Pod 自動(dòng)縮放器,可使用各種高度可配置的控制策略,根據(jù) Prometheus 指標(biāo)擴(kuò)展部署。
- 預(yù)測(cè)水平 Pod 自動(dòng)縮放器 (IBM) --- 一個(gè)可自定義的pod自動(dòng)縮放器,和水平Pod自動(dòng)縮放器類(lèi)似,但是加入了預(yù)測(cè)元素。
- 水平 Pod 自動(dòng)縮放器操作員 (Banzai Cloud) --- 一個(gè) Kubernetes 控制器用來(lái)監(jiān)控 Deployments 或 StatefulSets,并且基于自動(dòng)縮放注解自動(dòng)創(chuàng)建水平 Pod 自動(dòng)縮放器資源。
最后
正如任何 DevOps 倡導(dǎo)者會(huì)告訴您的那樣,這與工具無(wú)關(guān),而與觀(guān)念有關(guān)。沒(méi)有一種工具可以給您帶來(lái)端到端的應(yīng)用程序生命周期管理體驗(yàn)?zāi)茏屇械綕M(mǎn)意,因?yàn)槊總€(gè)人都使用自己的排列工具,并與腳本和集成代碼耦合在一起。
您可以尋找能夠做好一件事的工具,它易于替換和擴(kuò)展,或者提供最大價(jià)值,更少管理,更易集成以及最佳端到端用戶(hù)體驗(yàn)的工具。沒(méi)有真正錯(cuò)誤的答案。
由于存在這些折衷,因此有必要查看每個(gè)項(xiàng)目的幕后人物,投資的公司數(shù)量以及該工具的受歡迎程度。擁有大型,多元化投資者的熱門(mén)工具在您使用它們時(shí)更有可能保持增長(zhǎng),而不是停滯不前并被拋棄,這需要您用自己的時(shí)間和精力替換工具或替換投資。
希望這種分類(lèi)法將很有用,并在您考慮選擇時(shí)為您提供一個(gè)起點(diǎn)。祝好運(yùn)!
我忘記了您最喜歡的工具嗎?發(fā)表評(píng)論或在 Twitter 上告訴我!