1. 1 自动化安装概述
对于运维工程师来说,服务器上架和操作系统的安装,是实施运维工作的开始。对于自动化运维来说,自动化安装是实施自动化运维的第一步。面对大量的服务器设备,我们需要掌握如何快速,并且自动的将新上架的服务器安装上对应的操作系统、或者给已经在运行的服务器重新安装系统。而且很重要的是,从第一步开始,我们就要创建自己内部的软件仓库,而这一切的工作,Cobbler都可以完成。 对于Linux来说,我们通常使用PXE+KickStart的方式进行操作系统的自动化安装。那么首先需要先了解一下KickStart。
1.1. 1.1 PXE+Kickstart介绍
1.1.1. 1.1.1 KickStart工作原理
KickStart是Linux的一种无人职守的安装方式。KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为 ks.cfg的文件;这样在后面安装过程中当出现要求填写参数的情况时,安装程序会首先去查找 KickStart生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。 如果KickStart文件涵盖了安装过程中出现的所有需要填写的参数时,那么就完全不需要人工干预,安装程序会根据ks.cfg中设置的选项自动进行安装,并通过设置重启选项来重启系统,并结束安装。那么如何让服务器开机就开始自动安装操作系统呢,我们要借助开机启动选项,比如从PXE启动。
1.1.2. 1.1.2 PXE工作原理
不管是服务器还是普通的PC机都支持多种启动方式,例如从硬盘、从U盘、从网络启动。而PXE是服务器开机启动的一种方式,也可以称之为网卡启动,因为进行PXE安装的必要条件是计算机上的网卡要支持PXE,即网卡中必须要有 PXE Client,不过不用担心基本上我们常见的服务器都支持这种方式。 首先我们需要了解下PXE的工作方式:PXE (Pre-boot Execution Environment)协议使计算机可以通过网络启动。PXE协议分为 Client 和 Server 端,PXE client 在网卡的 ROM 中,当计算机引导时,BIOS 把 PXE client 调入内存执行,由 PXE client 将放置在远端的文件通过网络下载到本地运行。 运行 PXE 协议需要设置 DHCP 服务器和 TFTP 服务器。DHCP 服务器用来给 PXE Client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE Client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。此外,在 PXE Client 的 ROM 中,已经存在了 TFTP Client。PXE Client 通过 TFTP 协议到 TFTP Server 上下载所需的文件。
1.1.3. 1.1.3 PXE+Kickstart工作流程
下图显示了PXE+Kickstart的工作流程
1.PXE Client发送DHCP请求到DHCP Server 2.DHCP Server提供相关信息包括IP地址和TFTP服务器的位置,以及要下载的文件。 3.PXE Client请求TFTP Server。 4.TFTP Server响应请求并将文件发送给PXE Client 5.PXE Client去下载对应的Kickstart文件,并根据Kickstart文件中的内容开始进行安装 6.安装操作系统。
1.2. 1.2 制作本地Yum仓库
下面我们就要准备先手动来通过PXE+Kickstart来实现自动化的系统安装,那么首先需要有一个YUM仓库,而且是本地的。下面我就拿CentOS 7为例:
1.2.1. 1.2.1 准备安装源
安装需要软件包 我们使用HTTP的方式作为YUM仓库的安装源,需要首先安装Apache,其中createrepo 是一个对rpm 文件进行索引建立的工具。
[root@linux-node1 ~]# yum install -y httpd createrepo [root@linux-node1 ~]# systemctl start httpd.service
下载iso镜像
[root@linux-node1 ~]# cd /usr/local/src # wget https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
创建yum仓库
[root@linux-node1 ~]# mount -o loop /usr/local/src/CentOS-7-x86_64-Minimal-2009.iso /mnt/
如果你使用VMWare Workstation创建虚拟机的时候设置了ISO镜像,可以不用下载,直接挂载使用。
[root@linux-node1 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 is write-protected, mounting read-only
在默认Apache的家目录下创建目录
[root@linux-node1 ~]# mkdir /var/www/html/CentOS-7.9-x86_64
[root@linux-node1 ~]# cp -a /mnt/* /var/www/html/CentOS-7.9-x86_64/
- 准备Kickstart安装文件
[root@linux-node1 ~]# cd /var/www/html/CentOS-7.9-x86_64/ [root@linux-node1 CentOS-7.9-x86_64]# vim CentOS-7.9-x86_64.cfg #Kickstart Configurator by Jason Zhao #platform=x86, AMD64, or Intel EM64T #System language lang en_US #System keyboard keyboard us #Sytem timezone timezone Asia/Shanghai #Root password rootpw --iscrypted $1$cobbler$ssrXh2kdcRH.nSgGXmfBS1 #Use text mode install text #Install OS instead of upgrade install #Use NFS installation Media url --url=http://192.168.56.11/CentOS-7.9-x86_64 #System bootloader configuration bootloader --location=mbr --driveorder=sda --append="net.ifnames=0 biosdevname=0" #Clear the Master Boot Record zerombr #Partition clearing information clearpart --all --initlabel #Disk partitioning information autopart --type=lvm #part /boot --fstype=xfs --size=1024 #part swap --asprimary --fstype="swap" --size=1024 #part / --fstype=xfs --size=1 --grow #System authorization infomation auth --useshadow --enablemd5 #Network information network --bootproto=dhcp --device=eth0 --onboot=on --activate # Reboot after installation reboot #Firewall configuration firewall --disabled #SELinux configuration selinux --disabled #Service configuration services --disabled=postfix #Do not configure XWindows skipx #Package install information %packages @^minimal @core chrony kexec-tools %end
1.2.2. 1.2.2 配置TFTP-Server
我们已经了解了PXE+Kickstart的原理,那么我们需要准备相关dhcp、tftp-server等。
安装配置tftp-server
[root@linux-node1 ~]# yum install -y tftp-server xinetd [root@linux-node1 ~]# vim /etc/xinetd.d/tftp disable = no(修改为no)
准备安装需要的文件
[root@linux-node1 ~]# yum install -y syslinux [root@linux-node1 ~]# mkdir /var/lib/tftpboot/pxelinux [root@linux-node1 ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/pxelinux [root@linux-node1 ~]# cp /mnt/isolinux/* /var/lib/tftpboot/pxelinux [root@linux-node1 ~]# cp /mnt/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/pxelinux/
在tftpboot下创建pxelinux.cfg目录
[root@linux-node1 ~]# mkdir /var/lib/tftpboot/pxelinux/pxelinux.cfg
[root@linux-node1 ~]# cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux/pxelinux.cfg/default
- 修改default配置,指定网站安装的kickstart文件
[root@linux-node1 ~]# vim /var/lib/tftpboot/pxelinux/pxelinux.cfg/default
…省略…
#在label linux上面增加自动化安装的配置
label ks
menu label ^Auto Install CentOS 7
kernel vmlinuz
append initrd=initrd.img ip=dhcp inst.repo=http://192.168.56.11/CentOS-7.9-x86_64/ inst.ks=http://192.168.56.11/CentOS-7.9-x86_64/CentOS-7.9-x86_64.cfg net.ifnames=0 biosdevname=0
配置DHCP Server
[root@linux-node1 ~]# yum install -y dhcp [root@linux-node1 ~]# /bin/cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf [root@linux-node1 ~]# vim /etc/dhcp/dhcpd.conf option domain-name "example.com"; option domain-name-servers 192.168.56.2; #请删除其他的subnet配置 subnet 192.168.56.0 netmask 255.255.255.0 { range dynamic-bootp 192.168.56.100 192.168.56.200; option subnet-mask 255.255.255.0; #设置子网掩码 option routers 192.168.56.2; #设置网关 next-server 192.168.56.11; #设置TFTP-Server地址 filename "pxelinux/pxelinux.0"; #设置TFTP需要下载的文件 }
启动httpd、tftp和dhcpd服务
[root@linux-node1 ~]# systemctl start xinetd.service dhcpd.service httpd.service
检查服务是否启动
[root@linux-node1 ~]# netstat -ntlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 871/sshd tcp6 0 0 :::80 :::* LISTEN 1321/httpd tcp6 0 0 :::22 :::* LISTEN 871/sshd
查看dhcpd和tftpd是否启动
[root@linux-node1 ~]# netstat -nulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:67 0.0.0.0:* 1487/dhcpd
udp 0 0 0.0.0.0:69 0.0.0.0:* 1486/xinetd
1.2.3. 1.2.4 自动化安装和流程总结
现在就可以新创建一台虚拟机来进行测试了,记着选择网卡启动。DHCP后,就可以看到安装页面。我们刚才添加的Auto Install CentOS 也可以看到了。
安装完毕之后默认root密码:123456.coM
下面我们可以来总结下PXE+KickStart的安装流程了:
需要经历以下的过程:
- 网卡上的PXE芯片有512字节,存放了DHCP和TFTP的客户端。
- 启动计算机选择网卡启动。
- PXE上的DHCP客户端会向DHCP服务器,申请IP地址
- DHCP服务器分配给它IP地址的同时通过以下字段,告诉pxe,TFTP的地址和它要下载的文件 next-server 192.168.56.11; filename "pxelinux.0";
- pxelinux.0告诉PXE要下载的配置文件是pxelinux.cfg目录下面的default
- pxe下载并依据配置文件的内容下载启动必须的文件,并通过ks.cfg配置内容开始系统安装。
我们都干了什么 所以我们看到设置一个网络环境可能涉及到许多步骤,才能为开始安装做好准备。您必须:
- 配置服务,比如 DHCP、TFTP、DNS、HTTP、FTP 和 NFS
- 在 DHCP 和 TFTP 配置文件中填入各个客户端机器的信息
- 创建自动部署文件(比如 kickstart 和 autoinst)
- 将安装媒介解压缩到 HTTP/FTP/NFS 存储库中。 这个过程并不简单,甚至可以说复杂,我们要自己管理和创建不同的操作系统版本、手动管理DHCP等,那么如何能让我们有一个功能强大,更实用的自动化装机平台,开源社区给了我们答案就是Cobbler。 官方网站:http://cobbler.github.io/