cobbler 是基於 python 語言開發的 pxe 二次封裝的網絡安裝服務;能夠多系統選自自動化安裝配置。能夠經過 Web 圖形化界面配置,其安裝包爲 cobbler,在 epel 源上,配置過程當中某些過程可能須要依賴互聯網環境。node
使用 Cobbler,無需進行人工干預便可安裝機器。Cobbler 設置一個 PXE 引導環境(它還可使用 yaboot 支持 PowerPC),並控制原裝相關的全部方面,好比網絡引導服務(DHCP 和 TFTP)與存儲庫鏡像。當但願安裝一臺新機器時,Cobbler 能夠:
1)使用一個之前定義的模板來配置 DHCP 服務(若是啓用了管理 DHCP)
2)講一個存儲庫(yum 或 rsync)創建鏡像或解壓縮一個媒介,以註冊一個新操做系統
3)在 DHCP 配置文件中爲須要安裝的機器建立一個條目,並使用指定的參數(IP 和 MAC)
4)在 TFTP 服務目錄下建立適當的 PXE 文件
5)從新啓動 DHCP 服務來反應新的更改
6)從新啓動機器以開始安裝(若是電源管理已啓動python
Cobbler 支持衆多的發行版:Redhat、Fedora、CentOS、Debian、Ubuntu 和 SUSE。當添加一個操做系統(一般經過使用 ISO 文件)時,Cobbler 知道如何解壓縮合適的文件並調整網絡服務,以正確引導機器。
Cobbler 可使用 kickstart 模板。基於 Redhat 或 Fedora 的系統使用 kickstart 文件來自動化安裝流程,經過使用模板,就會擁有基本 kickstart 模板,而後定義如何針對一種配置文件或機器配置而替換其中的變量。例如,一個模板可能包含兩個變量 $domain 和 $machine_name。在 Cobbler 配置中,一個配置文件指定 domain=mydomain.com,而且每臺使用該配置文件的機器在 machine_name 變量中指定其名稱。該配置文件的全部機器都是用相同的 kickstart 安裝且針對 domain=mydomain.com 進行配置,但每臺機器擁有其本身的機器名稱。仍然可使用 kickstart 模板在不一樣的域中安裝其餘機器並使用不一樣的機器名稱。
爲了協助管理系統,Cobbler 可經過 fence_scripts 鏈接到各個電源管理環境。Cobbler 支持 apc_snmp、bladecenter、bullpap、drac、ether_wake、ilo、integrity、ipmilan、ipmitool、Ipar、rsa、virsh 和 wti。要從新安裝一臺機器,可運行 reboot system foo 命令,並且 Cobbler 會使用必要的和信息來爲您運行恰當的 fence scripts(好比機器插槽數)。
除了這些特性,還可使用一個配置管理系統(CMS)。有兩種選擇:該工具內的一個內部系統,或者現成的外部 CMS,好比 Chef 或 Puppet。藉助內部系統,你能夠指定文件模板,這些模板會依據配置參數進行處理(與 kickstart 模板的處理方式同樣),而後複製到你指定的位置。若是必須自動將配置文件部署到特定機器,那麼此功能頗有用。
使用 koan 客戶端,Cobbler 可從客戶端配置虛擬機並從新安裝系統。linux
PXE 服務支持
DHCP 服務管理
DNS 服務管理(可選bind,dnsmasq)
電源管理
Kickstart 服務支持
yum 倉庫管理
TFTP (PXE 啓動時須要)
Apache(提供 kickstart 的安裝源,並提供定製化的 kickstart 配置)
同時,它和 apache 作了深度整合nginx
由於 cobbler 基於 pxe 二次封裝的,因此瞭解 PXE 工做流程也重要,圖以下:web
從上圖能夠看出:apache
Cobbler 的配置結構基於一組註冊的對象。沒個對象表示一個與另外一個實體相關聯的實體(該對象指向另外一個對象,或者另外一個對象指向該對象)。當一個對象指向另外一個對象時,它就集成了被指向對象的數據,並可覆蓋或添加更多特定信息。
如下對象類型的定義爲:
發行版:表示一個操做系統。它承載了內核和 initrd 的信息,以及內核參數等其餘數據;
配置文件:包含一個發行版、一個 kickstart 文件以及可能的存儲庫,還包含更多特定的內核參數等其餘數據;
系統:表示要配給的機器。它把汗一個配置文件或一個鏡像,還包含 IP 和 MAC;地址、電源管理(地址、憑據、類型)以及更爲專業的數據等信息;
存儲庫:保存一個 yum 或 rsync 存儲庫的鏡像信息;
鏡像:可替換一個包含不屬於此類別的文件的發行版對象(例如,沒法分爲內核和 initrd 的對象);
基於註冊的對象以及各個對象之間的關聯,Cobbler 知道如何更改文件系統以反應具體配置。由於系統配置的內部是抽象的,因此能夠僅關注想要執行的操做。centos
必要服務
1)cobbler (cobbler 的核心)
2)httpd (提供 cobbler 的 web 界面)
3)dhcpd (爲自動安裝系統分配 IP 地址)
4)epel-release(爲之提供yum源)
5)rsync (cobbler 須要同步信息)
6)cobbler-web (cobbler 的一個 web 插件)
7)xinetd (爲 rsync 和 tftp 的守護進程)
8)tftp (傳送安裝的一些文件的 相似ftp)bash
systemctl stop firewalld systemctl disable firewalld sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
epel
基礎鏡像源wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
cobbler 和 apache 有深度配合因此安裝 apache,不要安裝 nginx 不然生成不了相關配置服務器
yum install -y httpd dhcpd tftp python-ctypes cobbler cobbler-web pykickstart fence-agents xinetd rsync
systemctl start httpd xinetd cobblerd.service systemctl enable httpd xinetd cobblerd.service
cobbler 的幫助命令爲 cobbler –help網絡
cobbler check
解決方法:
server
配置成具體的服務器 ip 地址next_server
也修改成具體的 ip 地址disable
從 yes 改成 nocobbler get-loaders
網絡引導加載程序systemctl start rsyncd、systemctl enable rsyncd
須要安裝系統登陸名
須要安裝系統登陸密碼
生成字段寫入/etc/cobbler/settings 中default_password_crypted
字段systemctl restart cobblerd
cobbler sync
cd /etc/cobbler cp dhcp.template dhcp.template.org sed -i '/^subnet/s/192.168.1.0/172.16.80.0/' dhcp.template sed -i '/routers/s/192.168.1.5/172.16.80.254/' dhcp.temlpate sed -i '/domain-name-servers/s/192.168.1.1/172.16.18.245/' dhcp.template sed -i '/dynamic-bootps/s/192.168.1.100 192.168.1.254/172.16.80.100 172.16.80.200/' dhcp.template
把裏面的信息修改成和本身同一個局域網的
sed -i '/manage_dhcp:/s/0/1/' /etc/cobbler/settings systemctl restart cobblerd sleep 2 cobbler sync
cat /etc/dhcp/dhcpd.conf
上傳 iso 鏡像文件到服務器,並掛載到目錄
mkdir /mnt/iso mount -o loop -t iso9660 CentOS-7-x86_64-Minimal-1810.iso /mnt/iso
用 cobbler 導入系統
cobbler import --path=/mnt/iso --name=CentOS-7.6-x86_64 --arch=x86_64 cobbler profile list cobbler profile report
上面在導入系統的過程當中 cobbler 幫咱們本身生成了相關的配置,關聯 dhcp,pxe安裝菜單
生成 Kickstart 文件,能夠看一下里面有哪些東西
cd /var/lib/cobbler/kickstarts/ less sample_end.ks mv sample_end.ks sample_end.ks.bak
生成的 Kickstart
文件能夠根據本身的須要進行修改,前提是要熟悉原生的 Kickstart
語法, 能夠參考
kickstart使用詳細指南
CentOS-7.6-x86_64.ks
[root@k8s-node2 ~]# cat /var/lib/cobbler/kickstarts/CentOS-7.6-x86_64.ks # This kickstart file should only be used with EL > 5 and/or Fedora > 7. # For older versions please use the sample.ks kickstart file. #platform=x86, AMD64, or Intel EM64T # System authorization information auth --useshadow --enablemd5 # System bootloader configuration bootloader --location=mbr # Partition clearing information clearpart --all --initlabel # Use text mode install text # Firewall configuration firewall --disabled # Run the Setup Agent on first boot firstboot --disable # System keyboard keyboard us # System language lang en_US # Use network installation url --url=$tree # If any cobbler repo definitions were referenced in the kickstart profile, include them here. $yum_repo_stanza # Network information # $SNIPPET('network_config') network --bootproto=dhcp --device=enp1s0 --onboot=on #配置網卡默認自動開啓DHCP功能,配置網卡名稱爲enp1s0 # Reboot after installation reboot #Root password rootpw --iscrypted $1$root$AKl5mABzn4OHUp7t27Sp1/ # SELinux configuration selinux --disabled # Do not configure the X Window System skipx # System timezone timezone Asia/Shanghai #設置時區爲中國上海時區 # Install OS instead of upgrade install # Clear the Master Boot Record zerombr clearpart --all --initlabel part /boot --fstype="xfs" --size=2048 #boot分區給2G大小 part swap --fstype="swap" --size=16384 #swap分區給內存大小的2倍 part / --fstype="xfs" --size=122880 #/分區給120G大小 part /var --fstype="xfs" --size=1765376 #var分區給剩下磁盤大小 # Allow anaconda to partition the system as needed # autopart %pre $SNIPPET('log_ks_pre') $SNIPPET('kickstart_start') $SNIPPET('pre_install_network_config') # Enable installation monitoring $SNIPPET('pre_anamon') %end %packages $SNIPPET('func_install_if_enabled') %end %post --nochroot $SNIPPET('log_ks_post_nochroot') %end %post $SNIPPET('log_ks_post') # Start yum configuration $yum_config_stanza # End yum configuration $SNIPPET('post_install_kernel_options') $SNIPPET('post_install_network_config') $SNIPPET('func_register_if_enabled') $SNIPPET('download_config_files') $SNIPPET('koan_environment') $SNIPPET('redhat_register') $SNIPPET('cobbler_register') # Enable post-install boot notification $SNIPPET('post_anamon') # Start final steps $SNIPPET('kickstart_done') # End final steps %end
cobbler profile edit --name=CentOS-7.6-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS-7.6-x86_64.ks systemctl restart cobblerd sleep 2 cobbler sync
查看cobbler生成配置
cobbler profile report