运维自动化在生产环境中占据着举足轻重的地位,尤其是面对几百台,几千台甚至几万台的服务器时,仅仅是安装操作系统,如果不通过自动化来完成, 根本是不可想象的。面对生产环境中不同服务器的需求,该如何实现批量部署多版本的操作系统呢? Cobbler 便可以的满足这一实际需求,实现多版本操作系统批量部署
简介
Cobbler是一个自动化和简化系统安装的工具,通过使用网络引导来控制和启动安装。Cobbler的特性包括存储库镜像、Kickstart模板和连接电源管理系统。
Cobbler由Python语言开发,是对PXE和Kickstart以及DHCP的封装。融合很多特性,提供了CLI和Web的管理形式。更加方便的实行网络安装。同时,Cobbler也提供了API接口,使用其它语言也很容易做扩展。它不紧可以安装物理机,同时也支持kvm、xen虚拟化、Guest OS的安装。更多的是它还能结合Puppet等集中化管理软件,实现自动化的管理。
Cobbler 支持众多的发行版:Red Hat、Fedora、CentOS、Debian、Ubuntu 和 SuSE。当添加一个操作系统(通常通过使用 ISO 文件)时,Cobbler 知道如何解压缩合适的文件并调整网络服务,以正确引导机器。Cobbler 使用命令行方式管理,也提供了基于Web的图形化配置管理工具(cobbler-web)。通过配置cobbler自动部署DHCP、TFTP、HTTP,在安装过程中加载kiskstart无人值守安装应答文件实现无人值守。从客户端使用PXE引导启动安装。
工作原理
环境说明
系统: CentOS 7.4
服务端IP: 192.168.70.3/24
selinux: setenforce 0
防火墙: systemctl stop firewalld
注意:
虚拟机网卡采用 NAT 模式,不要使用桥接模式,因为我们会搭建 DHCP 服务器,在同一局域网多个 DHCP 服务会有冲突,并且导致实践失败。
VMware 的 NAT 模式的 DHCP 服务也关闭,避免干扰。
VMware - 编辑 - 虚拟网络编辑器 - VMnet8 NAT模式 - 取消 使用本地DHCP服务将IP地址分配给虚拟机
Cobbler安装
1 | cp -r /etc/yum.repos.d /etc/yum.repos.d.bak |
注:请一定要删除其他yum repo。 踩过坑,因有其他yum源,导致httpd反代cobbler 500错误,即cobbler validateks 失败,无法访问ks文件。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24[root@node0 ~]# rpm -ql cobbler # 查看安装的文件,下面列出部分
/etc/cobbler # 配置文件目录
/etc/cobbler/settings # Cobbler 主配置文件,这个文件是YAML格式,Cobbler是Python 写的程序
/etc/cobbler/dhcp.template # DHCP 服务的配置模板
/etc/cobbler/tftpd.template # tftp 服务的配置模板
/etc/cobbler/rsync.template # rsync 服务的配置模板
/etc/cobbler/iso # ISO 模板配置文件目录
/etc/cobbler/pxe # PXE 模板文件目录
/etc/cobbler/power # 电源的配置文件目录
/etc/cobbler/users.conf # Web 服务授权配置文件
/etc/cobbler/users.digest # 用于 Web 访问的用户名密码配置文件
/etc/cobbler/dnsmasq.template # DNS 服务的配置模板
/etc/cobbler/modules.conf # Cobbler 模块配置文件
/var/lib/cobbler # Cobbler 数据目录
/var/lib/cobbler/config # 配置文件
/var/lib/cobbler/kickstarts # 默认存放 kickstart 文件目录
/var/lib/cobbler/loaders # 存放的各种引导程序
/var/www/cobbler # 系统安装镜像目录
/var/www/cobbler/ks_mirror # 导入的系统镜像列表
/var/www/cobbler/images # 导入的系统镜像启动文件
/var/www/cobbler/repo_mirror # yum 源存储目录
/var/log/cobbler # 日志目录
/var/log/cobbler/install.log # 客户端系统安装日志
/var/log/cobbler/cobbler.log # Cobbler 日志
服务启动
1 | systemctl start httpd cobblerd xinetd rsyncd |
Cobbler配置
Cobbler 的运行依赖于 DHCP、TFTP、RSYNC 及 DNS 服务,其中 DHCP 可由 dhcpd(ISC)提供,也可由 dnsmasq 提供;TFTP 可由 tftp-server 程序包提供,也可由 Cobbler 功能提供, rsync 由 rsync 程序包提供,DNS 可由 bind 提供,也可由 dnsmasq 提供。
Cobbler可自行管理这些服务中的部分甚至是全部,但需要配置文件 /etc/cobbler/settings 中的“manange_dhcp”、“manager_tftpd”、“manager_rsync”、“manager_dns”分别来进行定义, 另外,由于各种服务都有着不同的实现方式,如若需要进行自定义,需要通过修改/etc/cobbler/modules.conf 配置文件中各服务的模块参数的值来实现。
1 | [root@linux-node1 ~]# cobbler check |
如上各问题解决方法如下及修改其他功能
修改默认配置项
备份和启用动态修改配置文件功能 1
2
3cp /etc/cobbler/settings{,.ori}
sed -i 's#allow_dynamic_settings: 0#allow_dynamic_settings: 1#' /etc/cobbler/settings
systemctl restart httpd cobblerd
1.server,修改为本机IP(Cobbler IP) 1
cobbler setting edit --name=server --value="192.168.70.3"
2. next_server,修改为本机IP(TFTP IP) 1
cobbler setting edit --name=next_server --value="192.168.70.3"
3.启用tftp,将disable字段的配置由yes改为no 1
2sed -i "/disable/ {s#yes#no#}" /etc/xinetd.d/tftp
systemctl restart xinetd
4.执行 cobbler get-loaders,系统将自动下载loader程序,完成提示4的修复工作。1
cobbler get-loaders
curl 无法访问github解决:1
2
3
4
5yum -y install syslinux
cp/usr/share/syslinux/pxelinux.0 /var/lib/cobbler/loaders/
cp/usr/share/syslinux/menu.c32 /var/lib/cobbler/loaders/
systemctl restart cobblerd
cobbler get-loaders
5.启动rsyncd 1
systemctl start rsyncd
6.提示说debmirror没安装。如果不是安装 debian之类的系统,此提示可以忽略 1
2
3yum install debmirror -y
sed -i 's! ="sid";!# ="sid";!' /etc/debmirror.conf
sed -i 's! ="i386";!# ="i386";!' /etc/debmirror.conf
7.修改cobbler用户的默认密码,可以使用如下命令生成密码,并使用生成后的密码替换/etc/cobbler/settings中的密码。1
cobbler setting edit --name=default_password_crypted --value="$1$cobbler$M6SE55xZodWc9.vAKLJs6."
1 | 生成密码命令:openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'其中“random-phrase-here”为任意字符 |
8.提示安装cman或者fence-agents,暂不需要 1
yum install -y fence-agents
8.设置Cobbler一次安装开关。避免服务器的启动项是PXE时,启动或重启时重复装系统 1
cobbler setting edit --name=pxe_just_once --value=1
DHCP配置
1.配置使用 Cobbler 管理 DHCP1
cobbler setting edit --name=manage_dhcp --value=1
2.修改 Cobbler 的 DHCP 模版,不要直接修改/etc/dhcp/dhcpd.conf 配置文件,因为 Cobbler 会覆盖
cp /etc/cobbler/dhcp.template{,.ori}
vim /etc/cobbler/dhcp.template # 列出修改过的相关字段
1
2
3
4
5
6
7
8 subnet 192.168.70.0 netmask 255.255.255.0 {
option routers 192.168.70.2;
option domain-name-servers 192.168.70.2;
option subnet-mask 255.255.255.0;
range dynamic-bootp 192.168.70.100 192.168.70.200;
default-lease-time 21600;
max-lease-time 43200;
next-server $next_server;
检查配置
grep -A 7 “^subnet “ /etc/cobbler/dhcp.template
grep -E “^(server|next_server|manage_dhcp|pxe_just_once|default_password_crypted)” /etc/cobbler/settings
1
2
3
4
5 default_password_crypted: "$1$cobbler$M6SE55xZodWc9.vAKLJs6."
manage_dhcp: 1
next_server: 192.168.70.3
pxe_just_once: 1
server: 192.168.70.3
grep -r “disable” /etc/xinetd.d/tftp
1 disable = no
Cobbler同步
1 | systemctl restart cobblerd httpd rsyncd tftp xinetd |
开机启动
1 | systemctl enable dhcpd xinetd httpd cobblerd rsyncd |
Cobbler 命令行管理
1 | cobbler |
管理 distro
Cobbler 变得可用的第一步为定义 distro,其可以通过为其指定外部的安装引导内核及 ramdisk 文件的方式实现。
如果已经有完成的安装树(如 OS 的安装镜像)则推荐使用 improt 导入的方式进行。
导入镜像
1 | [root@linux-node1 ~]# mount /dev/cdrom /mnt # 挂载 CentOS 7 的系统镜像 |
如果有 kickstart 文件,也可以使用–kickstart=/path/to/kickstart_file 进行导入,import 会自动为导入的 distro 生成一个 profile
查看安装镜像文件信息
1 | [root@linux-node1 ~]# cobbler distro report --name=CentOS-7-x86_64 |
管理 profile
Cobbler使用 profile 来为特定的需求类别提供所需要安装的配置,即在 distro 的基础上通过提供 kiskstart 文件来生成一个特定的系统安装配置。 distro 的 profile 可以出现在 PXE 的引导菜单中作为安装的选择之一
查看profile设置
查看所有的 profile 设置1
[root@linux-node1 ~]# cobbler profile report
查看指定的 profile 设置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[root@linux-node1 ~]# cobbler profile report --name=CentOS-7-x86_64
Name : CentOS-7-x86_64
TFTP Boot Files : {}
Comment :
DHCP Tag : default
Distribution : CentOS-7-x86_64
Enable gPXE? : 0
Enable PXE Menu? : 1
Fetchable Files : {}
Kernel Options : {'biosdevname': '0', 'net.ifnames': '0'}
Kernel Options (Post Install) : {}
Kickstart : /var/lib/cobbler/kickstarts/sample_end.ks # 默认 ks 文件
Kickstart Metadata : {}
Management Classes : []
Management Parameters : <<inherit>>
Name Servers : []
Name Servers Search Path : []
Owners : ['admin']
Parent Profile :
Internal proxy :
Red Hat Management Key : <<inherit>>
Red Hat Management Server : <<inherit>>
Repos : []
Server Override : <<inherit>>
Template Files : {}
Virt Auto Boot : 1
Virt Bridge : xenbr0
Virt CPUs : 1
Virt Disk Driver Type : raw
Virt File Size(GB) : 5
Virt Path :
Virt RAM (MB) : 512
Virt Type : kvm
Cobbler 的 ks.cfg 文件存放位置1
2
3
4
5
6
7[root@linux-node1 ~]# ls /var/lib/cobbler/kickstarts/
CentOS-7-x86_64.cfg esxi4-ks.cfg install_profiles pxerescue.ks sample_end.ks(默认使用的ks文件) sample_esxi4.ks sample.ks sample.seed
default.ks esxi5-ks.cfg legacy.ks sample_autoyast.xml sample_esx4.ks sample_esxi5.ks sample_old.seed
# 在第一次导入系统镜像后,Cobbler 会给镜像指定一个默认的 kickstart 自动安装文件在 /var/lib/cobbler/kickstarts 下的 sample_end.ks
[root@linux-node1 ~]# cd /var/lib/cobbler/kickstarts/
[root@linux-node1 kickstarts]# rz # 上传准备好的 ks 文件
下载ks
1 | wget -O /var/lib/cobbler/kickstarts/CentOS-7-x86_64.cfg https://raw.githubusercontent.com/sundayle/Cobbler/master/CentOS-7-x86_64.cfg |
修改 profile,指定ks文件及调整内核参数
1 | [root@linux-node1 kickstarts]# cobbler profile edit --name=CentOS-7-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS-7-x86_64.cfg |
测试kickstarts
1 | cobbler validateks |
编辑 profile,修改网卡命名
修改安装系统的内核参数,在 CentOS 7 系统有一个地方变了,就是网卡名变成 eno16777736 这种形式,但是为了运维标准化,
我们需要将它变成我们常用的 eth0,因此使用下面的参数。但要注意是 CentOS 7 才需要下面的步骤,CentOS 6 不需要。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[root@linux-node1 kickstarts]# cobbler profile edit --name=CentOS-7-x86_64 --kopts='net.ifnames=0 biosdevname=0'
[root@linux-node1 kickstarts]# cobbler profile report CentOS-7-x86_64
Name : CentOS-7-x86_64
TFTP Boot Files : {}
Comment :
DHCP Tag : default
Distribution : CentOS-7-x86_64
Enable gPXE? : 0
Enable PXE Menu? : 1
Fetchable Files : {}
Kernel Options : {'biosdevname': '0', 'net.ifnames': '0'}
Kernel Options (Post Install) : {}
Kickstart : /var/lib/cobbler/kickstarts/CentOS-7-x86_64.cfg
Kickstart Metadata : {}
Management Classes : []
Management Parameters : <<inherit>>
Name Servers : []
Name Servers Search Path : []
Owners : ['admin']
Parent Profile :
Internal proxy :
Red Hat Management Key : <<inherit>>
Red Hat Management Server : <<inherit>>
Repos : []
Server Override : <<inherit>>
Template Files : {}
Virt Auto Boot : 1
Virt Bridge : xenbr0
Virt CPUs : 1
Virt Disk Driver Type : raw
Virt File Size(GB) : 5
Virt Path :
Virt RAM (MB) : 512
Virt Type : kvm
每次修改完都要同步一次 1
[root@linux-node1 ~]
管理 repo
cobbler内网yum源
新部署机器安使用内网yum源
添加 repo
1 | #cobbler repo add --name=centos7-aliyun --mirror=http://mirrors.aliyun.com/centos/7/os/x86_64/ --arch=x86_64 --breed=yum |
同步repo
1 | cobbler reposync |
添加 repo 到对应的 profile
1 | cobbler profile edit --name=Centos-7-x86_64 --repos="centos7-openstack-pike" |
修改 kickstart文件。
添加 $yum_config_stanza 到 %post %end 中间,如下:1
2
3post
yum_config_stanza
end
Kickstart文件:https://github.com/sundayle/Cobbler/blob/master/CentOS-7-x86_64.cfg
添加定时任务,定期同步 repo
1 | echo "0 3 * * * /usr/bin/cobbler reposync --tries=3 --no-fail" >> /var/spool/cron/root |
重装系统完成后的机器配置的 cobbler repo 如下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15[root@localhost ~]# cat /etc/yum.repos.d/cobbler-config.repo
[core-0]
name=core-0
baseurl=http://192.168.70.101/cobbler/ks_mirror/CentOS-7-x86_64
enabled=1
gpgcheck=0
priority=1
[centos7-openstack-pike]
name=centos-7.2-openstack-mitaka
baseurl=http://192.168.70.3/cobbler/repo_mirror/centos7-openstack-pike
enabled=1
priority=99
gpgcheck=0
安装系统
安装新系统
新建一台虚拟机,通过网络启动即可。
注:VMware 新建CentOS7虚拟机内存需要>=2GB,不然会报错无法继续安装。
https://access.redhat.com/solutions/3293511
修改Cobbler提示
1 | [root@linux-node1 ~] |
使用 koan 客户端进行系统重装
安装 koan 客户端1
[root@linux-node1 ~]
查询 Cobbler 服务器上 profile1
2
3
4[root@linux-node1 ~]# koan --server=192.168 --list=profiles
- looking for Cobbler 192.168 :80/cobbler_api http://
CentOS-7-x86_64
CentOS-6-x86_64
指定要重装的系统1
[root@linux-node1 ~]# koan --replace-self --server=192.168.70.3 --profile=CentOS-7-x86_64
如何避免 koan 安装错误机器,或者 cobbler 自动化安装错误机器。
解决方法:环境设计:配置装机 VLAN
定制化安装
可能从学习 kickstart 开始就有人想怎样能够指定某台服务器使用指定 ks 文件,kickstart 实现这功能可能比较复杂,但是 Cobbler 就很简单了。 区分一台服务器的最简单的方法就是物理MAC地址。
物理服务器的 MAC 地址在服务器上的标签上写了。
根据机器的 MAC 地址,自动绑定 IP,网关,DNS 等1
2[root@linux-node1 ~]# cobbler system add --name=www.sundayle.com --mac=00:0C:29:52:E2:9D --profile=CentOS-7-x86_64 --ip-address=192.168.70.118 --subnet=255.255.255.0 --gateway=192.168.70.2 \
--interface=eth0 --static=1 --hostname=www.sundayle.com --name-servers="223.5.5.5 223.6.6.6" --kickstart=/var/lib/cobbler/kickstarts/CentOS-7-x86_64.cfg
–name 自定义,但不能重复
查看定义的列表1
2
3[root@linux-node1 ~]# cobbler system list
www.sundayle.com
[root@linux-node1 ~]# cobbler sync
不进行询问,自动安装
服务器采购及系统安装流程
1.服务器采购
2.服务器验收并设置 RAID
3.服务商提供验收单,运维验收负责人签字。
4.服务器上架
5.资产录入。
6.开始自动化安装。
将新服务器划入装机 VLAN
根据资产清单上的 MAC 地址,自定义安装。 1.机房 2. 机房区域 3. 机柜 4. 服务器位置 5. 服务器网线接入端口 6. 该端口 MAC 地址 7.profile ks.cfg 中指定操作系统 分区等、预分配的 IP 地址、主机名、子网、网关、DNS、角色等。
自动化装机平台,安装。 例子:
MAC: 00:0C:29:52:E2:9D
IP: 192.168.70.118
掩码:255.255.255.0
网关:192.168.70.2
主机名:www.sundayle.com
DNS:223.5.5.5 223.6.6.6
根据 6.3 中的定制化安装配置如下 system:1
2cobbler system add –name=www.sundayle.com –mac=00:50:56:35:46:6E –profile=CentOS-7-x86_64 –ip-address=192.168.70.118 –subnet=255.255.255.0 –gateway=192.168.70.2 \
–interface=eth0 –static=1 –hostname=www.sundayle.com –name-servers=”223.5.5.5 223.6.6.6” –kickstart=/var/lib/cobbler/kickstarts/CentOS-7-x86_64.cfg
Cobbler Web 管理配置
新版 Cobbler 的 Web 界面使用的是 https
登录URL: https://192.168.70.3/cobbler_web
配置账号密码
cobbler_web 支持多种认证方式,如 authn_configfile、authn_ldap 或 authn_pam 等,默认为authn_denyall,即拒绝所有用户登陆。
下面说明三种能认证用户登录 cobbler_web 的方式
使用 authn_pam 模块认证 cobbler_web 用户
首先修改 modules 中的 [authentication] 段中的 module 参数的值为 authn_pam 接着创建系统用户,并为用户设定密码,而后将设定的系统用户添加至 cobbler_web 的 admin 组中,修改 /etc/cobbler/users.conf文件, 将设定的用户添加为 admin 参数的值即可
使用 authn_configfile 模块认证 cobbler_web 用户 首先修改 modules 中的 [authentication] 段中的 module 参数的值为 authn_configfile 添加用户时,需要为 htdigest 命令使用 “-c” etc/cobbler/users.digest,后续添加其他用户则不能再使用,同步 cobbler,重启 httpd 以及 cobbler
使用 Cobbler 默认的 Web 账号密码认证
user:cobbler
password:cobbler
/etc/cobbler/users.conf # Web服务授权配置文件
/etc/cobbler/users.digest # 用于web访问的用户名密码配置文件1
2[root@linux-node1 ~]# cat /etc/cobbler/users.digest
cobbler:Cobbler:a2d6bae81669d707b72c0bd9806e01f3
设置 Cobbler Web 用户登陆密码1
2
3
4
5
6[root@linux-node1 ~]# htdigest /etc/cobbler/users.digest "Cobbler" cobbler
Changing password for user cobbler in realm Cobbler
New password: 123456
Re-type new password:123456
[root@linux-node1 ~]# cobbler sync
[root@linux-node1 ~]# systemctl restart httpd cobblerd
http://jaminzhang.github.io/automated%20ops/Cobbler-automate-deployment-practice/#top8
https://wsgzao.github.io/post/cobbler/
https://access.redhat.com/solutions/3293511
http://www.madmalls.com/blog/post/cobbler-auto-install-multi-version-os/#11-centos-baserepoepelrepo
http://cobbler.github.io/manuals/2.8.0/
https://github.com/sundayle/Cobbler