1. 程式人生 > >實戰:Cobbler 無人值守自動部署系統

實戰:Cobbler 無人值守自動部署系統

cobbler pxe 無人值守

背景:

裝系統相信大家都不陌生,對於運維攻城獅可以說是家常便飯,老大說:小劉今天裝一下系統,明天把那幾臺機器系統重裝一下。就這樣一上午,一天就這麽過去了。耗時費力不說,重點是沒有效率,沒錯這就是我的痛點。一個好的運維工作時間清閑才說明你的工作做到位了。萬一某天說小劉把100個新機器裝一下系統。。。該如何徹底解放雙手呢?

今天我們介紹一款無人值守自動化部署系統的軟件Cobbler,真正是實現從機器上架,插上網線一切都交給Cobbler來完成


簡介:

先介紹下Cobbler(補鞋匠),根據其名稱可想而知。Cobbler是紅帽(Red Hat)2008年推出的網絡安裝服務器套件 ,它大大降低 Linux 網絡安裝的技術門檻降,對於自動化運維可以必須要學的基礎服務套件。

Cobbler是一款自動化操作系統部署的實現工具,由Python語言開發,是對PXE的二次封裝。融合多種特性,提供了CLI和Web的管理形式。同時,Cobbler也提供了API接口,方便二次開發使用。它不僅可以安裝物理機,同時也支持kvm、xen虛擬化、的安裝。另外,它還能結合Puppet等集中化管理軟件,實現自動化管理,同時還可以管理DHCP,DNS,以及yum包鏡像。

Cobbler各個組件的關系(如下圖)

技術分享圖片技術分享圖片

通過 cobbler,可以輕松實現對RedHat/Centos/Fedora系統的快速部署,同時也支持Suse 和Debian(Ubuntu)系統。Cobbler集成的服務:

  • PXE服務支持

  • DHCP服務管理

  • DNS服務管理(可選bind,dnsmasq)

  • 電源管理

  • Kickstart服務支持

  • YUM倉庫管理

  • TFTP(PXE啟動時需要)

  • Apache(提供kickstart的安裝源,並提供定制化的kickstart配置)

結合這些集成服務,Cobbler工作流程:

技術分享圖片技術分享圖片


環境:

Cobbler服務器:CentOS6.9 ---> IP:192.168.137.38

客戶端(需要部署Linux系統及IP):

CentOS6.8 ---> IP地址段:192.168.137.100-254 DNS:8.8.8.8,8.8.4.4

CentOS7.4 ---> IP地址段:192.168.137.100-254 DNS:8.8.8.8,8.8.4.4

準備鏡像文件

CentOS-7.4-x86_64

CentOS-6.8-x86_64


Cobbler服務端安裝部署:

以下配置可用通過腳本自動安裝配置,筆者寫了個腳本自動完成部署(github)地址:

https://github.com/Ljohn001/ljohn_ops/tree/master/cobbler

用著順手記得給個Star,請賜予我力量吧,筆者的腳本功力還很弱,但腳本在CentOS68/69反復測了5-6遍才讓它面世,這是一種苛求,亦是一種執著。


一:配置YUM源(epel)

Cobbler 集成服務需要epel,這裏提供Aliyun的鏡像

# cp -r /etc/yum.repos.d /etc/yum.repos.d.backup && rm -rf /etc/yum.repos.d/*
# wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/{Centos-6.repo,epel-6.repo}


二:關閉服務端的防火墻及selinux

清除防火墻規則,並關閉(或者開放22 80 67 68 69 443 端口)

# iptables -F && /etc/inist.d/iptables stop
# chkconfig iptables off
關閉selinux
# setenforce 0
# sed -i '/^SELINUX=/ s/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config


三:安裝Cobbler集成服務

安裝Cobbler 程序
# yum -y install cobbler cobbler-web tftp tftp-server xinetd dhcp httpd pykickstart mod_wsgi mod_ssl rsync
安裝Cobbler 依賴程序
# yum -y install debmirror python-ctypes python-cheetah python-netaddr python-simplejson python-urlgrabber PyYAML syslinux cman fence-agents createrepo mkisofs yum-utils
debian/ubuntu 系統需要 debmirror 軟件包;想使用電源管理功能的話需要安裝 cman 或fence-agents。


四:配置Cobbler及集成服務

#設置部署系統初始密碼

# openssl passwd -1 -salt 'ljohn' '123456' #  -salt 表示”加鹽“ , ”ljohn“ 可以是任意字符
$1$ljohn$yBMDpKkntQ9jfV1ZAWKpU1

1、修改Coobler配置文件

# cp /etc/cobbler/settings{,.bak}
# sed -i 's@default_password_crypted: .*@default_password_crypted: "\$1\$ljohn\$yBMDpKkntQ9jfV1ZAWKpU1"@'/etc/cobbler/settings##註意$ 需要轉義
# sed -i "s/server: 127.0.0.1/server: 192.168.137.38/g" /etc/cobbler/settings
# sed -i "s/next_server: 127.0.0.1/next_server: 192.168.137.38/g" /etc/cobbler/settings
# pxe安裝 只允許一次,防止誤操作( 在正式環境有用。實際測試來,這個功能可以屏蔽掉 )
# sed -i 's/pxe_just_once: 0/pxe_just_once: 1/g' /etc/cobbler/settings
# sed -i 's/manage_rsync: 0/manage_rsync: 1/g' /etc/cobbler/settings
# sed -i 's/manage_dhcp: 0/manage_dhcp: 1/g' /etc/cobbler/settings

2、配置debmirror

# debian/ubuntu 系統需要 debmirror 的配置
# cp  /etc/debmirror.conf{,.bak}
# sed -i -e 's/@dists=.*/#@dists=/' /etc/debmirror.conf
# sed -i -e 's/@arches=.*/#@arches=/' /etc/debmirror.conf

3、修改httpd配置

# cp /etc/httpd/conf/httpd.conf{,.bak}
# sed -i "s/#ServerName www.example.com:80/ServerName 192.168.137.38:80/" /etc/httpd/conf/httpd.conf
# sed -i 's/#LoadModule/LoadModule/g' /etc/httpd/conf.d/wsgi.conf

4、修改tftp配置

# sed -i '/disable/c disable = no' /etc/xinetd.d/tftp

5、配置rsync

# sed -i -e 's/= yes/= no/g' /etc/xinetd.d/rsync

6、修改dhcp配置

# cp /etc/cobbler/dhcp.template{,.bak}
# sed -i 's/DHCPDARGS=.*/DHCPDARGS=eth0/' /etc/sysconfig/dhcpd
##將DHCP配置文件中的192.168.1部分修改為192.168.0,刪除22,23行;並保存為原始文檔。##
# sed -i.ori '[email protected]@192.168.137@g;22d;23d' /etc/cobbler/dhcp.template
#也可以通過vim  /etc/cobbler/dhcp.template,查看dhcp配置文件

僅編輯修改部分

............
subnet 192.168.137.0 netmask 255.255.255.0 {
option subnet-mask         255.255.255.0;
range dynamic-bootp        192.168.137.100 192.168.137.254;
default-lease-time         21600;
max-lease-time             43200;
next-server                $next_server;
............

7、配置cobbler啟動服務,管理集成服務

設置開機啟動:

# chkconfig httpd on
# chkconfig xinetd on
# chkconfig cobblerd on
# chkconfig dhcpd on
# /etc/init.d/httpd restart
# /etc/init.d/xinetd restart
# /etc/init.d/cobblerd restart
cobbler SysV 服務腳本
cat >/etc/init.d/cobbler <<EOF
#!/bin/bash
# chkconfig: 345 80 90
# description:cobbler
case $1 in
start)
/etc/init.d/httpd start
/etc/init.d/xinetd start
/etc/init.d/dhcpd start
/etc/init.d/cobblerd start
;;
stop)
/etc/init.d/httpd stop
/etc/init.d/xinetd stop
/etc/init.d/dhcpd stop
/etc/init.d/cobblerd stop
;;
restart)
/etc/init.d/httpd restart
/etc/init.d/xinetd restart
/etc/init.d/dhcpd restart
/etc/init.d/cobblerd restart
;;
status)
/etc/init.d/httpd status
/etc/init.d/xinetd status
/etc/init.d/dhcpd status
/etc/init.d/cobblerd status
;;
sync)
cobbler sync
;;
*)
echo "Input error,please in put 'start|stop|restart|status|sync'!"
exit 2
;;
esac
EOF
# chmod +x /etc/init.d/cobbler
# chkconfig cobbler on
# /etc/init.d/cobbler restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
Stopping xinetd:                                           [  OK  ]
Starting xinetd:                                           [  OK  ]
Shutting down dhcpd:                                       [  OK  ]
Starting dhcpd:                                            [  OK  ]
Stopping cobbler daemon:                                   [  OK  ]
Starting cobbler daemon:                                   [  OK  ]
# cobbler get-loader    #加載部分缺失的網絡boot-loaders,否則會報錯。
# cobbler sync       #同步配置到dhcp pxe和數據目錄
# cobbler check         #檢查是否有錯誤

# 註意:

#這裏要提一下,根據錯誤提示自行度娘,連google都不需要,筆者就不啰嗦了。

所有配置基本完成,接下來我們來介紹一下cobbler命令,以及導入鏡像


五:Cobbler命令管理

1、Cobbler命令

# cobbler
usage
=====
cobbler <distro|profile|system|repo|image|mgmtclass|package|file> ...
[add|edit|copy|getks*|list|remove|rename|report] [options|--help]
cobbler <aclsetup|buildiso|import|list|replicate|report|reposync|sync|validateks|version|signature|get-loaders|hardlink> [options|--help]
Cobbler 命令介紹:
cobbler get-loaders  #加載部分缺失的網絡boot-loaders
cobbler check          #檢查cobbler配置
cobbler sync            #同步配置到dhcp pxe和數據目錄
cobbler list              #列出所有的cobbler元素
cobbler import          #導入安裝的系統光盤鏡像
cobbler report          #列出各元素的詳細信息
cobbler distro          #查看導入的發行版系統信息
cobbler profile         #查看配置信息
cobbler system         #查看添加的系統信息
cobbler reposync       #同步yum倉庫到本地
cobbler signature update
cobbler --help           #獲得cobbler的幫助
cobbler distro --help  #獲得cobbler子命令的幫助
獲取幫助:
#cobbler import --help
Usage: cobbler [options]
Options:
-h, --help            show this help message and exit
--arch=ARCH           OS architecture being imported
--breed=BREED         the breed being imported
--os-version=OS_VERSION
the version being imported
--path=PATH           local path or rsync location
--name=NAME           name, ex 'RHEL-5'
--available-as=AVAILABLE_AS
tree is here, don't mirror
--kickstart=KICKSTART_FILE
assign this kickstart file
--rsync-flags=RSYNC_FLAGS
pass additional flags to rsync

2、導入鏡像(重點)

# Cobbler服務器先掛載CentOS7的系統鏡像

# mount -r -t iso9660  /dev/cdrom /mnt

# 導入系統鏡像

# cobbler import --path=/mnt --name=CentOS-7.4-x86_64 --arch=x86_64
# cobbler import --path=/mnt --name=CentOS-6.8-x86_64 --arch=x86_64
# --path 鏡像路徑
# --name 為安裝源定義一個名字
# --arch 指定安裝源是32位、64位、ia64, 目前支持的選項有: x86│x86_64│ia64
# 安裝源的唯一標示就是根據name參數來定義,本例導入成功後,安裝源的唯一標示就是:CentOS-7.4-x86_64,如果重復,系統會提示導入失敗。
# cobbler distro list  # 查看鏡像列表
CentOS-7.4-x86_64
CentOS-7.4-x86_64

# 註意:

# 鏡像存放目錄,cobbler會將鏡像中的所有安裝文件拷貝到本地一份,放在/var/www/cobbler/ks_mirror下的CentOS-7.4-x86_64目錄下。因此/var/www/cobbler目錄必須具有足夠容納安裝文件的空間,如果空間不夠,可以對/var/www/cobbler目錄進行移動,建軟鏈接來修改文件存儲位置。

例如:

# ln -s /home/cobbler /var/www

# cd /var/www/cobbler/ks_mirror/ && ls

CentOS-7.4-x86_64 CentOS-6.8-x86_64 config

# ls CentOS-7.4-x86_64/
CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7
EFI              images    Packages  RPM-GPG-KEY-CentOS-Testing-7
EULA             isolinux  repodata  TRANS.TBL

到這裏表示鏡像已經導入成功了。

# 註意:

# 比較與光盤的文件大小是否一致

# du -sh /var/www/cobbler/ks_mirror/CentOS-7.4-x86_64/
# du -sh /mnt


六、 創建kickstarts文件(RHEL/CentOS)

這裏要提一下,不同操作系統的kickstart 文件略有不同,筆者現在演示的RHEL/CentOS系列操作系統ks文件

1、 Cobbler的ks.cfg文件存放位置

# cd /var/lib/cobbler/kickstarts/ && ls#自帶很多
default.ks    install_profiles  sample_autoyast.xml  sample_esxi4.ks  sample_old.seed
esxi4-ks.cfg  legacy.ks         sample_end.ks(默認使用的ks文件)        sample_esxi5.ks  sample.seed
esxi5-ks.cfg  pxerescue.ks      sample_esx4.ks       sample.ks

2、編輯CentOS6.8和CentOS7.4 kickstart配置文件

這裏貼出來我最小化安裝兩個版本ks文件,筆者喜歡最小化安裝,你也可以根據自己需要,定制ks文件。

提供兩種配置ks的方法:

方法1、 每安裝好一臺Centos機器,Centos安裝程序都會創建一個kickstart配置文件,記錄你的真實安裝配置。如果你希望實現和某系統類似的安裝,可以基於該系統的kickstart配置文件來生成你自己的kickstart配置文件。(生成的文件名字叫anaconda-ks.cfg位於/root/anaconda-ks.cfg)

方法2、Centos提供了一個圖形化的kickstart配置工具。在任何一個安裝好的Linux系統上運行該工具,就可以很容易地創建你自己的kickstart配置文件。kickstart配置工具命令為redhat-config-kickstart(RHEL3)或system-config-kickstart(RHEL5/6/7)

# yum install system-config-kickstart #安裝

# yum groupinstall "X Window System" #安裝X Window圖形界面

# system-config-kickstart #運行kickstart配置

#筆者不喜歡使用Linux運行圖形化界面,浪費資源,有興趣的夥伴可以研究一下

接下來給兩個實例(重點)

實例一(CentOS7.4 ks)

#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
# old format: keyboard us
# new format:
keyboard --vckeymap=us --xlayouts='us'
# Root password
rootpw --iscrypted $1$ljohn$yBMDpKkntQ9jfV1ZAWKpU1
# Use network installation
url --url="http://192.168.137.38/cobbler/ks_mirror/CentOS-7.4-x86_64/"
# System language
lang en_US.UTF-8
# Firewall configuration
firewall --disabled
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# System services
services --disabled="chronyd"
ignoredisk --only-use=sda
# Network information
network  --bootproto=dhcp --device=eth0 --onboot=on
#network  --bootproto=static --device=eth0 --gateway=192.168.137.1 --ip=192.168.137.40 --nameserver=8.8.8.8 --netmask=255.255.255.0  --activate
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# System bootloader configuration
bootloader --location=mbr --boot-drive=sda
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --asprimary --fstype="xfs" --size=1024
part swap --fstype="swap" --size=2048
part / --fstype="xfs" --grow --size=1
%packages
@^minimal
@core
%end

實例二(CentOS6.8 ks):

#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.137.38/cobbler/ks_mirror/CentOS-6.8-x86_64/"
#repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
# Root password
rootpw --iscrypted $1$ljohn$yBMDpKkntQ9jfV1ZAWKpU1
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use graphical install
graphical
# System keyboard
keyboard us
# System language
lang en_US.UTF-8
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# Installation logging level
#logging --level=info
# Reboot after installation
reboot
# System timezone
timezone  Asia/Shanghai
# Network information
network  --bootproto=dhcp --device=eth0 --onboot=on
#network  --bootproto=dhcp --device=eth1 --onboot=on
# System bootloader configuration
bootloader --append="crashkernel=auto rhgb quiet" --location=mbr --driveorder="sda"
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --asprimary --fstype="ext4" --size=500
part swap --fstype="swap" --size=2048
part / --fstype="ext4" --grow --size=1
%packages --nobase
@core
%end

註意:

這兩個實例安裝包都使用了core的最小化版本安裝,可以大大縮短系統部署時間,畢竟時間就是金錢。如果有需要的,可以在packages後面添加一些常用的工具,這裏不再贅述。

3、關聯鏡像與kickstart 文件


# cobbler profile report --name CentOS-7.4-x86_64#查看鏡像是否存在,
# cobbler profile report --name CentOS-6.8-x86_64
# cobbler profile edit --name=CentOS-7.4-x86_64 --kopts='net.ifnames=0 biosdevname=0'#這裏還原centos7網卡名為“eth0”
# cobbler profile edit --name=CentOS-7.4-x86_64 --distro=CentOS-7.4-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS-7.4-x86_64.cfg #關聯ks文件與對應的CentOS7.4鏡像
# cobbler profile edit --name=CentOS-6.8-x86_64 --distro=CentOS-6.8-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS-6.8-x86_64.cfg
# service  cobbler  sync  #與cobbler sync作用相同,同步配置,每次對cobbler更改都要執行同步


七、無人值守安裝系統

安裝啟動前保證要安裝的機器,所在的物理網絡與現在Cobbler暢通,如果是虛擬機(VMware),要關閉其自身的DHCP服務

編輯--> 虛擬網絡編輯器 --> 使用本地DHCP服務將IP地址分配給虛擬機(取消勾選),避免和Cobbler服務器的DHCP沖突。

虛擬機需要先創建一個虛擬機(按需配置,切記如果是CentOS7.x以上一定要給2G的內存,這都是坑...希望你沒踩到

1、檢查cobbler各個組件

# cobbler sync
# cobbler check
# cobbler distro list
# cobbler profile report --name CentOS-7.4-x86_64#查看你需要安裝的鏡像相關配置是否正確

2、啟動機器:

選擇鏡像安裝即可

技術分享圖片技術分享圖片

3、安裝完成如圖:

技術分享圖片技術分享圖片


Cobbler-web 圖形化配置

這裏配置不做說明,


Linux系統重裝測試

1,先確定當前linux系統中已經安裝了koan軟件。對於koan的安裝可以放到ks文件中在安裝系統的過程中完成安裝操作。執行如下命令檢查

# rpm -qa|grep koan
koan-2.0.11-2.el6.noarch
# yum install koan#安裝koan

2,有了koan軟件後可以執行如下操作,查看cobbler上的系統版本列表

#koan --server=192.168.137.38 --list=profiles
- looking for Cobbler at http://192.168.137.38:80/cobbler_api
CentOS-6.8-x86_64
CentOS-7.4-x86_64

這裏我們選擇CentOS-7.4-x86_64來重裝。可以執行如下命令

# koan --server=192.168.137.38 --profile=CentOS-7.4-x86_64 --replace-self
# reboot  #直接重啟即可自動重裝

紅色部分是手工輸入的,從其他部分信息可以看到,koan幫我們做了很多本該人工操作的內容。

附錄1:

Cobbler目錄說明

1、Cobbler配置文件目錄:/etc/cobbler

/etc/cobbler/settings #cobbler主配置文件
/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模塊配置文件

2、Cobbler數據目錄:/var/lib/cobbler

/var/lib/cobbler/config #配置文件
/var/lib/cobbler/triggers #Cobbler命令
/var/lib/cobbler/kickstarts #默認存放kickstart文件
/var/lib/cobbler/loaders #存放的各種引導程序

3、系統安裝鏡像目錄:/var/www/cobbler

/var/www/cobbler/ks_mirror #導入的系統鏡像列表
/var/www/cobbler/images #導入的系統鏡像啟動文件
/var/www/cobbler/repo_mirror #yum源存儲目錄

4、日誌目錄:/var/log/cobbler

/var/log/cobbler/install.log #客戶端系統安裝日誌
/var/log/cobbler/cobbler.log #cobbler日誌


實戰:Cobbler 無人值守自動部署系統