借助cobbler完成服务器系统的批量安装

cobbler封装了tftp, pxe, kickstart, dhcp这些技术, 而且不会使网段中多出一台dhcp服务器

文中客户端是相对cobbler服务器来说,即为需要安装系统的服务器

介绍

关于PXE

现代服务器的网卡(NIC)一般都支持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 通过 TFTP 协议到 TFTP Server 上下载所需的文件(PXEclient的ROM中,已经存在了TFTP Client)。

关于KickStart

KickStart是RedHat提供的一种无人值守安装系统的方式。KickStart的工作原理是通过记录安装过程中所需人工干预填写的各种参数,然后生成一个名为ks.cfg的文件;其后,只要提供给引导程序此ks文件位置,引导程序便能够完成后续的安装

关于cobbler

相比早期的tftp+dhcp+kickstart方式,cobbler配置简单,可以管理多系统的安装,而且可以通过指定客户端mac地址的方式来确保只有指定的某些服务器可以从dhcp服务器获取IP,这样不会干扰网络中正常的dhcp服务器

我们由一批DELL服务器上架的流程来看cobbler所处的地位

服务器到货,机房上架,配置IDRAC(远程管理)

IDRAC远程管理,设置BIOS,RAID(BIOS,RAID也可以通过IDRAC用命令操作实现)

记录下每台服务器网卡MAC地址

网段内部署cobbler服务器,定制ks文件

根据上面获取的MAC地址,cobbler服务器添加部署任务

服务器从指定网卡启动,cobbler中的DHCP服务器验证其MAC地址,通过后,运行后续自动化部署步骤

cobbler安装配置

安装软件包

httpd 依赖 mod_wsgi,tftp 需要 syslinux

yum install cobbler dhcp xinetd tftp-server createrepo pykickstart cman libwrap mod_wsgi

启动服务

service httpd start

service xinetd start

service cobblerd start

cobbler check

check命令可以检查cobbler配置是否正确,根据提示修改配置

cobbler check

#debmirror package is not installed, 这个是针对debian类系统的,根据需要安装

设定server,next-server

我们需要设置/etc/cobbler/settings中的 server 和 next_server

server为客户端指定安装镜像源IP,cobbler中使用httpd为客户端提供http访问,这里就是cobbler服务器地址

next_server为客户端指定TFTP服务器,用以获取引导所需内核文件, 我们是使用cobbler来管理tftp,dhcp,httpd等,因此这里还是cobbler服务器地址

cobbler服务器可能有多个网卡接口,用以连接不通网段,此时, server, next_server应为连接客户端那个网段的网卡IP

使用Cobbler接管dhcp, tftp

cobbler之前的pxe安装方式需要手动配置系统中的dhcp,tftp服务,但是在cobbler中我们不再需要直接去配置系统中的dhcp,tftp服务, 只需更改/etc/cobbler下的dhcp.template,tftpd.template,然后执行cobbler sync,cobbler会根据我们配置的这两个template文件去配置系统中的dhcp,tftp服务

首先允许cobbler接管dhcp,tftp

sed -i 's/manage_dhcp: 0/manage_dhcp: 1/g' /etc/cobbler/settings

sed -i 's/manage_tftpd: 0/manage_tftpd: 1/g' /etc/cobbler/settings

#确保`manage_dhcp`, `manage_tftpd`参数为`1`

然后在cobbler中配置tftp

cat /etc/cobbler/tftpd.template

# default: off

# description: The tftp server serves files using the trivial file transfer \

# protocol. The tftp protocol is often used to boot diskless \

# workstations, download configuration files to network-aware printers, \

# and to start the installation process for some operating systems.

service tftp

{

disable = no #确保disable为no

socket_type = dgram

protocol = udp

wait = yes

user = $user

server = $binary

server_args = -B 1380 -v -s $args

per_source = 11

cps = 100 2

flags = IPv4

}

可以看到tftpd.template内容与系统中的tftp服务/etc/xinetd.d/tftp内容一样,直接修改/etc/xinetd.d/tftp文件是无效的,因为每当执行一次cobbler synccobbler就会用tftpd.template覆盖/etc/xinetd.d/tftp文件,下面的dhcp.template同样是这样

接下来配置dhcp,修改/etc/cobbler/dhcp.template文件

subnet 192.168.6.0 netmask 255.255.255.0 { #网段

option routers 192.168.6.254; #客户端网关

default-lease-time 21600;

max-lease-time 43200;

next-server 192.168.6.249; #cobbler IP

class "pxeclients" {

match ifsubstring (option vendor-class-identifier, 0, 9) = "PXEClient";

ifoption pxe-system-type = 00:02 {

filename "ia64/elilo.efi";

} else ifoption pxe-system-type = 00:06 {

filename "grub/grub-x86.efi";

} else ifoption pxe-system-type = 00:07 {

filename "grub/grub-x86_64.efi";

} else {

filename "pxelinux.0";

}

}

}

注意,dhcp.template中有一个range dynamic-boot参数,它指定了dhcp服务器分配IP的范围,不要启动此参数,否则网段内会多出一台dhcp服务器

authoritative参数也不需要

修改密码

penssl passwd -1 -salt 'random-phrase-here' '123456'

#vi /etc/cobbler/settings  #default_password_crypted参数

不要重复安装系统

sed -i 's/pxe_just_once: 0/pxe_just_once: 1/g' /etc/cobbler/settings

加载启动引导文件

cobbler get-loaders

重启服务

cobbler check

service cobblerd start

cobbler sync

service httpd restart

service xinetd restart

service dhcpd restart

#先执行`cobbler sync`同步配置,然后重启dhcp,tftp

cobbler配置完成,可以再使用cobbler check检查所有配置是否正确

cobbler安装系统

如下,需要安装两台不同用途的客户端系统,准备安装的系统为centos7

name

ip

mac地址

用途

client1

192.168.6.170

d4:a2:52:b9:d1:25

kvm

client2

192.168.6.171

d4:a2:52:b9:d2:26

nginx

导入centos7的镜像

#挂载CentOS7.2镜像到/mnt目录,运行如下命令导入镜像

cobbler import --arch=x86_64 --path=/mnt/ --name=CentOS7.2

#`--name`是镜像名称,可以通过`cobbler distro list`查看

#导入镜像的同时,cobbler会自动创建一个profile关联此镜像,查看

cobbler profile list

创建安装client1的profile

#可以更改profile名字

cobbler profile rename --name=CentOS7.2-x86_64 --newname=centos7.2-kvm

#默认profile使用cobbler提供的一个ks文件,我们需要修改成自己编写的ks文件

cobbler profile edit --name=centos7.2-kvm --kickstart=/var/lib/cobbler/kickstarts/centos7.2-kvminstall.ks

上面我们新建的profilename 为centos7.2-kvm,关联了一个centos7的镜像和一个我们自己编写的ks文件,因此用这个profile安装的系统将会是我们关联的centos7系统,并且安装过程中会使用centos7.2-kvminstall.ks这个ks文件

创建安装client2的profile

#为另一台nginx应用建立profile,使用同一个安装镜像(distro)

cobbler profile add --name=centos7.2-nginx --distro=CentOS7.2

cobbler profile edit --name=centos7.2-nginx --kickstart=/var/lib/cobbler/kickstarts/centos7.2-nginxinstall.ks

#`--distro` 是上面导入的镜像名称

#查看这两个profile

cobbler profile list

#查看某个profile使用的具体配置

cobbler profile report --name=centos7.2-nginx

启动两个安装任务

下面启动安装client1,client2任务,注意使用的profile

cobbler system add --name=install_170 --profile=CentOS7.2-kvm --ip-address=192.168.6.170 --mac-address=d4:a2:52:b9:d1:25 --interface=eth0 --netboot-enabled=1

cobbler system add --name=install_171 --profile=CentOS7.2-nginx --ip-address=192.168.6.171 --mac-address=d4:a2:52:b9:d2:26 --interface=eth0 --netboot-enabled=1

#`--name` 任务名称

#`--profile` 任务使用的profile

#`--ip-address` 指定分配给客户端的ip地址

#`--mac-address` 某个客户端匹配到这个mac地址,才分配上面的ip地址给它,否则拒绝分配IP,以及安装系统

#`--interface` 这个任务使用cobbler服务器哪个网卡,跨网段安装

#若有多台客户端,可以用脚本完成

最后不要忘了执行sync,才能真正添加这两个任务

cobbler sync

查看所有的安装任务

cobbler system list

启动安装任务后,就可以在客户端从网络启动,自动安装系统了,上面的--ip-address,--mac-address保证了只有符合此mac地址的客户端才能安装系统

理解distro,profile,system

distro

cobbler中可以导入多个系统镜像,比如centos7.2,centos7.1,centos6,镜像name可以唯一标示它们,使用以下命令查看所有cobbler管理的镜像

cobbler distro list

cobbler distro report --name=distro_name

profile

profile可以理解为一种配置,一个镜像(distro)可以有多个配置(profile),这些profile可能使用不同的ks文件。考虑以下情况,我们有两批服务器,都安装centos7.2,但两批服务器所需磁盘分区方式不同,预装的软件包也不一样,显然此时无法使用同一个ks文件,这时就需要借助cobbler的profile,我们建立两个profile,在两个profile中指定不同的ks文件,同一个distro,这样就实现差异化安装系统

#查看所有的profile

cobbler profile list

#查看某个profile的具体配置(可以看到其所使用的ks文件,distro镜像源)

cobbler profile report --name=profile_name

system

每一个system都指定了mac地址,profile,可以说是为每个客户端量身定制

cobbler system list

cobbler system report --name=install_170

cobbler其它

上面是安装centos7系统,其它系统步骤类似,你可以不用考虑不同系统的引导启动文件不一样,cobbler会自动处理这些

system任务中指定mac,ip等信息可以只给匹配mac的客户端安装系统,不干扰网段其它机器,假如网段其它机器意外从网络启动,也不会被刷掉系统,但你也可以不指定这些信息,那么同网段所有客户端都可以从cobbler中的dhcp获取IP地址,以及安装系统

cobbler接管了系统dhcpd服务,但还是使用系统的dhcpd来给客户端分配IP地址,只是我们不需要直接配置dhcpd.conf,而是配置/etc/cobbler/dhcp.template,cobbler sync后cobbler会自动同步配置给dhcpd.conf,查看下/etc/cobbler/dhcp.template的内容,会发现下面代码,在我们添加system任务,cobbler sync之后,cobbler会更新这个文件到/etc/dhcp/dhcpd.conf,这段代码也会更新,作用就是匹配system里指定的mac地址,然后分配ip地址,没有匹配到mac地址的客户端全部拒绝,这就是dhcpd的功能,并不是cobbler自身实现的

如下我们配置dhcp.template文件

#cat /etc/cobbler/dhcp.template

...

#for dhcp_tag in $dhcp_tags.keys():

## group could be subnet if your dhcp tags line up with your subnets

## or really any valid dhcpd.conf construct ... if you only use the

## default dhcp tag in cobbler, the group block can be deleted for a

## flat configuration

# group for Cobbler DHCP tag: $dhcp_tag

group {

#for mac in $dhcp_tags[$dhcp_tag].keys():

#set iface = $dhcp_tags[$dhcp_tag][$mac]

host $iface.name {

hardware ethernet $mac;

#if $iface.ip_address:

fixed-address $iface.ip_address;

#end if

#if $iface.hostname:

option host-name "$iface.hostname";

#end if

#if $iface.netmask:

option subnet-mask $iface.netmask;

#end if

#if $iface.gateway:

option routers $iface.gateway;

#end if

#if $iface.enable_gpxe:

ifexists user-class and option user-class = "gPXE" {

filename "http://$cobbler_server/cblr/svc/op/gpxe/system/$iface.owner";

} else ifexists user-class and option user-class = "iPXE" {

filename "http://$cobbler_server/cblr/svc/op/gpxe/system/$iface.owner";

} else {

filename "undionly.kpxe";

}

#else

filename "$iface.filename";

#end if

## Cobbler defaults to $next_server, but some users

## may like to use $iface.system.server for proxied setups

next-server $next_server;

## next-server $iface.next_server;

}

#end for

}

#end for

然后执行cobbler sync

接着查看/etc/dhcp/dhcpd.conf文件,会发现cobbler已经同步配置到dhcpd.conf

#cat /etc/dhcp/dhcpd.conf

...

# group for Cobbler DHCP tag: default

group {

host generic1 {

hardware ethernet d4:ae:52:b9:d1:25;

fixed-address 192.168.6.170;

filename "/pxelinux.0";

next-server 192.168.6.249;

}

host generic2 {

hardware ethernet d4:ae:52:b9:d2:26;

fixed-address 192.168.6.171;

filename "/pxelinux.0";

next-server 192.168.6.249;

}

}

批量部署服务器系统,自动化运维之cobbler批量部署服务器系统 | opengers相关推荐

  1. 自动化运维工具SaltStack详细部署

    2019独角兽企业重金招聘Python工程师标准>>> 自动化运维工具SaltStack详细部署 2014-12-28 17:30:34 标签:saltstack 原创作品,允许转载 ...

  2. Ansible自动化运维工具介绍与部署

    ansible自动化运维工具介绍与部署 文章目录 一.什么是自动化运维? 二.常用的自动化运维工具 2.1 Ansible 2.2 SaltStack 2.3 Puppet 2.4 三种自动化工具特点 ...

  3. 自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客

    自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客 自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客 自动化运维工具Ansib ...

  4. 自动化运维工具Ansible详细部署

    一.基础介绍 ================================================================================= 1.简介 ansibl ...

  5. ansible(自动化运维上)——ansible部署,添加主机组,连通性测试

    ansible简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef. func.fabric)的优点.实现了批量系统配置.批 ...

  6. 自动化运维之ansible-安装部署与基础命令篇

    一.Ansible简介 Ansible基于Python语言开发,集合了众多优秀运维工具的优点,实现了批量运行命令.部署程序.配置系统等功能. 二.安装部署Ansible服务 Ansible自动化运维环 ...

  7. 自动化运维之–Cobbler

    Cobbler 自动化 Cobbler简介 Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows.该工具使用python开发,小巧轻便(才15k行pytho ...

  8. 高性能Linux服务器运维实战(系统基础运维)

    第1章 Linux基础命令的使用 1.1 Linux命令行与shell 1.1.1命令是Linux的精髓 X-window运行在命令行下的一个应用程序 1.1.2用户和操作系统内核之间通信的桥梁she ...

  9. 自动化运维系列之Cobbler (资源)

    2019独角兽企业重金招聘Python工程师标准>>> 下图为开源自动化运维体系链: 1.cobbler实现自动装机 2.saltstack实现工程自动化配置 3.kubernete ...

最新文章

  1. 词法作用域和动态作用域
  2. ORM 框架中SQLALCHEMY一点点个人总结
  3. python3.6.5安装-Ubuntu16.04安装python3.6.5详细步骤
  4. Git的commit之后的撤销reset
  5. php获取指定日期的万年历,分享3个php获取日历的函数
  6. 计算机视觉基础---图像处理(几何变换)cpp+python
  7. Windows Server 2008 R2 安全加固
  8. 抖音正考虑赴美IPO?字节跳动回应:消息不实
  9. 看了还不会装系统,智商肯定不高!
  10. startlogging中设置setstdout=false来禁用这个功能。_无线路由器的安全功能,你知道多少?...
  11. mysql在windows启动_MySQL笔记:mySQL在windows环境启动
  12. DevOps使用教程 华为云(16)git 日志记录 比较2次提交差异
  13. 服务器显示AL024是什么意思,焦作台达ASD-A2-0241-M伺服驱动器出现报警代码AL024怎么维修...
  14. php 获取xlsx,使用php读取xlsx文件
  15. 微信小程序-小程序的宿主环境
  16. 点餐系统,餐厅点餐系统,外卖点餐系统python计算机毕业设计
  17. 重启osd服务失败:Start request repeated too quickly
  18. Android 最简单的自定义证件照Mask之一
  19. 两个div实现十字架
  20. Revit导入CAD图纸,要提前优化图纸,你做到了吗?

热门文章

  1. 单片机实例3——多路开关状态指示(硬件电路图+汇编程序+C语言程序)
  2. SMART 监控项研究以及存储健康分级机制
  3. Redis数据库及五种数据类型的常用命令详解
  4. java实现第四届蓝桥杯公式求值
  5. 仿vivo控制中心下载_手机控制中心app
  6. mysql出现表warning_查看mysql的warnings
  7. 学历学籍系统-Web服务开发实验(REST API)
  8. 清理掉Win10“另存为“和“此电脑“里3D对象、视频、图片、文档、下载、音乐、桌面
  9. openlayers地图坐标转换为屏幕像素坐标,屏幕像素坐标转成地图实际坐标
  10. android界面UI美化:沉浸模式、全透明或半透明状态栏及导航栏的实现