【Linux】Cobbler实现自动化安装操作系统--原理篇

admin / Linux / / 3042 字 · 约 9 分钟 / 418 次阅读 /
📑 文章章节大纲 (点击平滑直达)

了解 Cobbler 之前,我们需要先对 PXE 及 KickStart 有一定的认识。

PXE

PXE(Pre-bootExecution Environment),预启动执行环境,通过网络接口启动计算机,支持 Client 通过网络从 Server 下载映像,并由此通过网络启动操作系统;在启动过程中,Client 要求 Server 分配 IP 地址,再用 TFTP 下载一个启动软件包到本机内存中执行,由这个启动软件包完成 Client 基本的软件设置并安装操作系统。   要达成 PXE 有两个必须的条件:   (1)Client 的网卡必须要支持 PXE 功能,并且开机时选择从网卡启动;   (2)完整的 PXE Server 必须要提供含有 DHCP、TFTP 服务,还要加上 NFS/FTP/HTTP(选择一样即可)等提供安装文件(安装镜像的解压文件)。

KickStart

KickStart 是一种无人值守的安装方式,它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为 ks.cfg 的文件。我们可以简单理解为一个自动安装应答配置管理程序。通过读取这个配置文件,系统知道怎么去分区,要安装什么包,配什么 IP,优化什么内核参数等等。其主要组成部分包括:

  • KickStart 安装选项,包含语言的选择,防火墙,密码,网络,分区的设置等;
  • %Pre 部分,安装前解析的脚本,通常用来生成特殊的 ks 配置,比如由一段程序决定磁盘分区等;
  • %Package 部分,安装包的选择,可以是@core 这样的 group 形式,也可以是 vim-*这样的包形式;
  • %Post 部分,安装后执行的脚本,通常用来做系统的初始化设置,比如启动的服务,相关的设定等。

PXE+KickStart 的工作流程

img

    1. PXE Client 向 DHCP Server 发送请求:支持 PXE 的网络接口卡(NIC)的 Client 的 BIOS 设置成为网络启动,通过 UDP(简单用户数据报协议)发送一个广播请求,向网络中的 DHCP Server 索取 IP 地址等信息。
    1. DHCP Server 提供信息:DHCP Server 收到 Client 的请求,验证是否来至合法的 PXE Client 的请求,验证通过它将给 Client 返回响应,响应内容包含了为 Client 分配的 IP Address、TFTP Server 以及配置文件所在位置。
    1. PXE Client 请求下载启动文件:Client 收到 DHCP Server 的响应后,会回应一个帧,以请求传送启动所需文件,这些启动文件包括:pxelinux.0(相当于 boot loader)、pxelinux.cfg/default、vmlinuz、initrd.img 等文件。
    1. TFTP Server 响应 Client 请求并传送文件:Client 会根据该文件中定义的引导顺序,启动 Linux 安装程序的引导内核。
    1. 请求下载自动应答文件:Client 通过 pxelinux.cfg/default 文件成功的引导 Linux 安装内核后,安装程序首先必须确定你通过什么安装介质来安装 linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。(或许你会说,刚才 PXE 不是已经获取过 IP 地址了吗?为什么现在还需要一次?这是由于 PXE 获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。由于它们需要的内容不同造成 PXE 模块和安装程序是相对独立的,PXE 的网络配置并不能传递给安装程序。从而进行两次获取 IP 地址过程。)接着读取该文件中指定的自动应答文件 ks.cfg 所在位置,根据该位置请求下载该文件。
    1. Client 安装操作系统:将 ks.cfg 文件下载回来后,通过该文件找到 OS Server,并按照该文件的配置请求下载安装过程需要的软件包。

Cobbler

概述

Cobbler 由 Python 语言开发,是对 PXE 和 KickStart 的封装,融合很多特性,提供了 CLI 和 Web 的管理形式,能更加方便地实行网络安装;Cobbler 也提供了 API 接口,因此使用其它语言也很容易做扩展。Cobbler 不仅可以安装物理机,同时也支持 KVM、XEN 虚拟化、Guest OS 的安装;更多的是它还能结合 Puppet 等集中化管理软件,实现自动化的管理。

组成

Cobbler 的结构基于一组注册的对象,每个对象都是相互关联的实体(该实体指向另一个实体,或者另一个实体指向该实体)。当一个对象指向另一个对象时,它就继承了被指向对象的数据,并可覆盖或添加更多特定信息。对象类型的定义为:

  • 发行版(Distribution):表示一个操作系统,它承载了 kernel 和 initrd 的信息,以及内核参数等其它数据;
  • 配置文件(Profile):包含一个发行版、一个 KickStart 文件以及可能的存储库,还包含更多特定的内核参数等其它数据;
  • 系统(System):包含一个配置文件或一个镜像,还包含 IP Address 和 MAC Address、电源管理(地址、凭据、类型)以及更为专业的数据等信息;
  • 存储库(Repository):保存一个 yum 或 rsync 存储库的镜像信息;
  • 镜像(Image):可替换一个包含不属于此类别的文件的发行版对象。

基于注册的对象以及各个对象之间的关联,Cobbler 知道如何更改文件系统以反映具体配置,因为系统配置的内部是抽象的,因此我们可以只关注想要执行的操作。

工作原理

Server 端:

  • 启动 Cobbler 服务
  • 进行 Cobbler 错误检查,执行 cobbler check 命令
  • 进行配置同步,执行 cobbler sync 命令
  • 复制相关启动文件文件到 TFTP 目录中
  • 启动 DHCP 服务,提供地址分配
  • DHCP 服务分配 IP 地址
  • TFTP 传输启动文件
  • Server 端接收安装信息
  • Server 端发送 ISO 镜像与 Kickstart 文件

Client 端:

  • 客户端以 PXE 模式启动
  • 客户端获取 IP 地址
  • 通过 TFTP 服务器获取启动文件
  • 进入 Cobbler 安装选择界面
  • 客户端确定加载信息
  • 根据配置信息准备安装系统
  • 加载 Kickstart 文件
  • 传输系统安装的其它文件
  • 进行安装系统

小结

  • Cobbler 可以看作是一个更多功能的 PXE,它实现系统安装和 PXE+KickStart 也差不多,需要的文件和过程大致都一样;
  • Cobbler 能自动管理 DNS/TFTP/DHCP/RSYNC 这四个服务(但似乎对 TFTP 的管理有点 bug,需要手动启动 TFTP),且 Cobbler 依赖于 HTTPD(PXE 支持 HTTP/NFS/FTP);
  • 基本的系统安装,Cobbler 只需生成一个 Distro 和一个 Profile 即可:Distro 相当于一个镜像,它提供安装系统过程中所需的一切文件,如 vmlinuz,initrd 以及 rpm 包等;Profile 的作用是为了自动修改 pxelinux.cfg/default 文件,每生成或修改一次 profile,都会在 default 文件中修改或追加对应的 label;
  • 除了 Distro/Profile 之外,Cobbler 还管理 System/Images/Repository 等,但是用的很少。
admin

admin

云原生架构 · 全栈开发

感谢阅读本文!记录系统架构思考与实战复盘。专注于 Python、Django、PostgreSQL 与云原生容器化工程实践。