阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

自动化运维必备-PXE批量安装系统

23次阅读
没有评论

共计 7613 个字符,预计需要花费 20 分钟才能阅读完成。

需求分析

随着互联网技术的不断壮大,服务器数量也在不断的增加,IT 运维已经成为 IT 服务内涵中重要的组成部分。面对越来越复杂的业务,面对越来越多样化的用户需求,不断扩展的 IT 应用需要越来越合理的模式来保障 IT 服务能灵活便捷、安全稳定地持续保障,这种模式中的保障因素就是 IT 运维。从初期的几台服务器发展到庞大的数据中心,单靠人工已经无法满足在技术、业务、管理等方面的要求,那么标准化、自动化、架构优化、过程优化等降低 IT 服务成本的因素越来越被人们所重视。而如何自动化批量部署安装一个稳定的系统是实现自动化的第一步。
自动化运维必备 -PXE 批量安装系统

PXE 简介

PXE,就是预启动执行环境,是一种引导启动的方式。这种协议一般由两部分构成,一部分是服务器端,一个是客户端。简单来说,我们通过这种方式可以自己创建一个“安装源”,在安装系统的时候只要能找到这个“源”便可以实现系统的安装。在实现无人值守的安装前,我们必须要搭建一些服务,来实现“安装源”的建立,例如 ftp、http、tftp、dhcp 等。当一台主机启动时,标准输入输出会将 PXE 客户端调入我们的内存中进行相关的操作,并提示相关的选项,在这里我们可以进行选择。PXE 的客户端通过网络下载 (download) 启动文件到本地运行。具体过程是,PXE 客户端通过网卡向局域网内发送 ip 请求,然后 DHCP 服务器会提供给给它一个 ip 地址和系统安装所需要的文件,接下使用接收到的文件进行系统安装。而安装的过程又需要其他服务器提供的资源,例如:yum 源,内核文件等,当主机拿到这些资源,便可以顺利的安装了。最终结果是:任意一台主机在选着网络启动时会获取 DHCP 服务器分发的 ip,通过通过获取到的 ip 地址与局域网内的 TFTP 服务器通信并获取启动文件,与 FTP 或者 HTTP 通信并获取 yum 源文件及内核文件等。之后开始自动安装,而这个过程不需要人在做任何操作。

PXE 安装优点,这种安装系统的方式可以不受光驱,光盘以及一些外部设备的限制,还可以做到无人值守,大大减轻了运维人员的工作负荷,像在一些主机数量庞大的机房进行批量安装,PXE 将是你不二的选择。

整体方案

这一小节我们主要介绍方案选择,在说方案之前先来看看 PXE 部署思路。部署思路其实并不难,在实现 PXE 自动批量安装系统时,首先我们需要有 DHCP 服务器为我们提供 IP 地址,如果在一个网络中你连 IP 地址都获取不到,何谈自动化。其次我们要安装一个系统,那么需要的文件必须要有人为我们提供才可以,应为是网络自动安装,本地是没有任何资源的,我们可以使用 HTTP,FTP 服务来实现。最后就是获取我们的安装文件,这些文件会引导我们的计算机如何启动,如何配置,我们选择 TFTP 服务起来提供。整体框架如下图:自动化运维必备 -PXE 批量安装系统

  • 方案 1:选则一台主机同时搭建 HTTP、TFTP、DHCP 服务,为该子网内的主机提供服务。
  • 方案 2:选择一台主机搭建 HTTP、TFTP 服务,做提供资源的服务器,另为一台主机单间 DHCP 服务,提供 IP 地址。

上述提供了两种方案,当然了,如果你不怕资源浪费,你也可以选择每种服务搭建在一台主机上,做相应服务的提供,不过个人并不建议。考虑到节约资源的目的,我们选择方案一。

服务选型
DHCP 服务

由于我们是实现自动化批量安装部署,所以,能够与其他主机通信是前提,而要想获取 IP 并实现通信,我们必须要有 DHCP 服务器为大量的主机提供 ip 地址才行。

DHCP 就是动态主机设置协议,主要是为客户端分发 IP,并且是自动分发 IP 的,一台主机通过 DHCP 获取的地址是动态的,每次获取的地址都有可能不同,改地址是 DHCP 服务器暂时分配给用户使用的,当主机关机之后则会返回这个 ip 地址,此时如果有其他用户请求,DHCP 服务器则会将该 IP 地址分配给他。局域网中的每台主机都可以充当 DHCP 服务器,只要我们安装 DHCP 服务,并做相应的配置即可,这里的配置主要是子网的配置,配置其他主机能使用 IP 地址的范围,例如:配置子网为 192.168.14.0,该子网内主机获取 IP 的范围为 192.168.14.1~192.168.14.100。那么我们就可以打开 DHCP 的配置文件 /etc/dhcp/dhcpd.conf 做如下配置:

subnet 192.168.14.0 netmask 255.255.255.0 {
        range 192.168.25.50 192.168.25.100;
        next-server 192.168.25.107;     # 指明 tftp 服务器的地址
        filename "pxelinux.0";          # 指定 PXE 文件
}
HTTP 服务

由于我们要获取安装系统服务的 yum 源以及内核文件,虚拟根文件,这些文件都是大文件,在传输时我们必须保证其能够安全传输,所以我们选择了 HTTP 服务,当然了,选择 FTP 服务也是可以的。

HTTP 是 Hyper Text Transfer Protocol(超文本传输协议)的缩写。是互联网上广泛试用的协议。是用于从 WWW 服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分等。HTTP 包含命令和传输信息,不仅可用于 Web 访问,也可以用于其他因特网 / 内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。

TFTP 服务

TFTP 是一种文件传输服务,用于服务器与客户端进行文件的传输,不过他只能进行简单的文件传输,这个服务开销不大,所以并不能进行大文件的传输,多用于小文件的传输。他没有 FTP 那么强大,但是 TFTP 使用 UDP 协议传输数据,有些时候比 FTP 更加方便,它所监听的端口为 69。由于我们是在局域网中,系统相对安全,而提供的数据也不是很大,所以 TFTP 是实现 PXE 的不二选择。

功能实现
安装前准备

由于涉及到主机间不同基于不同协议的通信,所以为了避免不必要的麻烦,我们选择关闭防火墙以及 selinux。生产场景中不建议这样做。

[root@vinsent ~]#iptables -F     # 关闭防火墙
[root@vinsent ~]#setenforce 0     # 临时关闭 selinux
[root@vinsent ~]#vim /etc/selinux/config     # 修改文件永久关闭 selinux
... 前面省略
SELINUX=disabled                 # 设置 SELINUX 的值为 disabled
... 后面省略
配置静态 IP 地址

由于我们在前面方案分析中选择了方案 1,即将所有服务搭建在同一台服务器上。由于做 DHCP 服务的主机的 IP 地址必须固定,所以我们要先配置服务器的 IP 地址。由于我是在 CentOS7 系统上搭建的服务器,所以有许多命令只有 CentOS7 才能使用。CentOS6 及之前的版本请自行查阅相关文档。

[root@vinsent ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33  # 设置静态 IP
DEVICE=ens33
BOOTPROTO=static
IPADDR=192.168.14.201
PREFIX=24
ONBOOT=yes
[root@vinsent ~]#systemctl restart network.service     #重启网络服务
[root@vinsent ~]#ip a                                  # 查看自己的 IP 是否设置成功
安装服务

由于我们需要 HTTP、TFTP、DHCP 服务来提供相应的服务,所以我们必须要在系统中安装,相应的服务。这里需要注意,如果你的系统时最小化安装,那么建议你先安装一些包组,GCC 等。如果安装过程中出现包依赖问题,依次安装相应的包即可。

[root@vinsent ~]#yum -y install dhcp tftp-server httpd syslimux  #安装相应的服务包
[root@vinsent ~]#yum -y install xinetd             # 安装超级守护进程 xinetd
[root@vinsent ~]#systemctl enable dhcp             # 设置 dhcp 开机启动
[root@vinsent ~]#systemctl enable tftp             # 设置 tftp 开机启动
[root@vinsent ~]#systemctl start tftp              # 启动 tftp 服务 
[root@vinsent ~]#systemctl enable httpd             
[root@vinsent ~]#systemctl start httpd             # 启动 http 服务
[root@vinsent ~]#chkconfig tftp on     # 如果这天命令不能使用,请修改配置文件
[root@vinsent ~]#vim /etc/xinetd.d/tftp
service tftp
{
...
    disable     =yes         # 修改这一项为 "disable     =no"
...
}
[root@vinsent ~]#systemctl restart xinetd     # 修改之后,一定要重启 xinetd 服务
配置 DHCP 服务

DHCP 服务是保证我们能够自动化批量安装的前提,上面已经有提到过 dhcp 的配置,这里做补充,详细说明。主要是配置子网范围,用于 ip 地址分配。

[root@vinsent ~]#rpm -ql dhcp         # 查询 dhcp 相关的文件
... 前面省略
/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
/usr/share/doc/dhcp-4.2.5/dhcpd6.conf.example
... 后面省略
[root@vinsent ~]#cd /etc/dhcp/
[root@vinsent ~]#cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example .   # 复制模板配置文件
[root@vinsent ~]#mv dhcpd.conf.example dhcpd.conf     # 改名为 dhcpd.conf,顶替以前的配置文件
[root@vinsent ~]#vim dhcpd.conf         # 打开模板文件并添加一下内容
... 前面省略...
subnet 192.168.14.0 netmask 255.255.255.0{         # 这里写的 ip 地址为子网的地址,故为 192.168.14.0
    range 192.168.14.10 192.168.14.200;     # 子网的范围,之后主机请求获取的 ip 地址就是这其中的一个
    next-server 192.168.14.201;     # 指明 tftp 服务器的地址
    filename "pxelinux.0"           # 指明 PXE 文件位置,这个在申请 ip 的时候会发送给安装主机
}
... 后面省略...
[root@vinsent ~]#systemctl dhcpd start     # 重启服务

注意:如果你设置的子网有问题,那么你将不能重启 dhcp 服务,请检查你配置的子网是否正确。dhcp 服务器的地址必须固定,不能是自动获取的 ip。

准备 yum 源文件及 kickstart 文件

yum 源文件我们是放在 http 服务器上的,由 http 服务来提供,所以我们要把相应的文件复制到 http 服务器上。并且我们安装的主机系统可能是 CentOS 6 也可能是 CentOS7 或者 Ubantu 等,所以我们在准备 yum 文件时,需要准备不同系统、不同版本的文件,我们这里只提供 CentOS 6 与 CentOS 7 的两种系统的安装。向我们先规划一下目录文件,在进行复制。如下所示。
自动化运维必备 -PXE 批量安装系统
我们规划好了目录结构,接下来便是创建这些目录结构,并提供相应的文件。

[root@vinsent ~]#cd /var/www/html
[root@vinsent html]#mkdir -p centos/{6,7}
[root@vinsent html]#mkdir ksdir
[root@vinsent html]#

提供 yum 源文件,这里有两种方案来实现 yum 源文件的提供:

  • 方案 1:我们分别挂载 CentOS 6 和 CentOS 7 的关盘将光盘里的 Packages 目录与 repodata 目录复制到对应的目录下(如果复制,建议全部复制);
  • 方案 2:我们创建两个关盘驱动器,一个添加 CentOS 6 的 ISO 镜像,一个添加 CentOS 7 的 ISO 镜像,然后我们分别将对应的关盘挂载到 /var/www/html/centos 下对应的目录上。

综上所述,我们选择方案 2。

[root@vinsent html]#mount /dev/sr0 centos/6     # 挂载 CentOS 6 光盘值 6 目录下
mount: /dev/sr0 is write-protected,mounting read-only
[root@vinsent html]#mount /dev/sr1 centos/7     # 挂载 CentOS 7 光盘值 7 目录下
mount: /dev/sr1 is write-protected,mounting read-only

接下来准备 ksdir 目录下的安装引导文件 ks#.cfg。ks#.cfg 文件的获取方法有两种,一种是通过工具来生成。不过这个工具需要自己安装:

[root@vinsent ~]#yum  install -y system-config-kickstart
[root@vinsent ~]#system-config-kickstart

自动化运维必备 -PXE 批量安装系统
另外这一种是复制 /root 目录下的 anaconda-ks.cfg 文件加以修改,我们选择后者。

[root@vinsent html]#cp /root/anaconda-ks.cfg ksdir/ks7.cfg
[root@vinsent html]#vim ksdir/ks7.cfg
....
[root@vinsent html]#chmod +r ksdir/ks7.cfg    # "这里的文件需要加读权限,非常重要"

注意:ks 文件的具体配置可以参考百度。

准备内核文件菜单文件

内核文件、虚拟根文件以及菜单文件,我们都是通过 tftp 服务来提供的,由于系统及版本的不同,对于一个比较复制机群来说,我们需要准备不同系统,不同版本的内核文件,initrd.img 文件。菜单文件只需要一份即可。/var/lib/tftpboot/ 目录规划如下:
自动化运维必备 -PXE 批量安装系统
规划好了目录结构,接下来自只需要按照目录内容配置相关的文件即可。菜单风格文件 menu.c32、不同系统的内核文件 vmlinuz 以及虚拟根文件系统 initrd.img 我们可以从光盘中复制。菜单文件 defaults 需要手动修改。

[root@vinsent ~]#cd /var/lib/tftpboot/
[root@vinsent tftpboot]#mkdir -p centos{6,7}     # 创建目录文件
[root@vinsent tftpboot]#cp /var/www/html/centos/6/{vmlinuz,initrd.img} centos6/     # 复制内核,虚拟根文件
[root@vinsent tftpboot]#cp /var/www/html/centos/7/{vmlinuz,initrd.img} centos7/     # 由于之前挂载了不同系统,直接复制对应文件即可
[root@vinsent tftpboot]#cp /usr/share/syslinux/pxelinux.0 . # pxelinux 文件来自 syslinux 包,直接复制即可
[root@vinsent tftpboot]#mkdir pxelinux.cfg
[root@vinsent tftpboot]#cp /var/www/html/centos/6/isolinux/isolinux.cfg pxelinux.cfg/default # 复制并改名
[root@vinsent tftpboot]#vim pxelinux.cfg/default
...     # 修改过程省略,
[root@vinsent tftpboot]#cat pxelinux.cfg/default     # 查看修改过后的菜单文件内容
default menu.c32     # 指定菜单风格
timeout 600          # 安装倒计时,1/10 s 为单位
menu title Auto Install | www.linuxprobe.com
  
label centos7
  menu label Auto Install CentOS Linux ^7
  kernel centos7/vmlinuz
  append initrd=centos7/initrd.img ks=   # 指明 ks 文件位置 
  
label centos6
  menu label Auto Install CentOS Linux ^6
  kernel centos6/vmlinuz
  append initrd=centos6/initrd.img ks=http://192.168.14.201/ksdir/ks6.cfg
  
label manual7
  menu label ^Manual Install CentOS Linux 7
  kernel centos7/vmlinuz
  append initrd=centos7/initrd.img inst.repo=http://192.168.14.201/centos/7
  
label manual6
  menu label Manual ^Install CentOS Linux 6
  kernel centos6/vmlinuz
  append initrd=centos6/initrd.img inst.repo=http://192.168.14.201/centos/6
label local
  menu default        # 默认光标停在这一行
  menu label Boot from ^local drive
  localboot 0xffff
menu end

到此所有的配置就完成了。

调试并安装

自动化运维必备 -PXE 批量安装系统
点击启动项开始安装,选择网络安装。
自动化运维必备 -PXE 批量安装系统
点击网络安装后,我们就能看到我们的菜单了。
自动化运维必备 -PXE 批量安装系统
然后选择你要启动的项即可。

错误分析

最初还不是很熟悉 PXE 原理的时候,遇到了很多问题,在最后给处我与到的几个问题,即解决方法。
问题 1:ks.cfg 文件出错
自动化运维必备 -PXE 批量安装系统
解决方法:检查 tftp 服务是否启动,ks#.cfg 文件路径是否正确,ks#.cfg 文件是否具有读权限。出现这个问题大概就是这几个地方出了问题

问题 2:yum 源文件路径出错
自动化运维必备 -PXE 批量安装系统
解决方法:寻找 yum 源出现错误,该错误是 ks.cfg 文件中 url 路径写错了,修改该路径为正确的 yum 源所在的地址即可。

问题 3:iptables 与 selinux 出问题
遗憾忘记截图给大家了,见谅,安装前检查一下 iptables 与 selinux 是否关闭(实验环境,生产中不建议这么粗暴!)

总结

本文通过分析 PXE 实现批量自动化安装的原理,再到一步步实现 PXE 的配置,再到后面的排错思路。在这里总结几个要点:关闭 selinux,iptables 很重要,ks 文件读权限不可少,服务千万不能 down 掉,文件路径不能乱抄。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计7613字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中