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