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

Posted Linux就该这么学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化运维必备-PXE批量安装系统相关的知识,希望对你有一定的参考价值。

纯手工打造每一篇开源资讯与技术干货,数十万程序员和Linuxer已经关注。

需求分析

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

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

PXE简介

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

整体方案

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

  • 方案1:选则一台主机同时搭建HTTP、TFTP、DHCP服务,为该子网内的主机提供服务。

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

服务选型

DHCP服务

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
...后面省略
[ 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服务

[ 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     # 重启服务

准备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 ~ ]#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
...     # 修改过程省略,

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

调试并安装

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

点击启动项开始安装,选择网络安装。

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

点击网络安装后,我们就能看到我们的菜单了。

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

然后选择你要启动的项即可。

错误分析

最初还不是很熟悉PXE原理的时候,遇到了很多问题,在最后给处我与到的几个问题,即解决方法。
问题1:ks.cfg文件出错

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

    解决方法:检查tftp服务是否启动,ks#.cfg文件路径是否正确,ks#.cfg文件是否具有读权限。出现这个问题大概就是这几个地方出了问题

问题2:yum源文件路径出错

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

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

总结

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

原文来自:  http://www.linuxidc.com/Linux/2017-10/147379.htm


让您学习到的每一节课都有所收获

《Linux就该这么学》是由资深运维专家刘遄及全国多名红帽架构师(RHCA)基于最新RHEL7系统共同编写的高质量Linux技术自学教程,极其适合用于Linux技术入门教程或讲课辅助教材。

☀ 刘遄老师QQ:5604241  微信:gnu_chuan

☀ 学员助教QQ:5604674

 Linux技术交流A群(满):560843

☀ Linux技术交流B群:340829

☀ Linux技术交流C群:463590

☀ Linux技术交流D群:915246

☀ Linux技术交流E群:1663106

☀ Linux技术交流F群:1653851

☀ Linux技术交流G群:2632018(新群,火热加群中……

☀ 官方站点:www.linuxprobe.com

☀ 电脑在线阅读效果更佳:

http://www.linuxprobe.com/chapter-00.html

按住图片3秒,即可自动关注。

点击左下角查看更多热门技术

以上是关于自动化运维必备-PXE批量安装系统的主要内容,如果未能解决你的问题,请参考以下文章

自动化运维之-PXE实现系统批量自动安装

pxe批量自动化安装系统

运维之系统服务篇------ 4.批量装机环境 配置PXE引导 kickstart自动应答

自动化运维之cobbler安装centos7.3

运维自动化之批量部署工具cobbler的安装

自动化运维-PXE实现自动安装系统