自動化運維必備-PXE批量安裝系統

需求分析html

隨着互聯網技術的不斷壯大,服務器數量也在不斷的增長,IT運維已經成爲IT服務內涵中重要的組成部分。面對愈來愈複雜的業務,面對愈來愈多樣化的用戶需求,不斷擴展的IT應用須要愈來癒合理的模式來保障IT服務能靈活便捷、安全穩定地持續保障,這種模式中的保障因素就是IT運維。從初期的幾臺服務器發展到龐大的數據中心,單靠人工已經沒法知足在技術、業務、管理等方面的要求,那麼標準化、自動化、架構優化、過程優化等下降IT服務成本的因素愈來愈被人們所重視。而如何自動化批量部署安裝一個穩定的系統是實現自動化的第一步。
自動化運維必備-PXE批量安裝系統自動化運維必備-PXE批量安裝系統linux

PXE簡介vim

PXE,就是預啓動執行環境,是一種引導啓動的方式。這種協議通常由兩部分構成,一部分是服務器端,一個是客戶端。簡單來講,咱們經過這種方式能夠本身建立一個「安裝源」,在安裝系統的時候只要能找到這個「源」即可以實現系統的安裝。在實現無人值守的安裝前,咱們必需要搭建一些服務,來實現「安裝源」的創建,例如ftp、http、tftp、dhcp等。當一臺主機啓動時,標準輸入輸出會將PXE客戶端調入咱們的內存中進行相關的操做,並提示相關的選項,在這裏咱們能夠進行選擇。PXE的客戶端經過網絡下載(download)啓動文件到本地運行。具體過程是,PXE客戶端經過網卡向局域網內發送ip請求,而後DHCP服務器會提供給給它一個ip地址和系統安裝所須要的文件,接下使用接收到的文件進行系統安裝。而安裝的過程又須要其餘服務器提供的資源,例如:yum源,內核文件等,當主機拿到這些資源,即可以順利的安裝了。最終結果是:任意一臺主機在選着網絡啓動時會獲取DHCP服務器分發的ip,經過經過獲取到的ip地址與局域網內的TFTP服務器通訊並獲取啓動文件,與FTP或者HTTP通訊並獲取yum源文件及內核文件等。以後開始自動安裝,而這個過程不須要人在作任何操做。centos

PXE安裝優勢,這種安裝系統的方式能夠不受光驅,光盤以及一些外部設備的限制,還能夠作到無人值守,大大減輕了運維人員的工做負荷,像在一些主機數量龐大的機房進行批量安裝,PXE將是你不二的選擇。瀏覽器

總體方案安全

這一小節咱們主要介紹方案選擇,在說方案以前先來看看PXE部署思路。部署思路其實並不難,在實現PXE自動批量安裝系統時,首先咱們須要有DHCP服務器爲咱們提供IP地址,若是在一個網絡中你連IP地址都獲取不到,何談自動化。其次咱們要安裝一個系統,那麼須要的文件必需要有人爲咱們提供才能夠,應爲是網絡自動安裝,本地是沒有任何資源的,咱們可使用HTTP,FTP服務來實現。最後就是獲取咱們的安裝文件,這些文件會引導咱們的計算機如何啓動,如何配置,咱們選擇TFTP服務起來提供。總體框架以下圖:自動化運維必備-PXE批量安裝系統自動化運維必備-PXE批量安裝系統服務器

  • 方案1:選則一臺主機同時搭建HTTP、TFTP、DHCP服務,爲該子網內的主機提供服務。
  • 方案2:選擇一臺主機搭建HTTP、TFTP服務,作提供資源的服務器,另爲一臺主機單間DHCP服務,提供IP地址。

上述提供了兩種方案,固然了,若是你不怕資源浪費,你也能夠選擇每種服務搭建在一臺主機上,作相應服務的提供,不過我的並不建議。考慮到節約資源的目的,咱們選擇方案一。網絡

服務選型架構

DHCP服務app

因爲咱們是實現自動化批量安裝部署,因此,可以與其餘主機通訊是前提,而要想獲取IP並實現通訊,咱們必需要有DHCP服務器爲大量的主機提供ip地址才行。

DHCP就是動態主機設置協議,主要是爲客戶端分發IP,而且是自動分發IP的,一臺主機經過DHCP獲取的地址是動態的,每次獲取的地址都有可能不一樣,改地址是DHCP服務器暫時分配給用戶使用的,當主機關機以後則會返回這個ip地址,此時若是有其餘用戶請求,DHCP服務器則會將該IP地址分配給他。局域網中的每臺主機均可以充當DHCP服務器,只要咱們安裝DHCP服務,並作相應的配置便可,這裏的配置主要是子網的配置,配置其餘主機能使用IP地址的範圍,例如:配置子網爲192.168.14.0,該子網內主機獲取IP的範圍爲192.168.14.1~192.168.14.100。那麼咱們就能夠打開DHCP的配置文件/etc/dhcp/dhcpd.conf作以下配置:

subnet 192.168.14.0 netmask 255.255.255.0 {
        range 192.168.25.50 192.168.25.100;
        next-server 192.168.25.107;     # 指明tftp服務器的地址
        filename "pxelinux.0";          # 指定PXE文件
}

HTTP服務

因爲咱們要獲取安裝系統服務的yum源以及內核文件,虛擬根文件,這些文件都是大文件,在傳輸時咱們必須保證其可以安全傳輸,因此咱們選擇了HTTP服務,固然了,選擇FTP服務也是能夠的。

HTTP是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫。是互聯網上普遍試用的協議。是用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議。它可使瀏覽器更加高效,使網絡傳輸減小。它不只保證計算機正確快速地傳輸超文本文檔,還肯定傳輸文檔中的哪一部分等。HTTP包含命令和傳輸信息,不只可用於Web訪問,也能夠用於其餘因特網/內聯網應用系統之間的通訊,從而實現各種應用資源超媒體訪問的集成。

TFTP服務

TFTP是一種文件傳輸服務,用於服務器與客戶端進行文件的傳輸,不過他只能進行簡單的文件傳輸,這個服務開銷不大,因此並不能進行大文件的傳輸,多用於小文件的傳輸。他沒有FTP那麼強大,可是TFTP使用UDP協議傳輸數據,有些時候比FTP更加方便,它所監聽的端口爲69。因爲咱們是在局域網中,系統相對安全,而提供的數據也不是很大,因此TFTP是實現PXE的不二選擇。

功能實現

安裝前準備

因爲涉及到主機間不一樣基於不一樣協議的通訊,因此爲了不沒必要要的麻煩,咱們選擇關閉防火牆以及selinux。生產場景中不建議這樣作。

[ root@vinsent ~ ]#iptables -F     # 關閉防火牆
[ root@vinsent ~ ]#setenforce 0     # 臨時關閉selinux
[ root@vinsent ~ ]#vim /etc/selinux/config     # 修改文件永久關閉selinux
...前面省略
SELINUX=disabled                 # 設置SELINUX的值爲disabled
...後面省略

配置靜態IP地址

因爲咱們在前面方案分析中選擇了方案1,即將全部服務搭建在同一臺服務器上。因爲作DHCP服務的主機的IP地址必須固定,因此咱們要先配置服務器的IP地址。因爲我是在CentOS7系統上搭建的服務器,因此有許多命令只有CentOS7才能使用。CentOS6及以前的版本請自行查閱相關文檔。

[ root@vinsent ~ ]#vim /etc/sysconfig/network-scripts/ifcfg-ens33  # 設置靜態IP
DEVICE=ens33
BOOTPROTO=static
IPADDR=192.168.14.201
PREFIX=24
ONBOOT=yes
[ root@vinsent ~ ]#systemctl restart network.service     #重啓網絡服務
[ root@vinsent ~ ]#ip a                                  # 查看本身的IP是否設置成功

安裝服務

因爲咱們須要HTTP、TFTP、DHCP服務來提供相應的服務,因此咱們必需要在系統中安裝,相應的服務。這裏須要注意,若是你的系統時最小化安裝,那麼建議你先安裝一些包組,GCC等。若是安裝過程當中出現包依賴問題,依次安裝相應的包便可。

[ root@vinsent ~ ]#yum -y install dhcp tftp-server httpd syslimux  #安裝相應的服務包
[ root@vinsent ~ ]#yum -y install xinetd             # 安裝超級守護進程xinetd
[ root@vinsent ~ ]#systemctl enable dhcp             # 設置dhcp開機啓動
[ root@vinsent ~ ]#systemctl enable tftp             # 設置tftp開機啓動
[ root@vinsent ~ ]#systemctl start tftp              # 啓動tftp服務 
[ root@vinsent ~ ]#systemctl enable httpd             
[ root@vinsent ~ ]#systemctl start httpd             # 啓動http服務
[ root@vinsent ~ ]#chkconfig tftp on     # 若是這天命令不能使用,請修改配置文件
[ root@vinsent ~ ]#vim /etc/xinetd.d/tftp
service tftp
{
...
    disable     =yes         # 修改這一項爲"disable     =no"
...
}
[ root@vinsent ~ ]#systemctl restart xinetd     # 修改以後,必定要重啓xinetd服務

配置DHCP服務

DHCP服務是保證咱們可以自動化批量安裝的前提,上面已經有提到過dhcp的配置,這裏作補充,詳細說明。主要是配置子網範圍,用於ip地址分配。

[ root@vinsent ~ ]#rpm -ql dhcp         # 查詢dhcp相關的文件
...前面省略
/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
/usr/share/doc/dhcp-4.2.5/dhcpd6.conf.example
...後面省略
[ root@vinsent ~ ]#cd /etc/dhcp/
[ root@vinsent ~ ]#cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example .   # 複製模板配置文件
[ root@vinsent ~ ]#mv dhcpd.conf.example dhcpd.conf     # 更名爲dhcpd.conf,頂替之前的配置文件
[ root@vinsent ~ ]#vim dhcpd.conf         # 打開模板文件並添加一下內容
...前面省略...
subnet 192.168.14.0 netmask 255.255.255.0{         # 這裏寫的ip地址爲子網的地址,故爲192.168.14.0
    range 192.168.14.10 192.168.14.200;     # 子網的範圍,以後主機請求獲取的ip地址就是這其中的一個
    next-server 192.168.14.201;     # 指明tftp服務器的地址
    filename "pxelinux.0"           # 指明PXE文件位置,這個在申請ip的時候會發送給安裝主機
}
...後面省略...
[ root@vinsent ~ ]#systemctl dhcpd start     # 重啓服務

注意:若是你設置的子網有問題,那麼你將不能重啓dhcp服務,請檢查你配置的子網是否正確。dhcp服務器的地址必須固定,不能是自動獲取的ip。

準備yum源文件及kickstart文件

yum源文件咱們是放在http服務器上的,由http服務來提供,因此咱們要把相應的文件複製到http服務器上。而且咱們安裝的主機系統多是CentOS 6 也多是CentOS7或者Ubantu等,因此咱們在準備yum文件時,須要準備不一樣系統、不一樣版本的文件,咱們這裏只提供CentOS 6 與CentOS 7的兩種系統的安裝。向咱們先規劃一下目錄文件,在進行復制。以下所示。
自動化運維必備-PXE批量安裝系統自動化運維必備-PXE批量安裝系統
咱們規劃好了目錄結構,接下來即是建立這些目錄結構,並提供相應的文件。

[ root@vinsent ~ ]#cd /var/www/html
[ root@vinsent html ]#mkdir -p centos/{6,7}
[ root@vinsent html ]#mkdir ksdir
[ root@vinsent html ]#

提供yum源文件,這裏有兩種方案來實現yum源文件的提供:

  • 方案1:咱們分別掛載CentOS 6和CentOS 7的關盤將光盤裏的Packages目錄與repodata目錄複製到對應的目錄下(若是複製,建議所有複製);
  • 方案2:咱們建立兩個關盤驅動器,一個添加CentOS 6的ISO鏡像,一個添加CentOS 7的ISO鏡像,而後咱們分別將對應的關盤掛載到/var/www/html/centos下對應的目錄上。

綜上所述,咱們選擇方案2。

[ root@vinsent html ]#mount /dev/sr0 centos/6     # 掛載CentOS 6光盤值6目錄下
mount: /dev/sr0 is write-protected,mounting read-only
[ root@vinsent html ]#mount /dev/sr1 centos/7     # 掛載CentOS 7光盤值7目錄下
mount: /dev/sr1 is write-protected,mounting read-only

接下來準備ksdir目錄下的安裝引導文件ks#.cfg。ks#.cfg文件的獲取方法有兩種,一種是經過工具來生成。不過這個工具須要本身安裝:

[ root@vinsent ~ ]#yum  install -y system-config-kickstart
[ root@vinsent ~ ]#system-config-kickstart

自動化運維必備-PXE批量安裝系統自動化運維必備-PXE批量安裝系統
另外這一種是複製/root目錄下的anaconda-ks.cfg文件加以修改,咱們選擇後者。

[ root@vinsent html ]#cp /root/anaconda-ks.cfg ksdir/ks7.cfg
[ root@vinsent html ]#vim ksdir/ks7.cfg
....
[ root@vinsent html ]#chmod +r ksdir/ks7.cfg    # "這裏的文件須要加讀權限,很是重要"

注意:ks文件的具體配置能夠參考百度。

準備內核文件菜單文件

內核文件、虛擬根文件以及菜單文件,咱們都是經過tftp服務來提供的,因爲系統及版本的不一樣,對於一個比較複製機羣來講,咱們須要準備不一樣系統,不一樣版本的內核文件,initrd.img文件。菜單文件只須要一份便可。/var/lib/tftpboot/目錄規劃以下:
自動化運維必備-PXE批量安裝系統自動化運維必備-PXE批量安裝系統
規劃好了目錄結構,接下來自只須要按照目錄內容配置相關的文件便可。菜單風格文件menu.c3二、不一樣系統的內核文件 vmlinuz 以及虛擬根文件系統 initrd.img 咱們能夠從光盤中複製。菜單文件defaults須要手動修改。

[ root@vinsent ~ ]#cd /var/lib/tftpboot/
[ root@vinsent tftpboot ]#mkdir -p centos{6,7}     # 建立目錄文件
[ root@vinsent tftpboot ]#cp /var/www/html/centos/6/{vmlinuz,initrd.img} centos6/     # 複製內核,虛擬根文件
[ root@vinsent tftpboot ]#cp /var/www/html/centos/7/{vmlinuz,initrd.img} centos7/     # 因爲以前掛載了不一樣系統,直接複製對應文件便可
[ root@vinsent tftpboot ]#cp /usr/share/syslinux/pxelinux.0 . # pxelinux文件來自syslinux包,直接複製便可
[ root@vinsent tftpboot ]#mkdir pxelinux.cfg
[ root@vinsent tftpboot ]#cp /var/www/html/centos/6/isolinux/isolinux.cfg pxelinux.cfg/default # 複製並更名
[ root@vinsent tftpboot ]#vim pxelinux.cfg/default
...     # 修改過程省略,
[ root@vinsent tftpboot ]#cat pxelinux.cfg/default     # 查看修改事後的菜單文件內容
default menu.c32     # 指定菜單風格
timeout 600          # 安裝倒計時,1/10 s爲單位
menu title Auto Install | www.linuxprobe.com
  
label centos7
  menu label Auto Install CentOS Linux ^7
  kernel centos7/vmlinuz
  append initrd=centos7/initrd.img ks=   # 指明ks文件位置 
  
label centos6
  menu label Auto Install CentOS Linux ^6
  kernel centos6/vmlinuz
  append initrd=centos6/initrd.img ks=http://192.168.14.201/ksdir/ks6.cfg
  
label manual7
  menu label ^Manual Install CentOS Linux 7
  kernel centos7/vmlinuz
  append initrd=centos7/initrd.img inst.repo=http://192.168.14.201/centos/7
  
label manual6
  menu label Manual ^Install CentOS Linux 6
  kernel centos6/vmlinuz
  append initrd=centos6/initrd.img inst.repo=http://192.168.14.201/centos/6
label local
  menu default        # 默認光標停在這一行
  menu label Boot from ^local drive
  localboot 0xffff
menu end

到此全部的配置就完成了。

調試並安裝

自動化運維必備-PXE批量安裝系統自動化運維必備-PXE批量安裝系統
點擊啓動項開始安裝,選擇網絡安裝。
自動化運維必備-PXE批量安裝系統自動化運維必備-PXE批量安裝系統
點擊網絡安裝後,咱們就能看到咱們的菜單了。
自動化運維必備-PXE批量安裝系統自動化運維必備-PXE批量安裝系統
而後選擇你要啓動的項便可。

錯誤分析

最初還不是很熟悉PXE原理的時候,遇到了不少問題,在最後給處我與到的幾個問題,即解決方法。
問題1:ks.cfg文件出錯
自動化運維必備-PXE批量安裝系統自動化運維必備-PXE批量安裝系統
解決方法:檢查tftp服務是否啓動,ks#.cfg文件路徑是否正確,ks#.cfg文件是否具備讀權限。出現這個問題大概就是這幾個地方出了問題

問題2:yum源文件路徑出錯
自動化運維必備-PXE批量安裝系統自動化運維必備-PXE批量安裝系統
解決方法:尋找yum源出現錯誤,該錯誤是ks.cfg文件中url路徑寫錯了,修改該路徑爲正確的yum源所在的地址便可。

問題3:iptables與selinux出問題
遺憾忘記截圖給你們了,見諒,安裝前檢查一下iptables與selinux是否關閉(實驗環境,生產中不建議這麼粗暴!)

總結

本文經過分析PXE實現批量自動化安裝的原理,再到一步步實現PXE的配置,再到後面的排錯思路。在這裏總結幾個要點:關閉selinux,iptables很重要,ks文件讀權限不可少,服務千萬不能down掉,文件路徑不能亂抄。

原文來自:http://www.linuxidc.com/Linux/2017-10/147379.htm

本文地址:http://www.linuxprobe.com/automatic-operatio-pxe.html

相關文章
相關標籤/搜索