当听到“裸机”这个词时,你会怎么想?裸机与云原生有什么关系?如果你是这个领域的新手,需要知道什么?

本文比较了裸机与云原生,并介绍了管理员需要了解的一些概念和面临的挑战。

云原生

当部署一段代码时,比如说一个REST API——没有什么比转到AWS仪表板并将代码粘贴到文本框中,然后看着代码在AWS Lambda中以每秒计费并自动缩放的方式执行更简单的了。Lambda功能的整个接口自创建以来变化很小,这使其成为一个相对稳定的工作平台。

AWS Lambda是一个SaaS产品,它是闭源的,因此如果你担心被锁定到单个供应商,那么你可能会关注Kubernetes。与AWS Lambda相比,Kubernetes通过利用Docker或OCI格式的容器镜像,允许在云之间进行迁移。一旦打包到一个镜像中并推送到一个注册表中,你的代码就可以相对容易地在Kubernetes集群之间移动。如果你喜欢使用托管产品来减轻维护负担,那么有很多Kubernetes服务可以快速方便地设置。

像Kubernetes这样的平台的一个缺点是它的变化速度。在每个小版本之间,你可能会看到颠覆性的更改,并且必须重写你拥有的任何集成,更不用说第三方工具和代码生成工具(它们以类似的节奏变化)。因此,像Amazon EKS这样的托管云经常在后面运行几个版本。

CNCF中最流行的软件集中在堆栈的顶层。Kubernetes是基金会的第一个项目,许多后续项目与它互补。Prometheus和AlertManager这样的工具可以提高运维效率,并允许监视许多服务。NATS在本地网络和internet上提供高速消息传递。Linkerd在容器之间构建一个服务网格,以添加指标、策略和端到端加密。

作为一个受欢迎的无服务器项目的实践者和维护者,笔者经常被告知“但在无服务器项目中有服务器”。对笔者来说,无服务器一直是开发人员关注的焦点:它不是关于硬件规格和网络VLAN,而是关于API。用API进行推理是云原生的方式。

类似的,裸机服务器是Kubernetes和所有云原生应用程序的基础,无论是直接访问、通过hypervisor还是通过IaaS提供商的API访问。

你应该知道“它们在某个地方”,对很多人来说,除非你有特殊的需求,这就够了。Cherry Servers、AWS和Packet等公司在裸机隔离和性能与通常与虚拟机相关的强大API之间提供了很好的平衡。

本文后面所讨论的都是自我管理的裸机。

裸机:你所看到的就是你所得到的。没有像“无服务器”这样令人费解的术语,相反,你得到了数个GB的RAM、数个GB的网络带宽和好几GHz的CPU。这是相当令人耳目一新的。

一旦安装好,你可能就无法区分裸机和运行在AWS上的EC2 Virtual Machine之间的区别。

裸机相关词汇

笔者整理了一个关于裸机概念和工具的词汇表:

网卡——用电缆将计算机物理连接到网络的地方。可能是铜,也可能是光纤。有些计算机有多个网卡或端口。

管理端口——这是一个特定于服务器的概念。为了提高效率,管理员需要在不插入键盘和鼠标的情况下远程管理计算机。

智能平台管理接口(IPMI)——管理接口往往是特定于供应商的,通过网络使用客户端作为Java接口进行访问。

Wake on Lan(WoL)——WoL可用于远程打开计算机(而不是允许远程管理)。

PXE(Preboot Execution Envoronment)——用于在只需要网卡的情况下通过本地网络引导计算机。iPXE可以用来使用TFTP扩展现有的PXE固件,也可以直接闪存到一些网卡上。

iPXE——一个新的开源网络引导固件,也允许通过HTTP和internet引导。

Netbooting——从网络引导意味着你不需要物理访问计算机来配置它或安装操作系统。

DHCP——将IP地址和其他元数据(如主DNS服务器)分配给网络接口。

TFTP——一种基于UDP的文件服务器,用于获取固件以通过网络引导。

NFS——NFS是用于netbooting或文件共享的最常见的文件系统之一,允许Linux计算机在没有自己磁盘的情况下工作。不幸的是,NFS与容器使用的覆盖文件系统不兼容。

iSCSI——NFS的替代品,它提供块级设备而不是网络文件系统。你可以随意格式化磁盘,使用ext4文件系统甚至运行Docker。

瘦客户机——像Linux Terminal Server Project(LTSP)这样的项目允许你将任何PC变成瘦客户机,不需要任何本地存储。这对于像Raspberry Pi这样的物联网设备很有用,因为它需要依赖于闪存,而闪存的使用寿命相对较短。

操作系统——无论是部署Windows、Linux还是其他,操作系统通常必须使用交互式UI、CLI或通过预定义的配置安装。

为什么需要裸机资源调配工具?

事实证明,尽管裸机和诸如DHCP、TFTP和NFS这样的低级工具在过去20年里没有太大变化,但人们正试图使它们更容易实现自动化。许多数据中心包含异构硬件,有些带有RAID阵列,有些没有,有些带有一个磁盘,有些带有两个磁盘,以及不同的固件和功能。

资源调配工具需要在以下方面帮助我们:

Service——提供DHCP、TFP、NFS、HTTP等的软件服务(或服务器)。

Inventory——用于列出和收集服务器及其功能。

Image store——准备通过网络部署到计算机的操作系统镜像的存储。这些镜像通常需要定制,因此可以使用类似Packer的工具构建。

Delivery——将遗留工具链接在一起,以创建安装操作系统的安全方法。一些项目将此称为“工作流”,其他项目则使用状态机。

以下是社区提到的一些项目:

Digital Rebar——一个数据中心自动化、资源调配和基础设施即代码(IaC)平台,采用云原生架构设计,取代了Cobbler、Foreman、MaaS或类似技术。”

MAAS裸机即服务。

Ironic——OpenStack Foundation提供的“用于管理和配置裸机服务器的服务”。

Netboot.xyz——“一种从BIOS中的一个位置启动各种操作系统安装程序或实用程序的PXE方法,无需检索媒体即可运行该工具。”

Plundr——一个单一的二进制服务器,所有的设计都是为了使服务器、平台和应用程序的配置更容易。”

Tinkerbell——一个裸机资源配置引擎。

最流行的工具帮助自动化各种工具:PXE、DHCP、TFTP、NFS、硬盘准备和OS安装。一旦安装,Kubernetes集群可以被引导,但是这些工具被设计成更通用的用途。安装操作系统后,通常使用SSH、ansibe、Puppet或Chef等管理工具来管理计算机及其软件包。

现在,社区共享的许多新工具都在这些工具的基础上构建一个Kubernetes集群,因此我们不再比较裸机和Kubernetes。这些新工具包括:

Metalk8s——为了更容易在需要持久存储的裸机服务器上运行Kubernetes。

Metal Stack——“我们相信Kubernetes在裸机上运行最好。我们构建了一个API来管理裸机硬件,并在此基础上管理Kubernetes。”

Metal 3——“为Kubernetes配置裸机主机资源”,支持ClusterAPI并使用Ironic构建。

有些工具更进一步,采用了一种称为Cluster API(CAPI)的抽象。CAPI的目标是将一组虚拟机或服务器转变为一个功能性的Kubernetes集群。

Cluster API是一个Kubernetes项目,它将声明性的Kubernetes风格的API引入集群创建、配置和管理。它在核心Kubernetes之上提供可选的附加功能,以管理Kubernetes集群的生命周期。

期待什么?

在考虑现代云计算时,需要综合考虑控制和可移植性。一方面,我们有AWS Lambda,一个高度专有的封闭源代码SaaS产品,它提供很少的控制,但具有很高的实用性和效率。然后,我们有Kubernetes,它带来了规模化,但付出了代价。最后,我们有裸机服务器,需要通过专业工具进行周到的管理。就个人而言,笔者认为两者的交集很有趣,这就是为什么笔者对诸如Metal 3和Metal Stack这样的工具感到兴奋——这些工具旨在平滑从异构裸机硬件到Kubernetes的体验。

笔者也在密切关注Tinkerbell和Plundr的项目。Plundr采用了一种单一的方法,将尽可能多的东西捆绑到一个单一的二进制和简单的工作流引擎中——“将裸机变成云”。

Tinkerbell是一组基于过去六年数据包工作的微服务,设计时考虑到了安全性和异构硬件。笔者喜欢Tinkerbell配置工作流中的每一步都定义为Docker镜像的方式。你可以定义一个Dockerfile,然后构建一个镜像并将其存储在注册表中,从而实现可移植性、版本控制和可复制的工件。

原文链接:

https://thenewstack.io/bare-metal-in-a-cloud-native-world/

信息化和软件服务网 - 助力数字中国建设 | 责编:左右