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

选型必看:Kubernetes应用部署工具应该选哪些?

时间:2023-03-22 17:31:55 科技观察

将应用程序部署到Kubernetes就像在yaml或json中编写一些资源定义并将它们应用到kubectl一样简单,但是自动化配置更加复杂。应用程序部署中的一种流行做法是持续部署和GitOps的结合:每次对源代码进行更改时都会自动部署资源。如果你想使用GitOps将你的应用程序部署到Kubernetes上,你需要经历以下过程:容器镜像构建,将源代码和本地依赖构建到容器镜像中。资源模板,为环境自定义部署资源的资源模板。包管理,将多个资源捆绑到发布中并管理包依赖性。持续部署(通常通过一系列操作和步骤)对环境进行更改。命令式部署以编程方式管理复杂的服务生命周期并减少手动或简单的脚本化步骤。自动缩放,基于资源使用和消耗,自动缩放管理应用程序响应和资源分配。在本文中,我描述了您可能在Kubernetes应用程序生命周期管理的各个阶段使用的一些工具(包括主流工具和非主流工具)。由于很难客观判断工具的流行度和成熟度,所以我对这些工具进行了注释,并说明了哪些大公司投资了这些项目,供大家参考和判断。但请记住,大公司通常可能对一个项目进行多项竞争性投资,因此仅仅因为一个项目拥有知名投资者并不能断定它会长期生存和繁荣。希望此列表对您寻找应用程序部署问题的解决方案有所帮助。1.容器镜像构建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)-使用CloudNativeBuildpacks构建应用程序的CLI和服务。Carvel/kbld(VMware/Pivotal)-用于构建映像并将它们推送到开发和部署工作流中的服务。GoogleCloudBuildpacks(Google)-设计用于在GoogleCloud的容器平台上运行的构建器和构建包。Makisu(Uber)-快速灵活的Docker镜像构建工具,适用于Mesos和Kubernetes等非特权容器环境。2.资源模板Helm(Microsoft,Google)-Kubernetes包管理器。Kustomize(Google,Apple)-用于自定义原始的、无模板的YAML文件的CLI,使原始YAML保持完整和可用。Carvel/ytt(VMware/Pivotal)-基于YAML结构的YAML模板工具。jsonnet/go-jsonnet(Google)-JSON模板语言。gomplate(DaveHenderson)-用于golang模板渲染的CLI,支持本地和远程数据源。Mustache(Github)-与框架无关的JSON模板引擎。3.包管理Helm(Microsoft,Google)-一个Kubernetes包管理器。CloudNativeApplicationBundles(CNAB)/Porter/Duffle(Microsoft/Deis、Docker)——这是一种包格式规范、打包程序和安装程序,用于管理与云无关的分布式应用程序。4.ContinuousDeploymentSpinnaker(Netflix,Google)-多云持续交付平台,用于快速高质量迭代发布软件变更。TerraformKubernetesProvider(Hashicorp)-支持Kubernetes资源全生命周期管理的Terraform插件。Concourse(VMware/Pivotal)-用Go和Elm编写的基于容器的连续事务处理器。JenkinsX(CloudBees)-Kubernetes的自动化CI/CD,使用Tekton、Knative、Lighthouse、Skaffold和HelmArgoCD(Intuit)提供拉取请求预览环境-一种高效的GitOpsKubernetes持续交付工具。Tekton/TektonPipelines(Google)-一种提供CI/CD风格管道资源的Kubernetes控制器。CloudBuild(Google)-一种在GoogleCloudPlatform基础设施上执行构建的服务。Skaffold(Google)-促进Kubernetes应用程序持续开发的CLI。AzureDevOps/AzurePipelines(Microsoft)-一种云服务,可自动构建和测试项目代码并使其可供其他用户使用。Brigade(Microsoft)-Kubernetes基于事件的脚本。Habitat/habitat-o??perator(Chef)-在Kubernetes上运行和管理Habitat服务的Kubernetes控制器。gitkube(Hasura)-使用gitpush在Kubernetes上构建和部署Docker镜像的工具。5.命令式部署Kubebuilder(CNCF、谷歌、苹果、IBM/RedHat)——使用CRD构建KubernetesAPI(以及控制器和操作员)的SDK。OperatorFramework/OperatorSDK(IBM/RedHat/CoreOS)-用于构建Kubernetes应用程序操作员的SDK。KUDO(D2IQ)-使用声明性方法构建生产级Kubernetes运算符的框架。Pulumi(Pulumi)-可用作代码SDK基础设施,用于在各种云上使用容器、无服务器功能、托管服务和基础设施创建和部署云软件。Carvel/kapp/kapp-controller(VMware/Pivotal)-CLI和Kubernetes控制器,用于安装应用程序CRD(helm图表、ytt模板、yaml文件)描述的配置。Isopod(Cruise)-没有YAML的Kubernetes资源配置的表达DSL和框架。6.自动扩展Horizo??ntalPodAutoscaler(内置)——Kubernetes控制器,可根据配置的指标自动扩展复制控制器、部署、副本集或有状态集中的Pod数量。VerticalPodAutoscaler(Google)-一组Kubernetes组件,可自动调整在Kubernetes集群中运行的Pod请求的CPU和内存量。AddonResizer(Google)-垂直pod自动调用器的简化版本,它根据Kubernetes集群中的节点数量修改部署的资源请求。KEDA(Microsoft)-基于kubernet的事件驱动的自动缩放组件。WatermarkPodAutoscalerController(DataDog)-扩展Horizo??ntalPodAutoscaler(HPA)的自定义控制器。Pangolin(DamianPeckett)-一种增强的Kubernetes水平Pod自动缩放器,它使用各种高度可配置的控制策略根据Prometheus指标缩放部署。PredictiveHorizo??ntalPodAutoscaler(IBM)-自定义PodAutoscaler,类似于Horizo??ntalPodAutoscaler,但添加了预测元素。Horizo??ntalPodAutoscalerOperator(BanzaiCloud)-Kubernetes控制器,它监视部署或状态集并根据自动缩放注释自动创建Horizo??ntalPodAutoscaler资源。7.写在最后正如DevOps倡导者宣扬的那样:这不是关于工具,而是关于概念。没有任何一种工具可以为您提供令您兴奋的完整生命周期端到端管理体验,因为每个工具都有自己的工具组合,这些工具可以与脚本和集成代码配合使用来完成工作。您可以找到把一件事做得很好、易于替换和扩展的工具,您也可以选择为您提供最具性价比工具的工具,让您更轻松地管理项目,降低集成成本,并拥有更好的端到端的用户体验。上述任何选项都没有错。权衡了这些因素之后,你还需要看看这些项目背后的大佬,是哪家公司投资的,项目的热度如何?那些拥有大公司或多元化投资者的主流工具更有可能继续增长。否则,你选择之后,项目不会更新或放弃,那你就只能花自己的时间和精力去维护这些工具了。