㈠ openstack上能安裝什麼程序
概述
關於如何安裝部署openstack,各個大小公司紛紛推出自己的方案和產品,例如fuel、trippleO、RDO、devstack等等。試用了RDO等工具後,也萌生了實現一個自研工具的想法(順便彌補這一塊知識的空白),現將思路及過程記錄如下。
需求
1、支持靈活的安裝部署方式(單台host或者批量host)和多種安裝介質(物理機或者虛擬機)
2、安裝部署過程用戶體驗好
(1)安裝工時短
(2)並發安裝伺服器數量多
(3)用戶參與環節盡量少
3、兼容性好
(1)可以支持業界主流伺服器
(2)跨vlan部署
總體思路
步驟 備選方案 技術點
製作安裝源
備選1:標准cd/dvd形式linux系統iso文件+RPM包形式openstack源(例如centos.iso+yum openstack源)
備選2:livced形式iso,openstack已安裝到iso中
本方案選擇備選2,操作系統採用centos 6.5,openstack採用H版本
1、openstack rpm包製作:復用rdo h版本openstack的spec文件,製作openstack的rpm包
2、製作livecd:livecd-tools開源工具、kickstart文件定製(操作系統裁剪)
iso安裝
livecd的安裝不能使用anaconda安裝工具,需要自行寫作腳本程序(shell或python等),腳本大致流程如下:
(1)執行安裝腳本,入參為目的安裝磁碟(例如/dev/sda)
(2)安裝腳本完成清理磁碟工作,物理卷(pv)、卷組(vg)、邏輯卷(lv)、磁碟分區等
(3)安裝腳本完成創建分區的工作(例如創建兩個分區/dev/sda1、/dev/sda2,磁碟分區選擇mbr類型,/dev/sda1設置為boot類型分區)
(4)安裝腳本找到根文件系統文件所綁定的loop設備(例如/dev/loop3),將其內容復制到/dev/sda1
(5)安裝腳本生成啟動引導程序(例如extlinux),確保後續系統可以從硬碟啟動
(6)安裝腳本完成其他工作,例如設置root賬戶密碼,將剩餘磁碟空間生成vg等
1、腳本實現參考ovirt-node開源軟體代碼
2、系統引導相關知識
(1)啟動引導程序,grub、extlinux
(2)磁碟分區格式,mbr、gpt、EFI
3、磁碟相關工具,parted、fdisk、blkid、pvcreate等
pxe安裝
pxe伺服器搭建
備選1:使用tftp、dhcp等自行搭建pxe伺服器
備選2:選擇一個業界成熟的具備pxe能力的安裝配置工具
本方案選擇cobbler開源工具
製作的livcecd能夠支持pxe流程
備選1:使用livecd-iso-to-pxe工具將iso封裝成vmlinuz和initrd.img(200多MB)兩個文件,可以通過標准pxe流程引導
備選2:製作一個mini鏡像(50MB以內)用於pxe引導,mini鏡像中植入安裝腳本,安裝腳本啟動後,再將真正的鏡像文件下載到光碟鏡像環境並安裝
本方案當前已實現備選1,後續會嘗試備選2
pxe能支持大規模批量部署,可靠性好
1、使用以上「製作的livcecd能夠支持pxe流程」備選1時,initrd.img大概200-300MB,pxe使用tftp協議不可靠,故需要使用gpxe
2、使用以上「製作的livcecd能夠支持pxe流程」備選2時,需要下載鏡像到本地,可以引入p2p技術,加速下載過程
pxe能夠跨vlan部署伺服器
交換機配置dhcp中繼、dhcp服務配置為不同vlan伺服器分配對應網段ip
1、cobbler的配置和使用
2、mini鏡像的運行機制
3、gpxe機制及配置
4、p2p功能(bittorrent開源軟體)的引入
5、交換機dhcp配置
配置 本方案需求是解決第一次openstack節點的配置問題,使用業界成熟的配置工具即可,例如puppet、salt等 salt開源軟體
關鍵技術點
1、製作livecd
介紹:
livecd是redhat體系提供的一種鏡像格式,製作的iso可以直接啟動,當然也可以安裝到硬碟上。現在centos、fedora每個版本發布的repo都包含了已編譯出的livecd iso。例如CentOS-6.4-x86_64-LiveCD.iso。也可以到其官方網站下載
步驟:
(1)執行以下命令,安裝redhat openstack Grizlly的yum文件
yum install -y http://rdo.fedorapeople.org/openstack/openstack-grizzly/rdo-release-grizzly-2.noarch.rpm
(2)製作ks文件:可以在互聯網上找一個標準的centos的ks文件作為模板,然後進行修改,將openstack的rpm包信息添加到ks文件中,則出iso時會自動安裝openstack的rpm包
(3)安裝livecd-tools rpm包
(4)執行以下命令出iso
livecd-creator --config=centos-livecd-minimal.ks --fslabel=openstack-LiveCD -d --shell
困難:
實際操作過程中,碰到的最大困難是一開始在一個裁剪版centos ks文件基礎上製作openstack iso。後續openstack系統運行時由於依賴包不全出現各種報錯。解決辦法是先在一個完備的ks基礎上製作openstack iso,在openstack可以正常運後,再做系統裁剪
相關參考:
https://fedoraproject.org/wiki/How_to_create_and_use_a_Live_CD/zh-cn
http://www.centos.org/docs/5/html/Installation_Guide-en-US/s1-kickstart2-file.html
http://jgershater.ulitzer.com/node/2701636?page=0,1
2、寫作腳本,將livcd安裝到OS中,流程及所用到系統命令如下:
(1)找到livecd中文件系統所掛載的設備,例如ext3fs.img掛載到了/dev/loop3上
losetup -a |grep ext3fs.img
(2)將img拷貝到目的磁碟分區中,例如/dev/vda1
cat /dev/loop3 /dev/vda1
(3)安裝bootloader,用的是extlinux,這樣下次就可以從硬碟啟動了
cat /usr/share/syslinux/mbr.bin > dev/vda #寫入mbr
blkid -o value -s UUID /dev/vda1 #生成分區的uuid
mkdir /mnt/tmp #生成臨時目錄
mount /dev/vda1 /mnt/tmp #將根分區mount到臨時目錄
extlinux -i /mnt/tmp/boot/ #使用extlinux工具製作啟動目錄
extlinux --clear-once /mnt/tmp/boot/
cp -rf /dev/.initramfs/live/isolinux/* /mnt/tmp/boot/
mv /mnt/tmp/boot/isolinux.cfg /mnt/tmp/boot/extlinux.conf
sed -i 's/live:CDLABEL=.* /UUID=uuid /' /mnt/tmp/boot/extlinux.conf #uuid是上面生成的
sed -i 's/ ro / /' /mnt/tmp/boot/extlinux.conf
sed -i 's/ rd.live.image / /' /mnt/tmp/boot/extlinux.conf
umount /dev/vda1
到此,重啟伺服器就可以從硬碟啟動了
相關參考:
http://www.syslinux.org/wiki/index.php/EXTLINUX
http://molinux.blog.51cto.com/2536040/548247
3、配置pxe伺服器,通過pxe方式批量安裝openstack節點
介紹:
關於集成pxe的部署工具,在開源社區有很多,例如xcat、cobbler,工具各有特點,本次考慮使用cobbler
步驟:
(1)參照網上資料,完成cobbler的基本搭建
(2)將livecd iso部署到cobbler中作為repo 。livecd本身是不支持pxe載入的,為支持此功能,需先使用livecd-iso-to-pxeboot工具,將iso生成vmlinuz和initrd0.img文件,然後將這兩個文件部署到cobbler中。 其核心思想是將livced中的內存文件系統製作成ramdisk文件,就可以通過pxe流程引導啟動到內存文件系統了。相關命令如下:
iso="openstack" #變數定義
livecd-iso-to-pxeboot $iso.iso #生成vmlinuz和initrd0.img文件
#部署vmlinuz和initrd0.img文件
cobbler distro add --name=$iso --kernel=/var/www/html/iso/$iso/tftpboot/vmlinuz0 --initrd=/var/www/html/iso/$iso/tftpboot/initrd0.img
cobbler distro edit --name=$iso --kopts='root=live:/'$iso.iso' rootfstype=auto rootflags=ro !text !lang !ksdevice installserverip='$serverIp
cobbler profile add --name=$iso --distro=$iso
到此,就可以通過pxe載入openstack的livced iso中
(3)使用cobbler載入openstack livecd
(4)livecd 載入起來後,可以手工執行以上介紹的「將livcd安裝到OS中」腳本將系統安裝到硬碟中。也可以在製作iso時寫入系統自啟動命令自動執行安裝腳本
4、改進pxe載入的性能和可靠性
介紹:pxe下載vmlinuz和initrd0.img採用tftp協議,此協議在大規模並發下載大文件(ramdisk文件有200多MB)可能出現引導慢或者不穩定。業界推薦的替換方式是使用gpxe。gpxe的核心改進是可以用http協議代替tftp協議來下載
步驟:
1、配置cobbler打開gpxe開關,配置項為enable_gpxe
2、重啟伺服器/虛擬機,觀察是否會變更為進入gpxe載入流程。
結果:gpxe安裝虛擬機正常,但是安裝伺服器則一直進入不到http下載vmlinuz和initrd0.img的流程。經定位發現伺服器網卡並不支持gpxe特性,而虛擬機的網卡是模擬的,可以支持gpxe。
疑問:如何能夠同時支持pxe和gpxe,且對應不同伺服器/虛擬機,自動採用合適方式呢?
答案:經分析,網卡發起dhcp請求時,會攜帶pxe支持情況的相關信息。可以配置dhcp server根據不同情況做對應處理。當網卡支持gpxe時,會進入gpxe分支代碼,則從http://186.100.8.248/cblr/svc/op/gpxe/system/735135b1-d72f-47f2-9f1d-13c63e75dc9c獲取下載vmlinuz和initrd0.img的http地址。
/etc/dhcp/dhcpd.conf中配置舉例如下。
hardware ethernet 00:16:6D:AD:86:33;
if exists user-class and option user-class = "iPXE" {
filename "http://186.100.8.248/cblr/svc/op/gpxe/system/735135b1-d72f-47f2-9f1d-13c63e75dc9c";
} else if exists user-class and option user-class = "gPXE" {
filename "http://186.100.8.248/cblr/svc/op/gpxe/system/735135b1-d72f-47f2-9f1d-13c63e75dc9c";
} else {
filename "undionly.kpxe";
}
http://186.100.8.248/cblr/svc/op/gpxe/system/735135b1-d72f-47f2-9f1d-13c63e75dc9c對應動態配置如下: