当前位置: 首页 > 科技观察

Kubernetes应用程序部署工具概述

时间:2023-03-15 00:44:42 科技观察

将应用程序部署到Kubernetes就像在yaml或json中编写一些资源定义并使用kubectl应用它一样简单,但它也可以自动化很多(和复杂)。在应用程序部署中,一种流行的方法是持续部署和GitOps的结合:每次更改源代码后自动部署资源。为了能够使用GitOps将应用程序部署到Kubernetes,您需要做几件事:容器镜像构建,将源代码和本地依赖项构建到容器镜像中。用于为您的环境自定义部署资源的资源模板。包管理将多个资源捆绑到版本中并管理包依赖性。持续部署,通常使用一系列步骤和阶段对您的环境进行新的更改。命令式部署以编程方式管理复杂的服务生命周期并减少手动或脆弱的脚本化步骤。自动缩放允许根据使用和消耗随时复制应用程序和分配资源。在本文中,我为应用程序生命周期管理的每个阶段列出了许多工具(主流和非主流)。由于很难客观地判断受欢迎程度或成功与否,我尝试对这些工具进行注释,以便于了解哪些大型企业支持者投资了这些项目。请记住,大型云支持者可能拥有多项竞争性投资,因此仅仅因为它拥有知名投资者并不意味着它会长期生存和繁荣。希望以下列表能为您提供一个起点,帮助您找到应用程序部署问题的解决方案。容器镜像构建Moby/buildkit(Docker)-将源代码转换为构建包的工具。kaniko(Google)-一种用于从容器或Kubernetes集群内的Dockerfiles构建容器镜像的工具。img(JessFrazelle)-一个独立的、无守护进程的、无特权的Dockerfile和OCI兼容的容器镜像构建器。buildah(IBM/RedHat)-一种有助于构建开放容器计划(OCI)容器映像的工具。Source-To-Image(IBM/RedHat)-用于从源生成构建包并将它们注入容器镜像的工具。TanzuBuildService/kpack/pack(VMware/Pivotal)-使用云原生构建包构建应用程序的CLI和服务。Carvel/kbld(VMware/Pivotal)-一种用于构建映像并将其推送到开发和部署工作流程中的服务。GoogleCloudBuildpacks(Google)-一组用于在GoogleCloudPlatform上运行的构建器和构建包。Makisu(Uber)-一种快速灵活的Docker镜像构建工具,适用于Mesos和Kubernetes等非特权容器化环境。资源模板Helm(微软、谷歌)-Kubernetes包管理器Kustomize(谷歌、苹果)-一个CLI,用于自定义原始的、无模板的YAML文件,使原始YAML保持原样并可用。Carvel/ytt(VMware/Pivotal)-一种YAML模板工具,它基于YAML格式而不是文本jsonnet/go-jsonnet(Google)-一种JSON模板语言。gomplate(DaveHenderson)-Golang中用于模板渲染的CLI,支持本地和远程数据源。Mustache(Github)-与框架无关的JSON模板引擎。包管理器Helm(Microsoft,Google)-Kubernetes包管理器CloudNativeApplicationBundles(CNAB)/Porter/Duffle(Microsoft/Deis,Docker)-用于管理与云无关的分布式应用程序的包格式规范、打包和安装程序。持续部署Spinnaker(Netflix、谷歌)——一个多云持续交付平台,用于平稳高效地发布软件变更。TerraformKubernetesProvider(Hashicorp)-一个Terraform插件,可以对Kubernetes资源进行完整的生命周期管理。Concourse(VMware/Pivotal)-用Go和Elm编写的基于容器的ConcourseThing.JenkinsX(CloudBees)-Kubernetes的自动化CI/CD,带有使用Tekton、Knative、Lighthouse、Skaffold和Helm进行拉取请求的预览环境。ArgoCD(Intuit)-用于Kubernetes的说明性GitOps持续交付工具。Tekton/TektonPipelines(Google)-一个提供CI/CD风格管道资源的Kubernetes控制器。CloudBuild(Google)-提供在Google平台基础设施上执行构建的服务。Skaffold(Google)-促进Kubernetes应用程序持续开发的CLI。AzureDevOps/AzurePipelines(Microsoft)-一种云服务,可自动构建和测试您的项目代码并使其可供其他用户使用。Brigade(Microsoft)-Kubernetes基于事件的脚本。Habitat/habitat-o??perator(Chef)-用于在Kubernetes上运行和管理Habitat服务的Kubernetes控制器。gitkube(Hasura)-使用gitpush在Kubernetes上构建和部署Docker镜像的工具。命令式部署Kubebuilder(CNCF、谷歌、苹果、IBM/RedHat)——一个使用CRD构建KubernetesAPI(以及控制器和操作员)的SDK。OperatorFramework/OperatorSDK(IBM/RedHat/CoreOS)-用于构建Kubernetes应用程序操作员的SDK。KUDO(D2IQ)-使用声明性方法构建生产级Kubernetes运算符的框架。Pulumi(Pulumi)-一种基础设施,如CodeSDK,用于使用容器、无服务器功能、托管服务和任何云上的基础设施创建和部署云软件。Carvel/kapp/kapp-controller(VMware/Pivotal)-一个CLI和Kubernetes控制器,用于安装AppCRD描述的配置(helm图表、ytt模板、纯yaml)。Isopod(Cruise)-不使用YAML的Kubernetes资源配置的表达DSL和框架。自动缩放Horizo??ntalPodAutoscaler(内置)-Kubernetes控制器根据配置的指标自动缩放复制控制器、部署、副本集或有状态集中的Pod数量。VerticalPodAutoscaler(Google)---一组Kubernetes组件,可自动调整在Kubernetes集群中运行的Pod请求的CPU和内存。AddonResizer(Google)---垂直pod自动缩放器的简化版本,它根据Kubernetes集群中的节点数量修改部署的资源请求。KEDA(Microsoft)---基于Kubernetes的事件驱动自动缩放组件。WatermarkPodAutoscaler(DataDog)---自定义控制器来缩放Horizo??ntalPodAutoscaler(HPA)。Pangolin(DamianPeckett)——一种增强的Kubernetes水平pod自动缩放器,它使用各种高度可配置的控制策略根据Prometheus指标缩放部署。PredictiveHorizo??ntalPodAutoscaler(IBM)---一种可自定义的Pod自动缩放器,类似于Horizo??ntalPodAutoscaler,但添加了预测元素。Horizo??ntalPodAutoscalerOperator(BanzaiCloud)---一个Kubernetes控制器,它监视Deployments或StatefulSets并根据自动缩放注释自动创建水平Pod自动缩放器资源。最后,正如任何DevOps倡导者都会告诉您的那样,这与工具无关,而与概念有关。没有任何一种工具可以为您提供让您满意的端到端应用程序生命周期管理体验,因为每个人都使用自己的编排工具,再加上脚本和集成代码。您可以寻找一种可以很好地完成一件事、易于替换和扩展的工具,或者可以提供最大价值、更少管理、更容易集成和最佳端到端用户体验的工具。没有真正错误的答案。由于这些权衡,值得了解每个项目背后的人、投资的公司数量以及该工具的受欢迎程度。拥有大量多元化投资者的热门工具更有可能在您使用它们的同时保持增长,而不是停滞不前并被抛弃,需要您更换工具或用自己的时间和精力替换投资。希望这个分类法对您有用,并在您考虑您的选择时为您提供一个起点。祝你好运!我忘记了你最喜欢的工具吗?发表评论或在Twitter上让我知道!