云原生世界中的裸机
当您听到“裸机”一词时您会怎么想?对我来说,它让人联想到非常有形的图像,将成排的服务器通过彩色电缆连接在一起,响亮的风扇旋转并锁定在地下室或仓库中。
作为Cloud Native Computing Foundation的大使,我将大部分时间花在堆栈上的时间,分别是“ 7级”(应用程序)和“ 8级”(人员)。我已经习惯于在需要时使用API和诸如Terraform之类的工具来获取计算。我的职业生涯中最重要的部分之一就是说服人们忘记服务器。
那么,裸机与“云原生”有什么关系?如果您是这个领域的新手,您需要了解什么?
我在Twitter上让我的粉丝分享了他们最喜欢的裸机工具,这产生了一个精选列表:很棒的裸机。请继续阅读以了解裸机与云原生云的比较,以及其中涉及的一些概念和管理员面临的挑战。
云原生地平线
在部署一段代码时,可以调用一个REST API。没有比这更简单的了,直接转到您的AWS仪表板并将代码粘贴到文本框中,然后看到代码通过AWS Lambda进行每秒计费和自动缩放即可执行。自诞生以来,Lambda功能的总体界面几乎没有变化,使其成为一个相对稳定的平台。
上图为我在hello-world上展示了Lambda函数的CPU计数和系统正常运行时间。
AWS Lambda是SaaS产品,它是开源的。因此,如果您担心陷入单一供应商的风险,则可以考虑使用Kubernetes。与AWS Lambda相比,Kubernetes通过利用Docker或OCI格式的容器映像来实现云之间的可移植性。一旦打包在映像中并推送到注册表,您的代码就可以相对轻松地在Kubernetes集群之间移动。如果您喜欢使用托管产品来减轻维护负担,则可以使用许多Kubernetes服务,这些服务可以快速简便地设置。
像Kubernetes这类平台的缺点之一是它随节速变化。在每次要发行版之间,您可能会看到重大更改,并且必须重写您拥有的所有集成,更不用说以相似的节奏进行更改的第三方工具和代码生成工具。因此,像Amazon EKS这样的托管云通常在社区后面运行多个版本。
Cloud Native Computing Foundation(CNCF)最受欢迎的软件集中在堆栈的顶层。Kubernetes是基金会的第一个项目,随后的许多项目都是对该基金会在运营级别或组织级别的补充。诸如Prometheus和AlertManager之类的工具可提高运营效率,并允许监视我们的许多服务。NATS提供跨本地网络和Internet的高速消息传递。Linkerd在容器之间建立一个网格,以添加指标,策略和端到端加密。
作为一个流行的无服务器项目的实践者和维护者,我经常被告知“无服务器中仍有服务器” 就好像我不知道一样。对我来说,无服务器一直是开发人员关注的重点:它不是关于硬件规格和网络VLAN,而是关于API。根据API进行推理是云原生方式。
以类似的方式,裸机服务器是Kubernetes以及所有云本机应用程序的基础,无论是通过管理程序还是通过IaaS提供商的API直接访问,都是裸机服务器。
您应该知道“他们在某个地方”类似的问题,对于许多人来说还是需要的,除非您有特定的需求。诸如Cherry Servers,AWS和Packet之类的一些公司在裸机 隔离和性能的优势,通常与VM相关联的强大API 之间取得了不错的平衡。
“使用裸机”从字面上看,您所看到的就是所得到的。市场上没有像“无服务器”这样令人困惑的营销术语,而是获得了GB的RAM,Gbps的网络带宽和GHz的CPU。自创建以来,这确实令人耳目一新,但也没有太大改变。
大约20年前,我在学校每天都使用裸机工作。我通过在i386和i486以及装有Intel Pentium处理器的较新计算机上安装操作系统来帮助网络管理员。就像今天一样,当时的机器仍然具有硬盘、RAM、网卡和存储。
我们大约有5个实验室,每个实验室中有30台以上的计算机,有时这涉及到读取CD-ROM并重新安装操作系统,但是有时它涉及到通过网络启动计算机以将映像远程部署到该实验室。与使用少量CD-ROM相比,它具有更大的可伸缩性,并且花费的时间更少。
这就是从裸机和操作系统开始的地方,一旦安装,就可能无法分辨它与在AWS上运行的EC2虚拟机之间的区别。
我提到Kubernetes的发展速度相对较快。事实证明,硬件没有。我们使用与20年前在实验室中使用的相同的工具和技术来启动网络上的系统。
裸机术语表
就像Kubernetes和Cloud有他们自己的术语一样,裸机也有自己的术语。我整理了有关概念和工具的快速词汇表:
1.网卡:使用电缆将计算机物理连接到网络的位置。它可以是铜,或在某些情况下是光纤。某些计算机具有多个网卡或端口。
2.管理端口:这是服务器特定的概念。为了提高效率,管理员需要在不插入键盘和鼠标的情况下远程管理计算机。
3.智能平台管理接口(IPMI):管理接口往往是特定于供应商的,并且使用客户端作为Java接口通过网络进行访问。
4.局域网唤醒(WoL):可以使用远程唤醒计算机,而不是允许远程管理。
5.PXE(预引导执行环境):用于通过本地网络引导计算机,仅需要网卡。iPXE可以用于使用TFTP扩展现有的PXE固件,也可以直接闪存到某些网卡。
6.iPXE:一种更新的开源网络启动固件,它还允许通过HTTP和Internet进行启动。
7.上网本:从网络引导工具,你并不需要物理上访问计算机进行配置或安装操作系统。
8.DHCP:将IP地址和其他元数据(例如主DNS服务器)分配给网络接口。
9.TFTP(简单文件传输):基于UDP的文件服务器,用于获取固件以通过网络引导。
10.NFS(网络文件系统):NFS是与网络引导或文件共享一起使用的最常见的文件系统之一,它允许Linux计算机在没有自己的磁盘的情况下工作。不幸的是,NFS与容器使用的覆盖文件系统不兼容
11.iSCSI(Internet小型计算机系统接口):NFS的替代产品,它提供块级设备而不是网络文件系统。您可以根据需要使用ext4文件系统格式化磁盘,甚至运行Docker。
12.瘦客户端:像Linux Terminal Server Project LTSP 这样的项目,使您可以将任何PC变成瘦客户端,而无需任何本地存储。这对于像Raspberry Pi 这样的物联网设备可能很有用,因为该设备 需要依靠寿命较短的闪存才能耗尽
13.操作系统——是否部署Windows,Linux或其他。通常必须使用交互式UI,CLI或通过预定义的配置来安装操作系统。
当然,并非所有裸机都是平等的。比如,工作站、家用PC,Intel NUC或Raspberry Pi等消费类设备不太可能带有IPMI管理端口。
上网本示例
这是通过网络启动计算机的示例工作流程(如下图):
1.裸机服务器已打开。
2.网卡尝试使用PXE通过网络进行引导。
3.发送DHCP请求以获取IP地址。
4.收到带有IP的DHCP响应,并提示在哪里寻找启动固件。
5.PXE进程现在从TFTP服务器获取固件并进行加载。
到那一时刻,一个文件系统将通过上网本上的NFS被安装,并且一个操作系统将远程运行,或者使用临时环境将OS安装到本地系统。在随后的引导中,硬盘将用于加载操作系统。
诸如上网本和网络接口之类的一些概念与虚拟机有些交叉。相当于AWS上IPMI的EC2仪表板,您可以在其中选择磁盘映像(也称为Amazon Machine Image / AMI)来启动,并自定义计算机的行为。
为什么我们需要裸机置备工具?
我最近在Twitter上问我的粉丝,最喜欢的裸机配置工具是什么。有许多不同的答案,其中包括5-10个项目,其中一些较新而另一些则更成熟。
事实证明,尽管裸机和DHCP,TFTP和NFS之类的底层工具在20多年中没有发生太大变化,但人们仍在尝试使它们更易于自动化。许多数据中心包含异构硬件,有些具有RAID阵列,有些没有RAID阵列,有些带有一个磁盘,有些带有两个磁盘,以及不同的固件和功能。
调配工具需要帮助我们:
1.服务:提供DHCP,TFP,NFS,HTTP等的软件服务(或服务器)。
2.库存:用于列出和收集服务器及其功能。
3.映像存储库:OS映像存储库,准备通过网络部署到计算机上。这些图像通常需要自定义,因此可以使用Packer之类的工具来构建。
4.交付:将旧版工具链接在一起,以创建安全的方式来安装操作系统。一些项目将此称为“工作流”,另一些项目则使用状态机。
您可以在我精心策划的超棒裸机GitHub存储库中看到Tweet的结果,它涵盖了裸机配置软件以及可简化使用低级网络(例如MetalLB和进口)的工具。
这是社区提到的一些项目的简介:
1.Digital Rebar:Digital Rebar是数据中心自动化,资源调配和基础设施即代码(IaC)平台,采用云原生架构设计,可替代Cobbler,Foreman,MaaS或类似技术。
2.Canonical的MAAS(Metal as a Service)“金属即服务”。
3.Ironic:来自OpenStack Foundation的“用于管理和配置裸机服务器的服务。
4.Netboot.xyz :一种通过PXE从BIOS内的某个位置启动各种操作系统安装程序或实用程序的方法,而无需去检索媒体即可运行该工具。
5.Plundr:Plunder是一个单二进制服务器,其设计目的是使服务器,平台和应用程序的配置更加容易。
6.Tinkerbell:一种裸机置备引擎,由Packet团队充满爱心地构建和维护。
这些最受欢迎的工具可以帮助我们在上面看到的工作流中更好地实现自动化,诸如PXE,DHCP,TFTP,NFS,硬盘预装和操作系统安装。安装后,可以启动Kubernetes集群,但是这些工具旨在用于更通用的用途。安装操作系统后,通常会使用SSH,Ansible,Puppet或Chef之类的管理工具来管理计算机及其软件包。
现在,社区共享的许多更新工具都集中在这些工具的基础上,以建立Kubernetes集群,因此我们在裸机与Kubernetes上结束了循环。示例包括:
1.Metalk8s:Scality表示 “ MetalK8s的发布是为了使在需要持久存储的裸机服务器上运行Kubernetes(k8s)更加容易”。
2.金属堆栈(Metal Stack):“我们相信Kubernetes在裸机上运行最好。我们在此基础上构建了一个用于管理裸机硬件和Kubernetes的api。”
3.Metal³:“用于Kubernetes的裸机主机配置”,来自于ClusterAPI支持并创建了Ironic。
在提到的Kubernetes工具中,有些更进一步,并包含一种称为集群API(CAPI)的抽象定义。CAPI的目标是将一组VM或服务器转变为功能正常的Kubernetes集群。
集群API是一个带声明性的Kubernetes项目,对集群创建、配置和管理来说是个Kubernetes风格的API。它在核心Kubernetes之上提供了可选的附加功能,以管理Kubernetes集群的生命周期。
未来可期
考虑现代云计算时,存在一系列控制和可移植性。一方面,我们拥有AWS Lambda,这是一种高度专有的开源SaaS产品,几乎无法控制,但实用性和效率很高。向上发展,我们拥有Kubernetes,它带来了横向扩展的超能力,但要付出一定的代价。
最后,我们有裸机服务器,需要使用专业工具进行周密的管理。我个人认为两者的交集很有趣,这就是为什么我对Metal³和Metal Stack这样的工具感到兴奋的原因,这些工具旨在使从异构裸机硬件到Kubernetes的体验变得平滑。
我还在密切关注Tinkerbell和Plundr的项目。Plundr采用整体方法,将尽可能多的捆绑到单个二进制和简单的工作流引擎中,即将裸机转变为云服务。而Tinkerbell是一组微服务,基于Packet在过去6年中的工作成果,在设计时考虑了安全性和异构硬件。我喜欢Tinkerbell设置工作流程中每个步骤都定义为Docker映像的方式。定义一个Dockerfile,然后构建映像并将其存储在注册表中,从而实现可移植性,版本控制和可复制的工件。
了解更多开源资讯欢迎关注微信公众号“开源村OSV”