设为首页 收藏本站
查看: 596|回复: 0

[经验分享] PXE+kickstart实现批量部署linux系统

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-23 08:53:51 | 显示全部楼层 |阅读模式
当企业有大量的新机需要安装系统,如果每台都接上系统光盘并人工选择配置安装,无疑工作量巨大。而 PXE+kickstart 的安装方式能够实现自动化批量部署,特别适用于这种场景。
一、批量部署方式
  ①物理机:PXE
      负载均衡
  ②虚拟机:映像文件模板
      分布式文件系统
  无论是针对物理机还是虚拟机的批量部署,都会对文件服务器造成巨大的压力,可以分别使用负载均衡和分布式文件系统的方式缓解

二、PXE工作原理

   客户机通过支持PXE的网卡请求DHCP服务器 --> DHCP服务器给客户端分配IP地址等,并告诉客户端next server(通常是tftp服务器)的地址以及需要下载pxelinux.0 --> tftp客户端联系tftp服务器下载pxelinux.0并加载到内存中执行 --> 联系tftp服务器下载vmlinuz、ramdisk、vesamenu.c32、pxelinux.cfg等各种引导安装所需的文件--> 联系安装源(http、ftp、nfs等)

   另外,还可提供kickstart文件,并在isolinux.cfg文件中或boot提示符后指明其位置以实现自动安装
   ①PXE:是由Intel开发的 client/server 协议,可以使计算机通过网络安装系统。PXE client在网卡的ROM中,计算机启动后,BIOS把PXE client中执行,并显示出命令菜单,经用户选择后,PXE client联系远端服务器下载安装所需的文件
   ②PXE client所在的网卡ROM中已经内置了tftp client
   ②pxelinux.0是类似于isolinxu.bin的引导加载程序,可调用启动菜单
   ④pxelinux.cfg:可直接复制现有isolinux.cfg并按需修改即可

三、如何配置PXE
    以下DHCP、TFTP配置可参考http://www.iyunv.com/thread-142372-1-1.html,系统安装参考博客http://www.iyunv.com/thread-141375-1-1.html

  1、配置DHCP服务
     subnet ... netmask ... {
  ...
  next-server TFTP-SERVER-IP;
  filename "pxelinux.0";
     }
  2、配置TFTP server
     yum install tftp-server
     chkconfig tftp on
     service xinetd restart
  3、提供pxe工作环境
     yum install syslinux   #pxelinux.0由syslinux包提供
     cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
  4、提供引导内核等文件
     mount /dev/cdrom /media/cdrom
     cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
     cp /media/cdrom/isolinux/{splash.jpg,vesamenu.c32,boot.msg} /var/lib/tftpboot/
     mkdir /var/lib/tftpboot/pxeboot.cfg
     cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxeboot.cfg/default
  5、提供安装源(以http为例)
     yum -y install httpd
     mkdir -pv /var/www/html/centos/6/x86_64
     mount --bind /media/cdrom /var/www/html/centos/6/x86_64
       (mount --bind表示将后面的两个目录做捆绑,所以通过这两个目录都能访问光盘了)
  6、提供kickstart文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
[iyunv@node2 ~]# mount /dev/cdrom /media/cdrom   #挂载光盘光盘
mount: block device /dev/sr0 is write-protected, mounting read-only
[iyunv@node2 ~]# ls /media/cdrom/images/pxeboot
initrd.img  TRANS.TBL  vmlinuz
[iyunv@node2 ~]# ls /media/cdrom/isolinux
boot.cat  boot.msg  grub.conf  initrd.img  isolinux.bin  isolinux.cfg  memtest  splash.jpg  TRANS.TBL  vesamenu.c32
[iyunv@node2 ~]# cp /media/cdrom/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/
vmlinuz   #将相关引导文件都复制到tftpboot目录中
[iyunv@node2 ~]# cp /media/cdrom/isolinux/{boot.msg,splash.jpg,vesamenu.c32} /var/lib/tftpboot/
[iyunv@node2 ~]# mkdir /var/lib/tftpboot/pxelinux.cfg/
[iyunv@node2 ~]# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
[iyunv@node2 ~]# rpm -q syslinux
syslinux-4.04-3.el6.x86_64
[iyunv@node2 ~]# rpm -ql syslinux | grep 'pxelinux.0'   #发现4.04版本的syslinux包没有提供pxelinux.0
[iyunv@node2 ~]# yum -y remove syslinux
...
[iyunv@node2 ~]# yum -y install /media/cdrom/Packages/syslinux-4.02-8.el6.x86_64.rpm   #重新安装了4.02版本的syslinux包
[iyunv@node2 ~]# rpm -ql syslinux | grep 'pxelinux.0'
/usr/share/syslinux/pxelinux.0
[iyunv@node2 ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[iyunv@node2 ~]# ls /var/lib/tftpboot/   #各种引导文件准备完毕
a.txt  boot.msg  initrd.img  pxelinux.0  pxelinux.cfg  splash.jpg  vesamenu.c32  vmlinuz
[iyunv@node2 ~]# vim /etc/dhcp/dhcpd.conf

...
subnet 192.168.30.0 netmask 255.255.255.0 {
  range 192.168.30.31 192.168.30.50;
  next-server 192.168.30.20;    #指定下一个要联系的tftp服务器地址
  filename "pxelinux.0";    #指定要下载pxelinux.0文件
}

[iyunv@node2 ~]# yum -y install httpd
...
[iyunv@node2 ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT   #开放80端口
[iyunv@node2 ~]# mkdir -pv /var/www/html/centos/6/x86_64
mkdir: created directory `/var/www/html/centos'
mkdir: created directory `/var/www/html/centos/6'
mkdir: created directory `/var/www/html/centos/6/x86_64'
[iyunv@node2 ~]# mount --bind /media/cdrom /var/www/html/centos/6/x86_64
[iyunv@node2 ~]# cp /tmp/myiso/isolinux/ks.cfg /var/www/html/centos6.cfg   #提供kickstart文件
[iyunv@node2 ~]# vim /var/www/html/centos6.cfg   #做适当修改

#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use network installation
url --url="http://192.168.30.20/centos/6/x86_64/"
repo --name="CentOS" --baseurl=http://192.168.30.20/centos/6/x86_64/ --cost=100   #指明安装源
# Root password
rootpw --iscrypted $1$Bmn0VLX0$2o2vCmHL.aWp3zhewY1S..
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use text mode install
text
firstboot --disable
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux --disabled
# Installation logging level
logging --level=info
# Reboot after installation
reboot
# System timezone
timezone  Asia/Shanghai
# Network information
network  --bootproto=dhcp --device=eth0 --onboot=on
# System bootloader configuration
...
[iyunv@node2 ~]# ksvalidator /var/www/html/centos6.cfg   #语法测试无误
[iyunv@node2 ~]# ll /var/lib/tftpboot/pxelinux.cfg/default
-r--r--r-- 1 root root 936 Nov 22 02:50 /var/lib/tftpboot/pxelinux.cfg/default
[iyunv@node2 ~]# chmod u+w /var/lib/tftpboot/pxelinux.cfg/default
[iyunv@node2 ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
...
label linux
  menu label ^Install or upgrade an existing system
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=http://192.168.30.20/centos6.cfg    #指明kickstart文件位置,实现自动安装
label vesa
  menu label Install system with ^basic video driver
  kernel vmlinuz
  append initrd=initrd.img xdriver=vesa nomodeset
label rescue
  menu label ^Rescue installed system
  kernel vmlinuz
  append initrd=initrd.img rescue
label local
...
[iyunv@node2 ~]# service dhcpd restart   #修改dhcpd配置文件后需重启服务
Shutting down dhcpd:                                       [  OK  ]
Starting dhcpd:                                            [  OK  ]
[iyunv@node2 ~]# chkconfig tftp on
[iyunv@node2 ~]# service xinetd start
Starting xinetd:                                           [  OK  ]
[iyunv@node2 ~]# service httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.30.20 for ServerName
                                                           [  OK  ]
[iyunv@node2 ~]# netstat -tunlp    #可看到67/udp、69/udp、80/tcp都已处于监听状态
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:111                 0.0.0.0:*                   LISTEN      1267/rpcbind        
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1532/sshd           
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1387/cupsd         
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      2645/sshd           
tcp        0      0 127.0.0.1:6011              0.0.0.0:*                   LISTEN      1818/sshd           
tcp        0      0 0.0.0.0:56458               0.0.0.0:*                   LISTEN      1356/rpc.statd      
tcp        0      0 :::111                      :::*                        LISTEN      1267/rpcbind        
tcp        0      0 :::80                       :::*                        LISTEN      2988/httpd         
tcp        0      0 :::22                       :::*                        LISTEN      1532/sshd           
tcp        0      0 ::1:631                     :::*                        LISTEN      1387/cupsd         
tcp        0      0 ::1:6010                    :::*                        LISTEN      2645/sshd           
tcp        0      0 ::1:6011                    :::*                        LISTEN      1818/sshd           
tcp        0      0 :::45152                    :::*                        LISTEN      1356/rpc.statd      
udp        0      0 0.0.0.0:111                 0.0.0.0:*                               1267/rpcbind        
udp        0      0 0.0.0.0:631                 0.0.0.0:*                               1387/cupsd         
udp        0      0 0.0.0.0:1018                0.0.0.0:*                               1267/rpcbind        
udp        0      0 0.0.0.0:684                 0.0.0.0:*                               1356/rpc.statd      
udp        0      0 0.0.0.0:46906               0.0.0.0:*                               1356/rpc.statd      
udp        0      0 0.0.0.0:67                  0.0.0.0:*                               2952/dhcpd         
udp        0      0 0.0.0.0:69                  0.0.0.0:*                               2976/xinetd         
udp        0      0 :::111                      :::*                                    1267/rpcbind        
udp        0      0 :::1018                     :::*                                    1267/rpcbind        
udp        0      0 :::60937                    :::*                                    1356/rpc.statd



  在一台新机上测试成功:
wKiom1ZR9v_h_gRWAAFqdvK-Moc840.jpg wKioL1ZR6BnyeA9fAAAMkeNciyE658.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-142373-1-1.html 上篇帖子: DHCP和TFTP配置以及CentOS 7上的服务控制 下篇帖子: 关于samba的字符集问题 工作原理 IP地址 服务器 linux server
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表