前言
目前大部分公有云、私有云都在使用Cloud-init,已經成爲虛擬機元數據管理和OS系統配置初始化的事實標準。最先Cloud-init由Ubuntu的母公司 Canonical 開發,主要思想是當用戶首次建立虛擬機時,將前臺設置的主機名,密碼或者祕鑰等存入metadata server(即存放元數據的服務器)。在雲平臺環境下當Cloud-init隨虛擬機啓動而運行時,可以獲取修改信息並修改主機配置,完成系統的環境初始化。html
Cloud-init簡介
Cloud-init是專爲雲環境中虛擬機的初始化而開發的工具,它從各類數據源讀取相關數據並據此對虛擬機進行配置,向一臺數據服務器獲取元數據(meta data)和用戶數據(user data),前者是指VM的必要信息,如主機名、網絡地址等;後者是系統或用戶須要的數據和文件,如用戶組信息、啓動腳本等。當Cloud-init獲取這些信息後,開始使用一些模塊對數據進行處理,如新建用戶、啓動腳本等。常見的配置包括:設定虛擬機的hostname、hosts文件、設定用戶名密碼、調整文件系統的大小(注意不是調整分區的大小)等。shell
Cloud-init在ZStack雲平臺中的實現
Linux系統 User Data鏡像封裝centos
1、安裝Cloud-init服務——下載並上傳Cloud-init的rpm軟件包到雲主機中瀏覽器
一、在ZStack平臺中使用User Data功能,需提早確保Linux雲主機鏡像已安裝Cloud-init,且Cloud-init推薦版本爲:0.7.九、17.1。以Cloud-init 0.7.9版本爲例,可以使用該連接下載相關軟件包,如圖1所示:安全
圖1 下載完成
http://repo.telcobridges.com/centos/7/os/x86_64/Packages/cloud-init-0.7.9-24.el7.centos.x86_64.rpmbash
二、使用 Xshell 的 FTP 工具或者SecureCRT的SecureFX、WinSCP等工具上傳Cloud-init的rpm 包到Linux雲主機當中,例如/root目錄下,再使用ls命令查看是否上傳成功,如圖2所示:服務器
圖2 ls命令查看網絡
2、安裝並啓動Cloud-init服務
一、YUM源基於RPM包管理,可以從指定的服務器自動下載RPM包安裝,能夠自動處理依賴性關係,而且一次安裝全部依賴的軟件包,無須繁瑣地一次次下載、安裝。因此需執行如下命令來安裝Cloud-init服務:
yum localinstall cloud-init-0.7.9-24.el7.centos.x86_64.rpm -y工具
二、Cloud-init服務安裝完成事後,需手動啓動cloud-init服務;Cloud-init服務啓動事後默認會設置開機自啓,因此無需再設置開機自啓cloud-init服務;執行完事後,需查看cloud-init服務是否處於active狀態,如圖3所示:測試
圖3 查看cloud-init服務狀態
3、修改雲主機網卡配置文件
製做雲主機鏡像以前須要將雲主機網卡配置文件/etc/sysconfig/network-scripts/ifcfg-***中的MAC地址以及UUID註釋掉,避免使用該鏡像建立雲主機時產生衝突,網卡配置文件則保留參數配置,如圖4所示:
圖4 網卡配置文件
User Data雲主機鏡像封裝
雲主機Cloud-init服務安裝並啓動完成且網卡配置文件MAC地址及UUID註釋掉事後,就能夠進行雲主機鏡像封裝。在ZStack私有云主菜單,點擊雲資源池 > 雲主機按鈕 > 選中雲主機 > 點擊雲主機操做 > 建立雲主機鏡像,如圖五、圖六、圖7所示:
圖5 點擊建立雲主機鏡像
圖6 建立雲主機鏡像
圖7 建立雲主機鏡像成功
User Data功能場景
場景一:Linux系統—自動安裝Apache服務
1、建立Linux系統User Data雲主機
一、在ZStack私有云主菜單,點擊雲資源池 > 雲主機按鈕,進入雲主機界面;點擊建立雲主機按鈕,在彈出的建立雲主機頁面,可參考如下示例輸入相應內容,這裏所使用的鏡像是以前Linux系統已安裝cloud-init服務的鏡像,三層網絡選擇私有網絡,如圖8所示:
圖8 建立Linux系統User Data雲主機
二、本次測試是YUM本地源安裝Apache服務,須要在建立雲主機時加載ISO,在彈出的建立雲主機頁面中,點擊高級選項,選擇加載ISO,本次使用CentOS-7-x86_64-DVD-2003.iso做爲YUM安裝的本地源,如圖9所示:
圖9 選擇ISO
三、編寫User Data功能參數利用本地YUM源安裝Apache服務,需在User Data編寫方框中編寫才生效。
使用本地YUM源安裝Apache服務配置參數以下所示,僅供參考。
#cloud-config
bootcmd:
-
mkdir /etc/yum.repos.d/blk
-
mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d/blk
-
touch /etc/yum.repos.d/centos.repo
-
echo -e 「[cloud]\nname=cloud\nbaseurl=file:///mnt\ngpgcheck=0\nenabled=1」 >> /etc/yum.repos.d/centos.repo
mounts:
- [ /dev/sr0, /mnt, iso9660, 「defaults」 ]
mount_default_fields: [/dev/sr0, /mnt, ‘iso9660’, ‘defaults’, ‘0’, ‘0’]
runcmd:
-
[ sh, -c, systemctl stop firewalld ]
-
[ sh, -c, yum clean all && yum makecache ]
-
[ sh, -c, yum install httpd -y ]
-
[ sh, -c, systemctl enable httpd ]
-
[ sh, -c, systemctl start httpd ]
-
echo hello,world!! >> /var/www/html/index.html
-
[ sh, -c, systemctl restart httpd ]
四、在User Data編寫框內編寫完使用本地YUM源安裝Apache服務配置參數,點擊肯定開始建立雲主機,如圖10所示:
圖10 肯定建立Linux系統User Data雲主機
2、驗證
一、打開當前雲主機的控制檯,能夠登陸雲主機系統,使用root用戶登陸到雲主機系統當中,查看雲主機IP地址,如圖11所示:
圖11 查看雲主機IP地址
二、使用Google Chrome或者Firefox瀏覽器輸入當前雲主機IP地址,驗證Apache服務是否安裝成功,並顯示所寫網頁內容,如圖12所示:
圖12 驗證Apache服務
場景二:Linux系統—自動格式化掛載磁盤
1、建立Linux系統User Data雲主機
一、在ZStack私有云主菜單,點擊雲資源池 > 雲主機按鈕,進入雲主機界面,點擊建立雲主機按鈕,在彈出的建立雲主機頁面,可參考如下示例輸入相應內容,這裏所使用的鏡像是以前Linux系統已安裝cloud-init服務的鏡像,三層網絡選擇私有網絡,如圖13所示:
圖13 建立Linux系統User Data雲主機
二、本次測試是自動格式化掛載磁盤,須要在建立雲主機時加載數據雲盤,在彈出的建立雲主機頁面中,點擊高級選項,選擇數據雲盤規格,本次使用40G的雲盤做爲數據盤進行格式化掛載,如圖14所示:
圖14 選擇數據雲盤規格
三、編寫User Data功能參數自動格式化掛載磁盤,需在User Data編寫方框中編寫才生效。
自動格式化掛載磁盤配置參數以下所示,僅供參考。
注意:若是建立雲主機時數據雲盤開啓了VirtioSCSI,則在Linux系統內磁盤盤符爲sda…sdd等;若是未開啓VirtioSCSI,則在Linux系統內磁盤盤符爲vda…vdd等,本次測試數據雲盤開啓了VirtioSCSI。
#cloud-config
bootcmd:
-
mkdir /mnt/disk
-
mkfs.xfs -f -i size=512 -l size=128m,lazy-count=1 -d agcount=16 /dev/sda
-
echo -e 「ls -l /dev/disk/by-uuid/ |grep sda |awk ‘{print$9}’ > /root/diskuuid\nmount /dev/disk/by-uuid/`cat /root/diskuuid` /mnt/disk」 >> /root/mount.sh
runcmd:
-
[ sh, -c, bash /root/mount.sh ]
-
echo hello,world!! >> /mnt/disk/hello.txt
-
rm -rf /root/diskuuid
-
rm -rf /root/mount.sh
四、在User Data編寫框內編寫完自動格式化掛載磁盤配置參數,點擊肯定開始建立雲主機,如圖15所示:
圖15 編寫完User Data參數配置
2、驗證
一、打開當前雲主機的控制檯,能夠登陸雲主機系統,使用root用戶登陸到雲主機系統當中,查看數據雲盤系統是否已經加載,如圖16所示:
圖16 查看數據雲盤
二、查看數據雲盤是否已經掛載到對應目錄下,本次測試在掛載目錄下建立了hello.txt文件並寫入了內容,證實該數據雲盤是否可用,驗證有數據表示測試成功,如圖17所示:
圖17 驗證
User Data注意說明
注意事項:需嚴格注意縮進,不然Userdata將沒法生效。
● 導入User Data前,需確保Userdata網絡服務、DHCP網絡服務都可正常使用;
● 默認狀況下,扁平網絡/雲路由網絡/VPC網絡環境的Userdata網絡服務、DHCP網絡服務均啓用;
● 若經過User Data方式設置主機名和root密碼,請勿在SSH登陸方式中再次設置主機名和root密碼,避免衝突;
● 經過User Data設置root密碼後,建立出的雲主機詳情頁User Data中會展現明文密碼,注意保護密碼安全;
● Linux雲主機導入User Data說明:
一、需提早確保Linux雲主機鏡像已安裝cloud-init,且cloud-init推薦版本爲:0.7.九、17.一、19.四、19.4之後版本
二、若使用已安裝cloud-init的雲主機鏡像建立Linux雲主機,必須導入User Data,不然cloud-init任務會持續等待直到超時
● Windows雲主機導入User Data說明:
一、需提早確保Windows雲主機鏡像已安裝Cloudbase-Init,且Cloudbase-Init版本無限制,Cloudbase-Init的具體安裝方法可參考Cloudbase官方文檔
二、若使用已安裝Cloudbase-Init的雲主機鏡像並建立Windows雲主機,必須導入User Data,不然Cloudbase-Init任務會持續等待直到超時
● 使用User Data時,一個二層網絡僅支持配置一個三層網絡。
如需查看完整版教程,請點擊該連接進行下載:
http://cdn.zstack.io/tools/ISO-forSH/ZStack%E4%BA%91%E5%B9%B3%E5%8F%B0%E5%BA%94%E7%94%A8%20User%20Data%E6%95%99%E7%A8%8B.docx