運維自動化工具——Cobbler實踐
第1章 About Cobbler
1.1 Cobbler Introduction
Cobbler是一個Linux服務器安裝的服務,可以通過網絡啓動(PXE)的方式來快速安裝、重裝物理服務器
和虛擬機,同時還可以管理DHCP,DNS等。
Cobbler可以使用命令行方式管理,也提供了基於Web的界面管理工具(cobbler-web),還提供了API
接口,可以方便二次開發使用。Cobbler是較早前的kickstart的升級版,優點是比較容易配置,還自帶web界面比較易於管理。
Cobbler內置了一個輕量級配置管理系統,但它也支持和其它配置管理系統集成,如Puppet,暫時不支
持SaltStack。
1.2 Cobbler related servies
PXE服務支持
DHCP服務管理
DNS服務管理(可選bind,dnsmasq)
電源管理
Kickstart服務支持
YUM倉庫管理
TFTP(PXE啓動時需要)
Apache(提供kickstart的安裝源,並提供定製化的kickstart配
第2章 Prerequisites
2.1 Requries Packages
yum -y install cobbler cobbler-web dhcp tftp-server pykickstart httpd xinetd
#注:這裏我是在Centos-7上做操作,有的安裝包可能和官網會不同。
2.2 Installing From Packages
2.2.1 CentOS Release and Environment
[root@linux-node1 ~]# cat/etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@linux-node1 ~]# uname -r 3.10.0-327.18.2.el7.x86_64 [root@linux-node1 ~]# uname -m x86_64 [root@linux-node1 ~]# hostname linux-node1.example.com [root@linux-node1 ~]# ifconfig eth0|awk-F "[ :]+" 'NR==2{print $3}' 192.168.56.11 [root@linux-node1 ~]# getenforce Disabled [root@linux-node1 ~]# systemctl stop firewalld
2.2.2 epel源和yum源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
2.3 Cobbler Funcation Introduction
使用一個以前定義的模塊來配置DHCP服務(如果啓用了管理DHCP)
將一個存儲庫(yum和rsync)建立鏡像或解壓縮一個媒介,已註冊一個新操作系統
在DHCP配置文件中爲需要安裝的機器創建一個條目,並使用您指定的參數(IP和MAC地址)
在TFTP服務目錄下創建適當的PXE文件
重新啓動DHCP服務以反映更改
重新啓動機器以開始安裝(如果電源管理已啓用)
2.4 Configuration Cobbler
[root@linux-node1 ~]# systemctl start xinetd [root@linux-node1 ~]# systemctl start rsyncd [root@linux-node1 ~]# systemctl start tftp [root@linux-node1 ~]# systemctl start dhcpd ###由於還沒有生成,無法啓動(後續) [root@linux-node1 ~]# systemctl start httpd [root@linux-node1 ~]# systemctl start cobblerd
2.5 檢查Cobbler安裝配置
執行以下命令檢查Cobbler的配置,如果看不到下面的結果,再次執行cobbler和httpd服務(cobbler check命令用於向用戶提供檢查信息,就安裝可能出現的問題進行提示)
[root@linux-node1 ~]# cobbler check The following are potential configuration items that you may want to fix: 1 :The 'server' field in /etc/cobbler/settingsmust be set to something other than localhost, or kickstarting features willnot work. This should be a resolvablehostname or IP for the boot server as reachable by all machines that will use it. 2 :For PXE to be functional, the 'next_server'field in /etc/cobbler/settings must be set to something other than 127.0.0.1,and should match the IP of the boot server on the PXE network. 3 :enable and start rsyncd.service with systemctl 4 :debmirror package is not installed,it will be required to manage debian deployments and repositories 5 :The default password used by thesample templates for newly installed machines (default_password_crypted in/etc/cobbler/settings) is still set to 'cobbler' and should be changed, try:"openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'"to generate new one Restart cobblerd and then run 'cobbler sync' to apply changes.
根據上面的提示信息完成配置:
第1、2項:
[root@linux-node1 ~]# vim /etc/cobbler/settings next_server:192.168.56.11 server:192.168.56.11
這裏是指提供Cobbler服務的服務主機。
第3項:
[root@linux-node1 ~]# systemctl start rsyncd
注:這裏可能啓動了,檢查還是會出現,但是不影響服務的正常運行。
第4項:
[root@linux-node1 ~]# yum insall debmirror
注:在Debian操作系統平臺,會需要安裝這個包,在CentOS或Redhat不用。
第5項:
[root@linux-node1 ~]# openssl passwd -1 -salt 'cobbler' '123456' $1$cobbler$sqDDOBeLKJVmxTCZr52/11 #設置新裝系統的默認root密碼123456。下面的命令來源於提示5,random-phrase-here爲干擾碼, 可以自行在配置文件/etc/cobbler/setting中設定: default_password_crypted:"$1$root$/YPJHOfSs7b.KSSgk9sjT/"
2.5 Manager DHCP
You also need to enable such management,this is done in your setting:
[root@linux-node1 ~]# vim /etc/cobbler/settings manage_dhcp: 1 #將"0"改爲"1"
下一步我們配置DHCP的模板文件:
[root@linux-node1 ~]# vim /etc/cobbler/dhcp.template #僅列出修改的字段 ……. subnet 192.168.56.0 netmask255.255.255.0 { #網段和子網 option routers 192.168.56.2; #網關 option domain-name-servers 192.168.56.2; #DNS服務器 option subnet-mask 255.255.255.0; range dynamic-bootp 192.168.1.100 192.168.1.200; #可分配地址段 ………
執行cobbler sync同步應用更改,會自動生成dhcp的配置文件
[root@linux-node1 ~]# cobbler sync
查看生成的DHCP配置文件:
[root@linux-node1 ~]# cat /etc/dhcp/dhcpd.conf #****************************************************************** # Cobbler managed dhcpd.conf file # generated from cobbler dhcp.conftemplate (Fri May 27 01:11:00 2016) # Do NOT make changes to/etc/dhcpd.conf. Instead, make your changes # in /etc/cobbler/dhcp.template, as/etc/dhcpd.conf will be # overwritten. #****************************************************************** ddns-update-style interim; allow booting; allow bootp; ignore client-updates; set vendorclass = optionvendor-class-identifier; option pxe-system-type code 93 =unsigned integer 16; subnet 192.168.56.0 netmask255.255.255.0 { option routers 192.168.56.2; option domain-name-servers 192.168.56.2; option subnet-mask 255.255.255.0; range dynamic-bootp 192.168.56.100 192.168.56.210; default-lease-time 21600; max-lease-time 43200; next-server 192.168.56.11; class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) ="PXEClient"; if option pxe-system-type = 00:02 { filename"ia64/elilo.efi"; } else if option pxe-system-type = 00:06 { filename"grub/grub-x86.efi"; } else if option pxe-system-type = 00:07 { filename"grub/grub-x86_64.efi"; } else { filename"pxelinux.0"; } } } # group for Cobbler DHCP tag: default group { }
第3章 Cobbler Import
導入一個ISO文件,作爲網路安裝操作系統的時候的鏡像源,鏡像文件需要我們導入到本地的Cobbler服務器。
3.1 實例
我們導入一個操作系統爲CentOS-7-x86_64位鏡像文件,因爲我們用的是虛擬機,所以掛載本地鏡像;
[root@linux-node1 ~]# mount /dev/cdrom /mnt/ [root@linux-node1 ~]# cobbler import --name=CentOS-7-x86_64 --path=/mnt/ --arch=x86_64
參數說明:
# --path 鏡像路徑
# --name 爲安裝源定義一個名字
# --arch 指定安裝源是32位、64位、ia64, 目前支持的選項有: x86│x86_64│ia64
# 安裝源的唯一標示就是根據name參數來定義,本例導入成功後,安裝源的唯一標示
3.2 查看導入的鏡像文
[root@linux-node1 ~]# cobbler distro list #查看鏡像列表 CentOS-7-x86_64
默認Cobbler會將鏡像中的所有安裝文件拷貝到本地一份,放在/var/www/cobbler/ks_mirror下的
CentOS-7.1-x86_64目錄下,因此/var/www/cobbler目錄必須具有足夠容納安裝文件的空間。
[root@linux-node1 ~]# cd /var/www/cobbler/ks_mirror/ [root@linux-node1 ks_mirror]# ls CentOS-7-x86_64 config [root@linux-node1 ks_mirror]# ls CentOS-7-x86_64/ CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7 EFI p_w_picpaths Packages RPM-GPG-KEY-CentOS-Testing-7 EULA isolinux repodata TRANS.TBL
3.3 獲取更多的命令幫助
查看導入鏡像命令的幫助信息
[root@linux-node1 ~]# cobbler import --help Usage: cobbler [options] Options: -h, --help show this help message and exit --arch=ARCH OSarchitecture being imported --breed=BREED the breedbeing imported --os-version=OS_VERSION the version beingimported --path=PATH local path or rsync location --name=NAME name, example'RHEL-5' --available-as=AVAILABLE_AS tree is here, don'tmirror --kickstart=KICKSTART_FILassign this kickstartfile #分配這個啓動文件 --rsync-flags=RSYNC_FLAGS pass additional flagsto rsync
第4章 定製ks.cfg文件及調整內核參數
我們在安裝操作系統的過程中,需要大量的和服務器交互操作,爲了減少這個交互過程,於是就有了
kickstart。使用這種kickstart,只需事先定義好一個Kickstart自動應答配置文件ks.c),並讓安裝程序
知道該配置文件的位置,在安裝過程中安裝程序就可以自
己從該文件中讀取安裝配置,這樣就避免了
在安裝過程中多次的人機交互,從而實現無人值守的自動化安裝,可以參考
Redhat官方的介紹:
https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html
/Installation_Guide/s1-kickstart2-options.html
ks.cfg
文件組成大致分爲3段
命令段
鍵盤類型,語言,安裝方式等系統的配置,有必選項和可選項,如果缺少某項必選項,安裝時會中斷並提示用戶選擇此項的選項
軟件包段
%packages @groupname:指定安裝的包組 package_name:指定安裝的包 -package_name:指定不安裝的包
在安裝過程中默認安裝的軟件包,安裝軟件時會自動分析依賴關係。
腳本段(可選)
%pre:安裝系統前執行的命令或腳本(由於只依賴於啓動鏡像,支持的命令很少) %post:安裝系統後執行的命令或腳本(基本支持所有命令)
提示:這裏的腳本段非常有意思,我們在做自動化的時候,可以將各種服務安裝腳本放到這裏,系統會
自己執行,腳本的執行的方式有兩種,一種是客戶端安裝系統的時候下載準備好的腳本,然後執行;另
一種則是不用下載腳本,但是腳本可以在客戶端執行操作;這裏大家可以瞭解一下"wget"命令的參數就
可以輕鬆搞定,我下面會給一個案例。這時候,你只需要點開機,然後服務會自己給你搭建完成,完全
不用管,相當方便。
4.1 Cobbler kickstart文件的默認存放位置
Cobbler默認會自帶很多ks文件,默認使用"ample_end.ks"這個,一會我們要自己指定一個寫好的ks文
件,如下:
[root@linux-node1 ks_mirror]# cd/var/lib/cobbler/kickstarts/ [root@linux-node1 kickstarts]# ls #自帶很多 default.ks install_profiles sample_autoyast.xml sample_esxi4.ks sample_old.seed esxi4-ks.cfg legacy.ks ample_end.ks(默認使用的ks文件)sample_esxi5.ks sample.seed esxi5-ks.cfg pxerescue.ks sample_esx4.ks sample.ks
4.2 上傳寫好的ks.cfg文件到/var/lib/cobbler/kickstart下面
這是我提前準備的kickstart文件,名爲:CentOS-7-x86_64(經供參考):
#Kickstart Configurator by Role's_Tan. #platform=x86, AMD64, or Intel EM64T #System language lang en_US #System keyboard keyboard us #Sytem timezone timezone Asia/Shanghai #Root password rootpw --iscrypted $default_password_crypted #rootpw --iscrypted $1$ops-node$7hqdpgEmIE7Z0RbtQkxW20 #Use text mode install text #Install OS instead of upgrade install #Use NFS installation Media url --url=$tree #url --url=http://192.168.56.11/CentOS-7.1-x86_64 #System bootloader configuration bootloader --location=mbr #Clear the Master Boot Record zerombr #Partition clearing information clearpart --all --initlabel #Disk partitioning information part /boot --fstype xfs --size 1024 --ondisk sda part swap --size 16384 --ondisk sda part / --fstype xfs --size 1 --grow --ondisk sda #System authorization infomation auth --useshadow --enablemd5 #Network information $SNIPPET('network_config') #network --bootproto=dhcp --device=eth0 --onboot=on # Reboot after installation reboot #Firewall configuration firewall --disabled #SELinux configuration selinux --disabled #Do not configure XWindows skipx %pre $SNIPPET('log_ks_pre') $SNIPPET('kickstart_start') $SNIPPET('pre_install_network_config') #Enable installation monitoring $SNIPPET('pre_anamon') %end #Package install information %packages @ base @ core sysstat rsyslog ntp lrzsz ncurses-devel openssl-devel zlib-devel OpenIPMI-tools nmap screen telnet tree %end %post ###腳本和命令段 systemctl disable postfix.service #關閉一個postfix服務,可以加很多,根據實際環境來操作。 %end
上傳寫好的應答文件後,我們需要編輯系統默認的ks指向文件,操作如下:
[root@linux-node1 ~]# cobbler profile edit --name=CentOS-7-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS-7-x86_64.cfg
但是我看了很多網友的資料,大家都需要改一下Centos7的網卡名,當然,我這裏爲了方便大家學習,
也需要改一下吧!(沒辦法) 我們直接通過Cobbler提供的命令行來進行修改,大可不必要再系統安裝完
成後在進行操作,方法如下:
[root@linux-node1 ~]# cobbler profile edit --name=CentOS-7-x86_64 --kopts='net.ifnames=0 biosdevname=0' [root@linux-node1 ~]# cobbler sync [root@linux-node1 ~]# cobbler profile list CentOS-7-x86_64
這樣,大概工作就完成了,下一步就可以啓用客戶端,安裝操作系統了!
4.3 以上的步驟完成之後,我們就可以新建虛擬機,安裝操作系統
如下是客戶機啓動後的界面,我們選擇:CentOS-7-x86_64,然後就會進行安裝操作。
4.4 Kickstart文件擴展(僅供參考,下面的操作是筆者在Centos-6.7-x86_64上的操作)
上面我們說到ks文件的"%post"段,可以放一些腳本或命令端。這裏我就來說一些簡單的用法。
首先,我們要實現的功能就是:
自動安裝操作系統
系統安裝後簡單優化系統
自動部署配置服務(需要提前寫好腳本)
其次,具體的操作,這裏給大家簡單說一下Kickstart文件的寫法就行了。
我們在腳本及命令段寫(帶“#”的爲註釋信息):
命令方式:
前提是系統有這個命令
%post #精簡開機自啓動服務(注:如果你安裝有別的服務,需要開機自啓動,這裏也需要加上,否則···你懂的) chkconfig --list|grep "sshd|network|crond|rsyslog|sysstat"|awk '{print "chkconfig "$1" on"}'|bash chkconfig --list|egrep -v "sshd|network|crond|rsyslog|sysstat"|awk '{print "chkconfig "$1" off"}'|bash #啓動/關閉一個服務 /etc/init.d/network start|stop|reload|restart #設置開機自啓動服務狀態 chkconfig sshd on|off #創建一個目錄或文件 mkdir -p /server/scripts #向文件中追加內容(向/etc/hosts文件追加主機名和IP地址) echo "10.0.0.31 nfs01 10.0.0.41 backup" >> /etc/hosts %end
腳本:(兩種)
客戶端的系統上有部署腳本
Cobbler服務端有部署腳本
可能大多數人第一想法就是第一個,安裝系統後,就把部署腳本放到上面,然後執行,還是挺麻煩的。
這裏我給各位說說第二種,我的部署腳本放到我的Cobbler端的HTTP服務的根目錄下(之前安裝的是
Apache,默認根目錄是/var/www/html/),然後通過“wget”命令直接遠端執行,不用下載到客戶
端,就能完成給客戶端部署安裝務。
首先創建一個放部署腳本的目錄:
[root@linux-node1 ~]# mkdir -p /var/www/html/scripts
下面就是重點:
%post wget -O- http://192.168.56.11/scripts/nginx.sh|bash #提示大寫的字母“O” %end
說明:
優點:假如我們要部署一個Nginx的服務 ,將部署腳本放到Cobbler服務端的/var/www/html/scripts
下,然後再kickstart文件中添加上面這行命令,就可以在客戶端上執行這個腳本,而不用下載到客戶本
地然後再執行,怎麼樣!是不是很方便。
缺點:每臺機器都會執行這個腳本。
解決辦法:在實際工作場景,我們可以根據不同角色的服務器,根據主機名,或者IP地址來區分;在寫
部署腳本的時候,在腳本中加上判斷語句,如果是這臺機器就執行,不是就“exit”,就是那麼簡單!
第5章 定製化安系統
5.1 定製化介紹
所謂定製化,就是根據服務器的角色、主機名、IP或功能等等,進行操作系統安裝。
MAC地址(核心)
IP地址
主機名
子網
網關
DNS
提示:在定製化之前,需要提到拿到服務器的物理地址(MAC)
5.2 操作步驟
[root@linux-node1 ~]# cobbler system add --name=test.example.com --mac=00:50:56:21:AA:6E \ --ip-address=192.168.56.110 --subnet=255.255.255.0 --gateway=192.168.56.2 --interface=eth0 --name-servers="192.168.56.28.8.8.8" --static=1 --hostname=test.example.com --kickstart=/var/lib/cobbler/kickstarts/CentOS-7-x86_64.cfg --profile=CentOS-7-x86_64
參數說明:
# --name 自定義,但不能重複
#--mac 客戶端的mac地址
#--profile 指定profile文件
#--ip-address 指定ip地址
#--subnet 指定子網
#--gateway 指定網關
#--interface 制定網卡名字
#--hostname 指定主機名
#--name-server指定DNS
#--kickstart 指定ks文件
查看自定義列表:
[root@linux-node1 ~]# cobbler system list test.example.com
5.3 客戶端操作
此時,客戶端直接開機之後,會自動進行安裝,而不用我們在選擇Profiel文件(保證所有服務正常)
第6章 Cobbler Web管理
Cobbler服務之所以簡單,是因爲它有一個圖形化界面的操作平臺,那就是它的Web界面,這大大簡易
了它的入門難度;可以在web管理界面完成命令行同樣完成的任務。
6.1 登錄方式
https://Cobbler_sever-ip/cobbler_web
Web界面:
用戶名:cobbler
密 碼:cobbler
登錄後的界面:
6.2 Web授權配置文件
如下:
[root@linux-node1 ~]# cd /etc/cobbler/ [root@linux-node1 cobbler]# vim users.conf [admins] admin = "" cobbler = ""
添加一個Web端登陸用戶:
查看原有的:
[root@linux-node1 ~]# cd /etc/cobbler/ [root@linux-node1 cobbler]# cat users.digest cobbler:Cobbler:a2d6bae81669d707b72c0bd9806e01f3 用戶名 組 加密密碼
添加:用戶名爲“role”,屬於“Cobbler”組
[root@linux-node1 cobbler]# htdigest /etc/cobbler/users.digest "Cobbler" "role" [root@linux-node1 cobbler]# cat users.digest cobbler:Cobbler:a2d6bae81669d707b72c0bd9806e01f3 tanjianxin:Cobbler:a1ca1422226e9e45e9b7e10da626cdb3 ###多了一個用戶的信息
到這裏Web端的一些基本介紹完成了!
第7章 客戶端重裝系統工具
7.1 Koan介紹
Koan是Cobbler的一個輔助程序,可以安裝在遠程系統上(客戶端),通過配置引導裝載程序重新安裝
系統;這也可以用於操作系統升級而啓動,指定一個乾淨的安裝。
更多用法請參考官網信息:http://cobbler.github.io/manuals/2.6.0/
7.2 用法如下:
yum安裝(需要epel源支持)
[root@test ~]# yum install koan -y
列出Cobbler服務端可用的profile文件
[root@test ~]# koan --server=192.168.56.11 --list=profiles - looking for Cobbler athttp://192.168.56.11:80/cobbler_api CentOS-7-x86_64 CentOS-6-x86_64
參數說明:
#--server 指定Cobbler服務器IP地址
#--list 列出一些你需要的信息,可以自己指定(--help)
指定要重裝系統的Cobbler端機器及profile文件
[root@test ~]# koan --replace-self --server=192.168.56.11 --profile=CentOS-7-x86_64
後記:
學習貴在堅持,要培養出自己的學習能力;這樣學習新的技術知識,纔不會感到吃力!
技術的提升僅是量的積累,思想的提升纔是質的飛躍!(出自:老男孩老師語錄)
後期期望給大家帶來更多的文章!