作者 | Catherine Paganini、Jason Morgan

来源 | K8sMeetup

头图 | 下载于视觉中国

在本系列之前的文章中,我们讨论了 CNCF 云原生全景图的各层:供应层、运行时层、编排管理层以及应用定义和开发层。本文我们将聚焦在平台层。

正如我们在本系列文章中看到的那样,每个类别都解决了特定的问题。仅仅存储并不能提供管理应用程序所需的全部功能,你还需要编排管理、容器运行时、服务发现、网络、API 网关等工具。平台将来自不同层的工具捆绑在一起,以解决更大的问题

平台里其实没有新的工具。你当然可以构建自己的平台,事实上,许多组织都这样做。但是,可靠、安全地配置和微调不同的模块,同时确保始终更新所有技术并修补漏洞,这不是一件容易的事。你需要一支专门的团队来构建和维护它。如果没有所需的专业知识,那么使用平台可能会更好。对于某些组织,尤其是工程团队规模较小的组织,平台是采用云原生技术的唯一方法

你可能已经注意到了,所有的平台都是围绕 Kubernetes 来演化的,因为 Kubernetes 是云原生技术栈的核心。

Kubernetes 发行版

是什么

发行版是指供应商以 Kubernetes 为核心(采用未经修改的开源代码,尽管有些人对其进行了修改),并将其打包以进行重新发行。通常这个过程需要查找和验证 Kubernetes 软件,并提供集群安装和升级的机制。许多 Kubernetes 发行版都包含其他闭源或开源的应用程序。

解决的问题

开源 Kubernetes 并未指定特定的安装工具,而是将许多设置配置选项提供给用户。此外,有限的社区资源(包括社区论坛、StackOverflow、Slack 或 Discord 等)已经不能解决所有的问题。

随着 Kubernetes 的普及,Kubernetes 的使用变得越来越容易,但是查找和使用开源安装程序可能会面临挑战。用户需要了解使用哪个版本,在何处获取,以及特定组件是否能兼容。此外,还需要决定集群上部署什么软件,要使用哪些设置来确保平台的安全性、稳定性和高性能。所有这些都需要丰富的 Kubernetes 专业知识,而这些知识可能并不容易获得。

如何解决

Kubernetes 发行版提供了一种安装 Kubernetes 的可靠方式,并提供了合理的默认值以创建更好、更安全的操作环境。Kubernetes 发行版为供应商和项目提供了所需的掌控度和可预测性,以帮助他们支持客户部署、维护和升级 Kubernetes 集群。

这种可预测性使发行版提供商在客户遇到生产问题时可为其提供支持。发行版常常提供经过测试和受支持的升级路径,使用户的 Kubernetes 集群保持最新的版本。此外,发行版通常提供可在 Kubernetes 上部署的软件,从而使其更易于使用。

对应的工具

如果你已经安装了 Kubernetes,那你可能已经使用了 kubeadm 之类的工具来启动和运行集群。即便如此,你可能还需要 CNI(容器网络接口)来安装和配置它。然后,你可能已经添加了一些存储类,一个处理日志消息的工具,可能还需要个 ingress controller,以及更多其他的工具。Kubernetes 发行版将自动执行部分或全部设置。它还将根据自己对最佳实践或智能默认值的理解提供配置设置。此外,大多数发行版都将捆绑一些经过测试的扩展或附件,以确保用户可以尽快使用新集群。

我们以 Kublr 为例。它以 Kubernetes 为核心,主要捆绑了来自供应层、运行时层、编排管理层的工具。所有模块都预先配置了一些选项并且开箱即用。不同的平台聚焦不同的功能。就 Kublr 而言,重点是在运维方面,而其他平台则可能聚焦在开发工具上。

此类别中有很多工具选项。如下图所示,企业可以选择和供应商达成技术合作,比如国外的 Canonical、VMware、Mirantis、SUSE,国内的网易、火山引擎和京东,它们都可以提供出色的开源和商业工具,建议在评估发行版时仔细考虑自己的需求。

托管 Kubernetes

是什么

托管 Kubernetes 是由 Amazon Web Services(AWS)、DigitalOcean、Azure 或 Google 等基础设施提供商(云厂商)提供的服务,允许客户按需启动 Kubernetes 集群。云厂商负责管理 Kubernetes 集群的一部分,通常称为控制平面。托管 Kubernetes 服务与发行版相似,但由云厂商在其基础架构上进行管理。

解决的问题

托管 Kubernetes 使团队只需在云厂商开设一个账户即可开始使用 Kubernetes。它解决了 Kubernetes 入门五个过程中的“五 W”问题:

  • Who:云厂商;

  • What:他们托管的 Kubernetes 产品;

  • When:现在;

  • Where:云厂商的基础架构上;

  • Why:由你决定。

如何解决

由于 Kuberentes 托管服务提供商负责管理所有细节,因此托管的 Kubernetes 服务是开始云原生之路的最简单方法。用户所需要做的就是开发自己的应用程序并将其部署在托管的 Kubernetes 服务上,这非常方便。托管产品允许用户启动 Kubernetes 集群并立即开始*,同时对集群可用性承担一些责任。值得注意的是,这些服务的额外便利性会造成灵活性的降低:托管的 Kubernetes 服务和云厂商绑定,且用户无法访问 Kubernetes 控制平面,因此某些配置选项会受到限制

*AWS 的 EKS 略有例外,因为它还要求用户采取一些其他步骤来准备集群。

对应的工具

托管 Kubernetes 是由供应商(通常是基础架构托管提供商)提供的按需使用的 Kubernetes 集群,供应商负责配置群集和管理 Kubernetes  控制平面。再次说明,值得注意的例外是 EKS,其上的单个节点配置由客户端决定。

托管 Kubernetes 服务使组织可以将基础架构组件管理外包出去,这样可以快速配置新集群并降低运营风险。主要的权衡取舍在于可能需要为控制平面管理付费,并且用户的管理权限有限。与自己搭建 Kubernetes 群集相比,托管服务在配置 Kubernetes 群集方面有更严格的限制

在这个领域中有许多供应商和项目,在撰写本文时,尚无 CNCF 项目。


Kubernetes 安装程序

是什么

Kubernetes 安装程序可帮助你在机器上安装 Kubernetes,它们可自动化 Kubernetes 的安装和配置过程,甚至可以帮助升级。Kubernetes 安装程序通常与 Kubernetes 发行版或托管 Kubernetes 产品结合使用或由它们使用。

解决的问题

与 Kubernetes 发行版相似,Kubernetes 安装程序可简化 Kubernetes 的上手过程。开源的 Kubernetes 依赖于 kubeadm 之类的安装程序。截至本文撰写之时,kubeadm 可用于启动和运行 Kubernetes 集群,是 CKA(Kubernetes 管理员认证) 测试的一部分。

如何解决

Kubernetes 安装程序简化了 Kubernetes 的安装过程。像发行版一样,它们为源代码和版本提供经过审核的源。它们还经常自带 Kubernetes 环境配置。像 kind (Docker 中的 Kubernetes)这样的 Kubernetes 安装程序允许通过单个命令获得 Kubernetes 集群。

对应的工具

无论是在 Docker 上本地安装 Kubernetes,启动和配置新的虚拟机,还是准备新的物理服务器,都需要一个工具来处理各种 Kubernetes 组件的准备工作。

Kubernetes 安装程序可简化该过程。有些处理节点启动,还有一些仅配置已供应的节点。它们都提供不同程度的自动化,并且适合不同的用例。开始使用 Kubernetes 安装程序时,应先了解自己的需求,然后选择可以满足这些需求的安装程序。在撰写本文时,kubeadm 是 Kubernetes 生态系统中至关重要的工具,已包含在 CKA 测试中。Minikubekindkopskubespray 都是 CNCF 中的 Kubernetes 安装程序项目。

PaaS/容器服务

是什么

PaaS(平台即服务)是一种环境,允许用户运行应用程序而不必了解底层计算资源。此类别中的 PaaS 和容器服务是一种机制,可为开发人员托管 PaaS 或托管他们可以使用的服务。

解决的问题

在本系列文章中,我们讨论了有关“云原生”的工具和技术。PaaS 连接了此领域中的许多技术,可为开发人员提供直接价值。它回答了以下问题:

  • 我如何在各种环境中运行应用程序?

  • 一旦应用程序运行起来,我的团队和用户将如何与它们交互?

如何解决

PaaS 为组合运行应用程序所需的开源和闭源工具提供了选择。许多 PaaS 产品包含处理 PaaS 安装和升级的工具,以及将应用程序代码转换为正在运行的应用程序的机制。此外,PaaS 可以处理应用程序实例的运行时需求,包括按需扩展单个组件以及可视化单个应用程序的性能和日志消息

对应的工具

组织正在采用云原生技术来实现特定的业务或目标。与构建自定义应用程序平台相比,PaaS 可快速让组织实现价值。HerokuCloud Foundry Application Runtime 之类的工具可帮助组织快速启动并运行新的应用程序,它们可提供运行云原生应用程序所需的工具。任何 PaaS 都有自身的限制。大多数只支持一种语言或一部分应用程序类型,其自带的一些工具选项可能并不适合你的需求。无状态应用程序通常在 PaaS 中表现出色,而数据库等有状态应用程序通常不太适合 PaaS。目前在这个领域没有 CNCF 项目,但是大多数产品都是开源的。

总结

如文中所介绍,有多种工具可帮助简化 Kubernetes 的采用。Kubernetes 发行版、托管 Kubernetes 服务、Kubernetes 安装程序以及 PaaS 都承担了一些安装和配置的工作,可进行预打包。每个解决方案都有其自己的特点。

在采用上述任何一种方法之前,需要进行一些研究,以确定适合自己需求的最佳解决方案。你可能需要考虑:

  • 我会遇到一些需要掌控控制平面的场景吗?如果有,托管解决方案可能不是一个很好的选择。

  • 我有没有一个小型团队来管理“标准”工作负载,并需要分流尽可能多的操作任务?如果有,托管解决方案可能非常合适你。

  • 便携性对我来说重要吗?

  • 生产就绪情况如何?

还有更多问题需要考虑。没有一个“最佳工具”,但是对于你的特定需求,肯定可以选择一个有效工具。希望本文能帮助你将搜索范围缩小到正确的区域。

关于云原生,我们还有:

云原生全景图之五:应用程序定义和开发层

云原生全景图之四:编排和管理层

三探云原生全景图,这次聊聊运行时层

俯瞰云原生,这便是供应层

都在说云原生,它的技术图谱你真的了解吗?

2020-2021中国开发者调查报告重磅来袭,直接扫码或微信搜索「CSDN」公众号,后台回复关键词「开发者」,快速获取完整的报告内容!


更多精彩推荐
☞实战 | Service Mesh 微服务架构实现服务间 gRPC 通信☞Kubernetes 稳定性保障手册 -- 可观测性专题☞走过 30 年:银行数据库的下一步是国产化
点分享点收藏点点赞点在看
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐