一、Cobbler介绍
1.1、Cobbler是什么
Cobbler是一款适用于各类Linux系统自动化部署工具,它集成了【DHCP】【TFTP】【DNS】【HTTP】等服务。它实现了创建一个中央管理节点,就可以将【配置服务】【创建存储库】【解压缩操作系统安装介质】【代理或集成一个配置管理系统】【控制电源管理】等功能集于一体。Cobbler的最终目的是:实现无需人工干预的自动化系统安装部署。
Cobbler是使用Python开发的,是对PXE的二次封装。Cobbler融合了多种功能,并提供了CLI与Web的管理形式;同时,Cobbler也提供了API接口,方便二次开发使用;不仅不可安装在物理机上,同时也支持KVM、xen等虚拟化的安装;另外,它还可以结合Puppet等集中化的管理软件,实现自动化管理,与此同时还能管理【DHCP】【DNS】及其【YUM】包镜像。
1.2、Cobbler有啥用
|--------|--------------------------------------------------------------|
| 序号 | Cobbler能做什么 |
| 1 | 可实现对服务器批量自动化安装操作系统(如:RHEL、Centos、AlmaLinux、Ubuntu等Linux系统)。 |
| 2 | 操作系统安装过程中,可根据需求,实现自定义配置系统参数(如:修改IP、主机名称、指定的安装包等)。 |
| 3 | 操作系统安装完成后,可自定义执行脚本,完成系统的基础软件初始化(如:系统的优化配置、Zabbix-agent的部署等)。 |
| 4 | 可以当做内部的YUM源,并在系统安装时进行初始化。 |
| 5 | 可自动化重装系统。 |
| 6 | 支持API,可无缝融合到自建的运维平台中。 |
| 7 | 支持网卡的路由配置、DNS配置、bonding操作。 |
[Cobbler有啥用]
1.3、Cobbler的应用架构

|--------|---------------------------------------|--------------------|
| 步骤 | Cobbler的服务器端操作 | 客户端操作 |
| 1 | 启动Cobbler服务,执行【cobbler check】命令进行错误检查 | 客户端以PXE模式启动 |
| 2 | 执行【cobbler sync】命令进行配置同步 | 客户端获取到IP地址 |
| 3 | 复制相关的启动文件到TFTP目录中 | 客户端通过TFTP服务器获取启动文件 |
| 4 | 启动DHCP服务,提供IP地址分配 | 文件加载到客户端的内存中运行并引导 |
| 5 | DHCP服务分配IP地址 | Cobbler安装选择界面 |
| 6 | TFTP传输启动文件 | 确定安装选项 |
| 7 | Server端接收安装信息 | 根据配置信息开始安装系统 |
| 8 | Server端发送ISO镜像与Kickstart文件 | 加载Kickstart文件 |
| 9 | | 根据ks文件的定义获取对应的安装文件 |
| 10 | | 在ks文件的指导下安装操作系统 |
[Cobbler的应用架构]
二、PXE介绍
2.1、PXE是什么
PXE是英特尔(Intel)公司开发的网络引导技术,它提供了一种使用网络接口启动计算机的机制,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或整个操作系统的引导技术。PXE严格来说并不是一种安装方式,而是一种引导方式。
要使用PXE安装系统的必要条件是:计算机必须包含一个支持PXE的网卡,且该网卡中必须要有PXE Client(目前市面上的独立网卡基本上都支持PXE启动,且都集成了BOOTROM芯片)。
2.2、PXE的工作流程
PXE是工作在Client/Server模式下的,其中PXE Client集成在网卡的ROM中,当计算机引导时,BIOS把PXE Client引导到内存中执行,由PXE Client将放置在远端主机(Server)的文件通过网络下载到本地运行。
运行PXE协议需要设置【DHCP服务器】和【TFTP服务器】;其中DHCP服务器是给PXE Client(需要安装系统的主机)动态分配IP地址,因此在配置DHCP服务器时需要增加对应的PXE设置。PXE Client的ROM中,已经存在TFTP Client,因此PXE Client通过TFTP协议即可获取到TFTP Server上下载所需的文件。

2.3、使用PXE的前提条件
|--------|----------------------------------------|
| 序号 | 使用PXE的前提条件 |
| 1 | 客户机的网卡需支持PXE协议(即集成BOOTROM芯片),且主板支持网络引导 |
| 2 | 网络中需有一台DHCP服务器,用来给客户端设备自动分配IP地址 |
| 3 | 服务器通过TFTP服务提供引导镜像文件的下载 |
| 关于网卡需要支持PXE协议,属于硬件要求,目前绝大多数的服务器与个人电脑都能够提供此支持;只需要在BIOS中设置允许从Network或LAN启动即可 ||
[使用PXE的前提条件]
2.4、TFTP介绍
TFTP是一个传输文件的简单协议,基于UDP协议实现,主要是用来在客户端与服务器之间进行简单的文件传输;提供不复杂、开销不大的文件传输服务;TFTP使用的端口号是【69】。
TFTP仅能提供简单的文件传输功能(上传、下载),没有存取授权与认证机制,不提供目录列表功能,并且传输由客户端发起的。
2.5、DHCP介绍
DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户端登录服务器时就可以自动获得服务器分配的IP地址与子网掩码。
DHCP协议采用客户端/服务器模型,IP地址的动态分配任务由网络上的DHCP主机驱动。当DHCP服务器接收到来自网络的客户机申请地址信息时,才会向客户机发送相关的地址配置等信息,以实现客户机地址信息的动态配置。
三、编写自动应答配置文件
3.1、基于红帽的Kickstart全自动系统应答机制
Kickstart是一种无人值守的安装方式。**Kickstart的工作原理是:**在安装系统过程中,需要人工干预填写的各种参数,全部写到一个名为 ks.cfg 的文件中;然后,在安装系统过程中,当出现要求填写参数的情况时,安装程序会首先去查找Kickstart生成的ks.cfg文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。
如果Kickstart文件涵盖了安装过程中出现的所有需要填写的参数时,我们只需要告诉安装程序从何处获取ks.cfg文件,即可实现自动安装系统。等安装完毕,安装程序会根据ks.cfg中设置的重启选项来重启系统,并结束安装。
|--------|--------------------|--------------------------------------------------|
| 可以将Kickstart简单理解为是一个自动安装应答配置管理程序。通过读取这个配置文件,系统知道怎么去分区,要安装什么包,配什么IP,优化什么内核参数等。 |||
| 序号 | Kickstart的组成 | 说明 |
| 1 | Kickstart的安装选项 | 包含语言的选择,防火墙,密码,网络,分区的设置等。 |
| 2 | %Pre 部分 | 安装前解析的脚本,通常用来生成特殊的ks配置(如:由一段程序决定磁盘分区等)。 |
| 3 | %Package 部分 | 安装包的选择,可以是 @core 这样的group的形式,也可以是这样 vim-* 包的形式。 |
| 4 | %Post 部分 | 安装后执行的脚本,通常用来做系统的初始化设置(如:启动的服务,相关的设定等)。 |
[Kickstart的组成]
3.2、基于Debain的preseed全自动系统应答机制
Debian、Ubuntu18及其更低版本的安装程序支持使用预先配置的文件(preseed)进行自动安装。preseed预置文件可以从网络或移动介质上加载,并自动回答安装过程中的问题。由于Debian的安装界面是一个debian-installer的二进制文件,因此,debian-installer,又直接写d-i即可。
bash
#preseed.cfg自动应答文件示例
d-i debian-installer/locale string en_US
d-i keyboard-configuration/xkb-keymap select us
d-i netcfg/choose_interface select auto
3.3、基于Ubuntu的Cloud-init全系统应答机制
Cloud-init是Canonical开发出来的替代debian preseed的自动安装方式。cloud-init是一款用于初始化云服务器的工具,它拥有丰富的模块,能够为云服务器提供的能力有:初始化密码、扩容根分区、设置主机名、注入公钥、执行自定义脚本等等,功能十分强大。
目前为止cloud-init是云服务器初始化工具中的事实标准,它几乎适用于所有主流的Linux发行版,也是各大云厂商正在使用的默认工具,社区活跃。基于Python语言使得它能够轻易跨平台、跨架构运行,良好的语法抽象使得它适配新模块、新发行版十分容易。
|--------|-----------------------|-------------------------|
| 实例数据(Instance data)是cloud-init用来处理并配置实例的数据集合。根据用途,可以将实例数据划分为如下三类: |||
| 序号 | Cloud-init实例数据的分类 | 说明 |
| 1 | metadata | 字典格式的元数据,用作模板渲染、模块运行等等。 |
| 2 | userdata | 启动实例时用户能够指定的数据(单实例数据)。 |
| 3 | vendordata | 云基座传入的数据(全局数据)。 |
| **注意:**准备cloud-init 相关的文件配置,有三个文件【meta-data】【user-data】【vendor-data】, 只需要编写 user-data 即可,其他都可以留空。 |||
[Cloud-init实例数据的分类]
bash
#Cloud-init全系统应答机制user-data的配置示例
#cloud-config
autoinstall:
version: 1
updates: security
# The passwords are all xxxxx
user-data:
timezone: Asia/Shanghai
disable_root: false
keyboard: {layout: us, variant: ''}
locale: en_US.UTF-8