黑石實體機的官方标配的作業系統無法滿足部分黑石客戶的需求,是以黑石專門針對該需求設計并驗證了基于PXE來實作伺服器自動化安裝使用者自定義的作業系統。
DHCP結合TFTP提供的PXE服務, 提供PXE引導Linux核心和啟動鏡像,通過kickstart腳本工具來實作作業系統的自動安裝和配置。其中,tftp-server提供TFTP服務,為PXE用戶端提供啟動檔案;dhcp提供DHCP服務,為PXE用戶端提供IP位址;syslinux可以提供必須的pxelinux.0檔案;FTP為PXE提供OS鏡像檔案的存儲和下載下傳;kickstart實作了自動化安裝。
目前伺服器存在兩種啟動方式:Legacy和UEFI。Legacy用于計算機開機時執行系統各部分的自檢,并啟動引導程式或裝載在記憶體的作業系統。而UEFI是一種較長的描述類型接口的标準,其用于作業系統自動從預啟動操作環境,加載到一種作業系統上。兩種啟動方式的PXE環境配置相差很大。
是以,本文檔指導兩種啟動方式下的PXE配置,首先較長的描述Legacy啟動模式下的CentOS自動化安裝的配置流程,然後對UEFI啟動模式下的配置流程相對與Legacy的差别之處做出說明。另外,也對安裝Ubuntu和VMware ESXI的注意事項做了說明。
基于PXE的網絡安裝作業系統如下圖。
Legacy模式安裝CentOS
安裝軟體
yum install -y dhcp
編輯配置檔案
nano /etc/dhcp/dhcpd.conf
ddns-update-style none;
default-lease-time 21600;
max-lease-time 43200;
option domain-name "linuxde.net";
option domain-name-servers 10.61.201.2;
subnet 10.61.200.0 netmask 255.255.255.0 {
range 10.61.200.1 10.61.200.5; #子網一待配置設定的位址池
option subnet-mask 255.255.255.0;
option routers 10.61.201.1;
next-server 10.61.201.2; #TFTP伺服器的IP位址
filename "pxelinux.0";#如果不在TFTP的根目錄下,要寫上絕對路徑
}
subnet 10.61.100.0 netmask 255.255.255.0 {
range 10.61.100.100 10.61.100.200; #子網二待配置設定的位址池
option subnet-mask 255.255.255.0;
option routers 10.61.100.1;
next-server 10.61.201.2; #TFTP伺服器的IP位址
filename "pxelinux.0";#如果不在TFTP的根目錄下,要寫上絕對路徑
}
subnet 10.61.201.0 netmask 255.255.255.192 {}
subnet 100.111.17.0 netmask 255.255.255.192 {}
#上海黑石需要添加配置option82
option agent.link-selection code 5 = string;
class "10.61.200.0" {
match if ((binary-to-ascii(10,8,"",substring(option agent.link-selection,0,1)) = "10") and (binary-to-ascii(10,8,"",substring(option agent.link-selection,1,1)) = "61") and ((binary-to-ascii(10,8,"",substring(option agent.link-selection,2,1)) = "204") or (binary-to-ascii(10,8,"",substring(option agent.link-selection,2,1)) = "205") or (binary-to-ascii(10,8,"",substring(option agent.link-selection,2,1)) = "206") or (binary-to-ascii(10,8,"",substring(option agent.link-selection,2,1)) = "200")));
}
注:DHCP server是支援多位址池的IP配置設定,例如存在兩個子網的客戶機通過一台DHCP server來獲得IP,則可以在dhcpd.conf分别配置兩個子網對用的IP池,該處是解決同一個VPC下的不同子網下實體機自動化安裝作業系統的方法。上海黑石需要dhcp server配置option82. 配置檔案的各參數下,class後面的參數為配置的待配置設定IP的網段
配置完成後重新開機dhcpd
service dhcpd restart
安裝TFTP server并配置
yum install -y tftp-server syslinux
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot //按照實際需求進行修改
disable = no //将yes改成no
per_source = 11
cps = 100 2
flags = IPv4
}
準備啟動檔案
準備啟動檔案的流程如下:
- 将作業系統的鏡像檔案上傳至PXE伺服器。
- 将鏡像檔案挂載到某一檔案下。
- 将所需的啟動檔案拷貝到TFTP的根目錄下。
注:initrd.img是一個初始化檔案,即一個最小的系統鏡像;pxelinux.0是legcay模式啟動下的啟動鏡像;pxelinux.cfg檔案下存放的是啟動菜單,需要手動建立;splash.jpg為啟動時的背景圖檔,可以不要;vmlinux為核心檔案;vesamenu.c32為legacy BIOS的引導菜單工具。mkdir -p /var/lib/tftpboot cd /var/lib/tftpboot mkdir pxelinux.cfg mount -o loop /data/centos6.5 /mnt cd /mnt/centos6.5/isolinux cp boot.msg initrd.img splash.jpg vesamenu.c32 vmlinuz /var/lib/tftpboot cp isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
配置完成并重新開機TFTP
service xinetd restart
安裝配置FTP Server
FTP是專門用來傳輸檔案的協定,在PXE伺服器中,我們利用它來存儲自定義OS以及傳送鏡像檔案至用戶端。
安裝軟體
yum install -y vsftpd
上傳OS鏡像檔案至FTP目錄
cd /var/ftp/pub
mkdir centos6
mount -o loop /data/centos6.iso /var/ftp/pub/centos6
mkdir centos7
mount -o loop /data/centos7.iso /var/ftp/pub/centos7
安裝完成後重新開機vsftpd服務
service vsftpd restart
配置 kickstart
如果不需要自動安裝作業系統,則可以删除配置檔案中的ks部分,即可引導安裝,但是自動化安裝是必須編寫ks.cfg,将配置好的ks.cfg上傳至FTP目錄。在本案例中我們設定Centos的安裝政策如下:
網絡全新安裝CentOS 6.5最新版本;
英語安裝,美國鍵盤,上海時區
LVM分區,500M boot分區、推薦大小的swap, 100G根分區;
UEFI安裝時,設定200MB引導分區;
啟用防火牆,SElinux,本地賬戶授權;
啟用本地軟體倉庫,重置root密碼為3e3ae9d0a;
#platform=CentOS 6 X86_64
firewall --enabled --ssh # 啟用防火牆,并允許SSH服務
install # 安裝,而非更新
url --url="ftp://10.61.202.2/pub/centos6 # 通過網絡安裝,
rootpw --iscrypted $1$SCDJzPts$c4VuKhKKUcXfg9aAt0tgu1 # 設定root密碼為centos
auth --useshadow --passalgo=sha512 # 使用本地授權模式
text # 使用文本安裝
keyboard us # 使用美國鍵盤
lang en_US # 語言設定為英語
selinux --enforcing # 啟用SElinux
skipx # 跳過X window 配置
logging --level=info #安裝過程日志級别為info
reboot # 安裝完成後重新開機
timezone --isUtc Asia/Shanghai # 設定時區為亞洲上海,使用UTC時間
network --onboot yes --bootproto dhcp --noipv6 # 啟用DHCP網絡
bootloader --location=mbr # 安裝bootloader到MBR
zerombr # 清除MBR
clearpart --all --initlabel # 清楚所有分區,并初始化
part /boot --fstype=ext4 --size=500 # 分區,并啟用LVM
part pv.008002 --grow --size=1
volgroup VolGroup --pesize=4096 pv.008002
logvol / --fstype=ext4 --name=lv_root --vgname=VolGroup --size=102400
logvol swap --fstype=swap --name=lv_swap --vgname=VolGroup --recommended
配置Default檔案
在pxelinux.cfg目錄下,建立的預設檔案default可以使用鏡像檔案中的isolinux.cfg檔案來作為模版,該啟動菜單非常重要。
配置參數解釋:
ksdevice:是用來指定使用那塊網卡,因為伺服器可能存在多塊網卡,無人值守會卡在這裡。
repo:是指定安裝鏡像的URL,如果沒有,就會出現選擇界面,必須手工處理。
ip:可以指定網卡自動擷取ip,還是使用固定ip,如果使用固定ip則必須将其寫入到配置檔案中去。
ks: 用來指定ks.cfg檔案的URL.
default vesamenu.c32
timeout 30
menu background splash.jpg
menu title Welcome to PXE CentOS-6.4-x86_64!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
label linux
menu label ^ Install or upgrade CentOS 6.5
menu default
kernel vmlinuz #如果在TFTP的根目錄下可以直接寫檔案名,否則需要寫絕對路徑。
append initrd=initrd.img ksdevice=eth1 repo=ftp://10.61.202.2/pub/centos6 ip=dhcp ks=ftp://10.61.202.2/pub/ks.cfg
label linux
menu label ^ Install CentOS 7.0
kernel vmlinuz
append initrd=initrd.img ksdevice=eth1 repo=ftp://10.61.202.2/pub/centos7 ip=dhcp ks=ftp://10.61.202.2/pub/ks.cfg
跨VPC的自定義OS的自動化安裝
每一台黑石實體機在傳遞時,均已落入到某一個VPC下的某個子網,如果待安裝作業系統的伺服器與PXE server位于不同的VPC,則需要首先對DHCP server進行網卡和路由的配置。如下圖所示
利用黑石雲API在客戶機所在的VPC内建立子網,并且指定子網的vlanId。
from src.QcloudApi.qcloudapi import QcloudApi
module = 'vpc'
action = 'CreateBmSubnet'
config = {
'Region': 'sh',
'secretId': '你賬戶的secretId',
'secretKey': '你賬戶的secretKey',
'method': 'get'
}
params = {
"vpcId": "sh_vpc_1026", #建立的子網所在的VPC的vpcId
"unVpcId": "vpc-p83g7nv7", #建立的子網所在的VPC的unVpcId
'subnetSet.0.subnetName': 'VM-test-pxe1', #建立的子網的名稱
'subnetSet.0.cidrBlock': '10.1.5.0/24', #建立的子網IP
'vlanId': 2098 #建立的子網的VlanId
}
service = QcloudApi(module, config)
service.generateUrl(action, params)
print service.call(action, params)
注意:如果所建立的子網需要配置設定IP給虛拟機,則需要将VlanId設定在2000-2999之間。
6.2 在建立好的子網中申請黑石實體機vlan網卡待使用的IP。
from src.QcloudApi.qcloudapi import QcloudApi
module = 'vpc'
action = 'ApplyIps'
config = {
'Region': 'sh',
'secretId': '你賬戶的secretId',
'secretKey': '你賬戶的secretkey',
'method': 'get'
}
params = {
"vpcId": "sh_vpc_1026", #子網所在的VPC的ID
"subnetId": "sh_subnet_497", #申請的I平所在的子網ID
"count": 2, #申請IP個數,預設為1,取值範圍1-20。
"ipClass": 1 #IP類型,0為實體機IP,1為虛拟機類型IP,2為托管類型IP。預設傳1
}
service = QcloudApi(module, config)
service.generateUrl(action, params)
print service.call(action, params)
6.3 使用黑石API将黑石實體機加入到提前申請好的子網中。
from src.QcloudApi.qcloudapi import QcloudApi
module = 'vpc'
action = 'CreateBmInterface'
config = {
'Region': 'sh',
'secretId': '你賬戶的secretId',
'secretKey': '你賬戶的secretKey',
'method': 'get'
}
params = {
"vpcId": "sh_vpc_1026",
"subnetId": 497,
"instanceIds.0": "cpm-7m316cuf"
}
service = QcloudApi(module, config)
service.generateUrl(action, params)
print service.call(action, params)
6.4 修改bond1的配置檔案并添加bond1.xxxx虛拟vlan網卡(其中xxxx表示的是vlanId), 配置相應的IP和網關。
nano /etc/sysconfig/network-scripts/ifcfg-bond1
DEVICE=bond1
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
BONDING_OPTS="mode=4 miimon=100"
IPV6INIT=no
TYPE=Unknown
NM_CONTROLLED=no
IPADDR='10.61.202.2'
NETMASK='255.255.255.0'
GATEWAY='10.61.202.1'
nano /etc/sysconfig/network-scripts/ifcfg-bond1.xxxx
DEVICE=bond1.xxxx
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
BONDING_OPTS="mode=4 miimon=100"
IPV6INIT=no
VLAN=yes
TYPE=Unknown
NM_CONTROLLED=no
IPADDR='10.1.5.4'
NETMASK='255.255.255.0'
6.5删除幾個多餘的網段路由 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/16, 保留一個預設的路由0.0.0.0網關設定為bond1對應的那個VPC的網關。
6.6 新的VPC需要通路的網段,通過明細路由指定,網關為相應的網關,裝置為bond1.xxxx。
nano /etc/sysconfig/network-scripts/ifcfg-bond1.xxxx
10.1.0.0/24 via 10.1.5.5 dev bond1.xxxx
6.7 驗證DHCP server是否可與待安裝OS的伺服器ping通。
7. 伺服器網絡配置
伺服器通過PXE安裝好自定義OS之後,需要對其進行重新的網絡配置,包括内網IP配置,雙網卡綁定等。
1. 在進行PXE安裝OS時,DHCP Server會為實體機随機配置設定一個IP位址,是以在安裝完OS後,必須重新配置IP,并與黑石傳遞時的IP相同,唯有此才可以通過公網IP通路該實體機。
2. 建議通過将兩個實體網卡綁定為邏輯網卡,可以實作負載均衡等特性,配置方法如下。
#IP Config for bond1:
DEVICE=bond1 #雙網卡綁定的邏輯端口名
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
BONDING_OPTS="mode=4 miimon=100"
IPV6INIT=no
TYPE=Unknown
NM_CONTROLLED=no
IPADDR='10.61.202.2' #必須是黑石實體機互動時配置設定的内網IP
NETMASK='255.255.255.0'
GATEWAY='10.61.202.1'
#IP Config for eth0:
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
HOTPLUG=no
MASTER=bond1
NM_CONTROLLED=no
USERCTL=no
SLAVE=yes
#IP Config for eth1:
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
HOTPLUG=no
MASTER=bond1
NM_CONTROLLED=no
USERCTL=no
SLAVE=yes
8. 對子網開啟DHCP RELAY
8.1 建立子網時開啟DHCP RELAY
在使用PXE來實作自定義OS自動化安裝時,并需将待安裝作業系統的黑石實體伺服器所在子網開啟DHCP RELAY的功能。首先在建立子網時必須建立好VPC,并且子網綁定VLANID,預設為5.虛拟機子網VLANID取值範圍為2000-2999.
from src.QcloudApi.qcloudapi import QcloudApi
module = 'vpc'
action = 'CreateBmSubnet'
config = {
'Region': 'sh',
'secretId': '你賬戶的密鑰id',
'secretKey': '你賬戶的密鑰Key',
'method': 'get'
}
params = {
"unVpcId": "vpc-g0knn9rl", ##子網所在的VPC的id
'vpcId': 'sh_vpc_100011',
'subnetSet.0.subnetName': 'test-pxe-install', ##所建立的子網的名字
'subnetSet.0.cidrBlock': '10.61.200.0/24', ##所建立的子網的網段
'vlanId': 5,
'dhcpEnable': 1, #該參數為1表示該子網開啟DHCP,為0表示該子網關閉DHCP。
'dhcpServerIP.0': '10.61.201.2', #該參數表示DHCP server的IP位址
'ipReserve': 5 #該參數表示該子網預留的可配置設定的IP的個數。
}
service = QcloudApi(module, config)
service.generateUrl(action, params)
print service.call(action, params)
8.2 對現有子網時開啟DHCP RELAY
如果待安裝作業系統的黑石實體伺服器已經綁定在某個子網中,可以通過騰訊雲API對子網設定,開啟DHCP RELAY。
from src.QcloudApi.qcloudapi import QcloudApi
module = 'vpc'
action = 'ModifySubnetDhcpRelayFlag'
config = {
'Region': 'sh',
'secretId': '你賬戶的密鑰id',
'secretKey': '你賬戶的密鑰Key',
'method': 'get'
}
params = {
"vpcId": "sh_vpc_1026",
"subnetId": 497,
'dhcpEnable': 1,
'dhcpServerIP.0': '10.61.201.2',
'ipReserve': 5
}
service = QcloudApi(module, config)
service.generateUrl(action, params)
print service.call(action, params)