分享

Kubernetes常见部署工具介绍及比较

 新用户2011qwLg 2022-12-28 发布于山东

1 Minikube

Minikube 是由 Kubernetes 社区维护的单机版的 Kubernetes 集群快速部署工具,是一种轻量化的Kubernetes集群。目前支持 MacOS、 Linux 以及 Windows 等多种操作系统平台, 非常适合在自己的笔记本上作为 Kubernetes 入门环境或作为开发测试环境使用, 当然由于只支持单节点不支持高可用因此不能用于生产部署。

由于支持跨平台, 但是我们知道 MacOS 以及 Windows 是不支持直接运行容器的, 因此Minikube默认会启动一个Linux虚拟机, 然后在虚拟机上通过kubeadm部署 Kubernetes 集群, 关于 kubeadm 工具下面将会介绍。 当然如果运行的 OS 本身就是 Linux 系统,则可以通过指定--vm-driver=none 参数直接部署 Kubernetes集群在操作系统上, 不需要虚拟机, 不过需要自己手动部署Docker。使用 Minikube部署单节点 Kubernetes 非常简单, 可以参考官方文档, 这里不再介绍。

通常情况下,一套完整的Kubernetes集群至少需要包括master节点和node节点,下图是常规k8s的集群架构,master节点一般是独立的,用于协调调试其它节点之用,而容器实际运行都是在node节点上,kubectl位于 master节点。

下图是 Minikube 的架构,可以看出,master 节点与其它节点合为一体,而整体则通过宿主机上的 kubectl 进行管理,这样可以更加节省资源。

2. kind

kind 是 Kubernetes 社区新维护的一个本地测试环境快速部署工具, 除了用于本地测试, 未来还可能用于做 Kubernetes 本身的 CI 集成测试。 目前 kind 工具仍处于开发阶段, 可以查看版本 1.0 的 roadmap。如 kind 的官方 Logo 所示, kind 把 Kubernetes 的 Node 节点运行在 Docker容器上,因此需要提前安装 Docker。

3 kops

kops 是生产级别的 Kubernetes 集群部署、 升级和管理命令行工具, 它主要用于在公有云平台上通过 Terraform 自动创建虚拟机作为节点并自动化部署Kubernetes 集群, 目前官方支持的公有云平台为 AWS, GCE、 DigitalOcean、OpenStack 目前处于 beta 阶段。国内 fitcloud 开源的 KubeOperator 也是一个类似的工具, 通过 Web UI 在VMware、 OpenStack 和物理机上规划、 部署和运营生产级别的 Kubernetes 集群。

4 kubespray

Kubespray 使用 Ansible 部署生产级别的 Kubernetes 集群。 对于已经了解Ansible 的人们来说, 该工具是一个不错的选择, 因为无需使用其他工具进行预配和编排。

5 kubeadm

kubeadm 是和 Kubernetes 一块发布的集群部署工具, 与 Kubernetes 在同一个代码仓库中, 因此可以说 kubeadm 是 Kubernetes 最亲的部署工具, 目前使用最多的, 同时也是社区最为推荐的 Kubernetes 部署工具。

该工具的目标是实现尽可能简单地部署符合最佳实践、 满足基本安全合规要求的 Kubernetes 高可用集群, 因此基本不需要太多的配置, 就能快速的部署一套生产可用的 Kubernetes 集群。另外其实很多其他的部署工具也都是基于 kubeadm实现的, 前面提到的 minikube、 kind 等工具都是基于 kubeadm 实现的。

6 部署工具对比

除了以上介绍的部署工具, 还有很多其他的部署工具, 这些工具中:

minikube 和 kind 主要用于单机测试, 一般不用于生产部署。

kops 主要用于在 IaaS 云平台上部署集群, 如果在公有云上部署可以尝试使用这个工具。

kubespray 需要依赖 Ansible 自动化工具, 如果熟悉 Ansible 可以尝试使用。

kubeadm 是 Kubernetes 项目自带的部署工具, 社区最为推荐并且目前使用最多的工具, 该工具基本不依赖外部工具, 也基本不需要额外配置就可以快速搭建一个符合最佳实践的Kubernetes 平台。

Kubernetes 应用程序部署工具概览将应用程序部署到 Kubernetes 就像在 yaml 或 json 中编写一些资源定义并将其与 kubectl 一起应用一样简单, 但它也可以自动化很多(并且很复杂)。在应用程序部署中, 一个流行的方式是持续部署和 GitOps 的组合:每次更改源代码后自动部署资源。 为了使你能够使用 GitOps 将应用程序部署到Kubernetes, 你需要做几件事:

l  容器镜像构建,用于将源代码和本地依赖项构建到容器镜像中。

l  资源模板,为你的环境自定义部署资源。

l  软件包管理, 可将多个资源捆绑到版本发布中并管理软件包依赖。

l  持续部署, 通常使用使用一系列步骤和阶段对您的环境进行新的更改。

l  命令式部署, 可通过编程方式管理复杂的服务生命周期, 并减少手动或脆弱的脚本化步骤。

l  自动缩放, 可根据使用和消耗情况随时对应用进行复制和资源分配。

在本文中,列出了应用程序生命周期管理中每个阶段的许多工具(主流的和非主流的)。由于很难客观地判断受欢迎程度或成功程度, 因此我尝试对这些工具进行注释, 以使其易于查看哪些大型企业支持者已在这些项目上进行了投资。 请记住, 大型的云计算支持者可能会进行多项竞争性投资, 因此, 仅仅因为它拥有一位知名的投资者, 并不意味着它可以长期生存和发展。

希望如下列表将为您寻找应用程序部署问题的解决方案提供一个起点。

容器镜像构建

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 倡导者会告诉您的那样, 这与工具无关, 而与观念有关。没有一种工具可以给您带来端到端的应用程序生命周期管理体验能让您感到满意, 因为每个人都使用自己的排列工具, 并与脚本和集成代码耦合在一起。

您可以寻找能够做好一件事的工具, 它易于替换和扩展, 或者提供最大价值,更少管理, 更易集成以及最佳端到端用户体验的工具。 没有真正错误的答案。由于存在这些折衷, 因此有必要查看每个项目的幕后人物, 投资的公司数量以及该工具的受欢迎程度。 拥有大型,多元化投资者的热门工具在您使用它们时更有可能保持增长, 而不是停滞不前并被抛弃, 这需要您用自己的时间和精力替换工具或替换投资。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多