将应用程序部署到 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 上告诉我!
原文地址:http://dockone.io/article/549469