建虛擬機(jī)完整指南:避坑與實(shí)操)
1. 從ISO鏡像到可用實(shí)例整體設(shè)計(jì)思路拆解在私有云運(yùn)維的日常里用ISO鏡像裝虛擬機(jī)這件事說簡單也簡單說坑多也是真多。很多剛接觸OpenStack的朋友習(xí)慣了在虛擬化平臺(tái)里點(diǎn)幾下就裝完系統(tǒng)結(jié)果到了OpenStack這邊上傳ISO、配卷、掛載、引導(dǎo)、裝系統(tǒng)、再卸載ISO一套流程走下來中間任何一步?jīng)]配對虛擬機(jī)就卡在BIOS界面或者直接進(jìn)不了安裝程序。我前后在幾個(gè)不同規(guī)模的環(huán)境里做過這件事踩過的坑足夠?qū)懸黄芾字改纤赃@篇就把從ISO創(chuàng)建虛擬機(jī)的完整鏈路拆開講清楚。先明確一下這個(gè)操作到底在做什么。OpenStack本身是一個(gè)云操作系統(tǒng)它管理的是計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)這些資源池。默認(rèn)情況下它最擅長的是用現(xiàn)成的鏡像qcow2、raw這類快速批量創(chuàng)建虛擬機(jī)因?yàn)檫@種鏡像里已經(jīng)裝好了系統(tǒng)開機(jī)即用。但現(xiàn)實(shí)場景里你經(jīng)常需要從ISO開始裝系統(tǒng)比如要裝一個(gè)特定版本的操作系統(tǒng)、要做自定義分區(qū)、要裝一些鏡像里沒有的驅(qū)動(dòng)或者干脆就是想模擬一臺(tái)物理機(jī)的完整安裝過程。這時(shí)候就需要走ISO引導(dǎo)安裝這條路。這個(gè)內(nèi)容適合誰看如果你已經(jīng)能登錄OpenStack的Dashboard或者會(huì)用命令行知道什么是flavor、什么是volume、什么是network那這篇就是給你準(zhǔn)備的實(shí)操手冊。如果你連項(xiàng)目、用戶、配額這些概念都還沒搞明白建議先把基礎(chǔ)操作過一遍再回來不然中間很多步驟你會(huì)不知道為什么這么做。核心思路其實(shí)一句話就能概括把ISO當(dāng)成一張光盤把虛擬機(jī)的系統(tǒng)盤當(dāng)成一塊空白硬盤讓虛擬機(jī)先從光盤啟動(dòng)裝系統(tǒng)裝完之后再把光盤拔掉從硬盤啟動(dòng)。聽起來跟給物理機(jī)裝系統(tǒng)一模一樣對吧OpenStack里也是這個(gè)邏輯只不過“光盤”和“硬盤”都是虛擬的需要通過卷Volume和鏡像Image來模擬。這里有個(gè)關(guān)鍵的設(shè)計(jì)選擇需要提前想清楚系統(tǒng)盤到底用本地盤還是云硬盤Cinder卷這個(gè)選擇會(huì)直接影響你后續(xù)的操作路徑。用本地盤的話虛擬機(jī)實(shí)例的根盤是臨時(shí)的實(shí)例刪了系統(tǒng)就沒了而且沒法做快照和遷移用Cinder卷的話系統(tǒng)盤是持久化的可以快照、可以遷移、可以隨時(shí)掛載到別的實(shí)例上排查問題。從ISO安裝這個(gè)場景我強(qiáng)烈建議用Cinder卷原因后面會(huì)詳細(xì)說因?yàn)镮SO安裝過程中需要多次掛載和卸載用卷操作起來靈活得多。還有一個(gè)前置條件容易被忽略你的OpenStack環(huán)境得支持從卷引導(dǎo)。有些老版本或者配置不完整的環(huán)境Cinder卷只能作為數(shù)據(jù)盤掛載不能作為啟動(dòng)盤。這個(gè)在創(chuàng)建實(shí)例的時(shí)候就能看出來如果“從卷啟動(dòng)”那個(gè)選項(xiàng)是灰的或者創(chuàng)建完直接報(bào)錯(cuò)那就是后端存儲(chǔ)或者Glance跟Cinder的集成沒配好。遇到這種情況要么找管理員確認(rèn)配置要么就只能退而求其次用本地盤方案。2. 核心細(xì)節(jié)解析與實(shí)操要點(diǎn)2.1 ISO鏡像的上傳與格式要求第一步是把ISO文件弄進(jìn)OpenStack。這里有個(gè)常見的誤解很多人以為ISO要像qcow2鏡像那樣上傳到Glance然后直接拿它創(chuàng)建實(shí)例。實(shí)際上ISO在Glance里就是一個(gè)普通鏡像但它的用途是作為“光盤”掛載而不是作為啟動(dòng)盤直接引導(dǎo)。上傳的時(shí)候有幾個(gè)參數(shù)必須配對否則后面掛載會(huì)失敗。上傳ISO到Glance命令行大概是這樣openstack image create ubuntu-22.04-iso \ --file ./ubuntu-22.04.3-live-server-amd64.iso \ --disk-format iso \ --container-format bare \ --public注意--disk-format iso這個(gè)參數(shù)一定要寫對。如果你手滑寫成qcow2或者rawGlance雖然能存進(jìn)去但后面掛載給虛擬機(jī)的時(shí)候底層驅(qū)動(dòng)會(huì)按qcow2去解析這個(gè)文件結(jié)果就是虛擬機(jī)根本認(rèn)不出這是一張光盤引導(dǎo)直接失敗。我見過有人圖省事直接寫--disk-format raw結(jié)果排查了半天才發(fā)現(xiàn)是格式標(biāo)錯(cuò)了。--container-format bare也是必須的ISO文件本身就是裸的不需要額外的容器封裝。至于--public還是--private看你的使用范圍如果只是自己項(xiàng)目里用private就夠了省得污染公共鏡像列表。上傳完之后用openstack image list確認(rèn)一下狀態(tài)是active大小跟你本地文件一致。如果狀態(tài)一直是queued或者saving那可能是Glance后端存儲(chǔ)出問題了得找存儲(chǔ)管理員看看。提示ISO文件通常比較大幾個(gè)GB是常態(tài)。上傳之前先確認(rèn)Glance后端的存儲(chǔ)空間夠不夠別傳一半空間滿了鏡像卡在saving狀態(tài)清理起來很麻煩。2.2 系統(tǒng)盤的創(chuàng)建與參數(shù)計(jì)算接下來要?jiǎng)?chuàng)建一塊空白卷作為虛擬機(jī)的系統(tǒng)盤。這塊盤的大小怎么定我的經(jīng)驗(yàn)是ISO里官方推薦的最小磁盤空間再往上加20%到30%的余量。比如Ubuntu Server 22.04官方建議最小25GB那你至少給30GB最好給40GB。因?yàn)榘惭b過程中會(huì)解壓大量文件還要留出swap分區(qū)和后續(xù)更新的空間給得太緊巴巴的裝到一半提示空間不足前功盡棄。創(chuàng)建卷的命令openstack volume create --size 40 --image ubuntu-22.04-iso \ --bootable system-disk-for-vm01這里有個(gè)細(xì)節(jié)--image參數(shù)指定ISO鏡像--bootable標(biāo)記這塊卷是可引導(dǎo)的。有些版本的OpenStack里--image和--bootable要配合使用意思是“這塊卷從指定的鏡像引導(dǎo)”。但注意這里指定的鏡像其實(shí)是ISO所以這塊卷在創(chuàng)建的時(shí)候會(huì)被寫入ISO的內(nèi)容嗎不是的它只是把卷標(biāo)記為“可以從這個(gè)鏡像引導(dǎo)”實(shí)際引導(dǎo)的時(shí)候ISO是作為光盤掛載的卷本身還是空的。這個(gè)邏輯有點(diǎn)繞但理解這一點(diǎn)很重要因?yàn)樗鼪Q定了你后面掛載和卸載ISO的操作方式。如果你用的是Dashboard操作路徑是卷 - 創(chuàng)建卷 - 在“卷來源”里選擇“鏡像”然后選中你上傳的ISO勾選“可引導(dǎo)”。大小填40GB。創(chuàng)建完之后等狀態(tài)變成available。2.3 實(shí)例的創(chuàng)建與引導(dǎo)順序設(shè)置卷創(chuàng)建好之后就可以創(chuàng)建實(shí)例了。這里的關(guān)鍵是引導(dǎo)順序。在OpenStack里創(chuàng)建實(shí)例的時(shí)候可以指定從哪個(gè)設(shè)備引導(dǎo)。如果你用命令行大概是這樣openstack server create --flavor m1.medium \ --volume system-disk-for-vm01 \ --network private-net \ --key-name mykey \ vm01注意--volume參數(shù)它把剛才創(chuàng)建的卷作為啟動(dòng)盤掛給實(shí)例。但這時(shí)候有個(gè)問題卷里是空的ISO雖然標(biāo)記在卷上但實(shí)際引導(dǎo)的時(shí)候虛擬機(jī)需要先從ISO啟動(dòng)。OpenStack的默認(rèn)行為是如果卷是從ISO創(chuàng)建的它會(huì)自動(dòng)把ISO作為光盤掛載并且引導(dǎo)順序會(huì)優(yōu)先從光盤啟動(dòng)。但這個(gè)行為在不同版本里表現(xiàn)不一樣有的版本需要你手動(dòng)指定。更穩(wěn)妥的做法是創(chuàng)建實(shí)例的時(shí)候先不掛ISO而是創(chuàng)建一個(gè)帶空卷的實(shí)例然后手動(dòng)把ISO掛載上去再重啟實(shí)例在啟動(dòng)過程中進(jìn)入BIOS或者引導(dǎo)菜單選擇從光盤啟動(dòng)。但這樣操作太繁瑣而且很多OpenStack環(huán)境不允許你直接訪問虛擬機(jī)的BIOS界面。所以實(shí)際生產(chǎn)里我推薦的做法是創(chuàng)建卷的時(shí)候就把ISO關(guān)聯(lián)上創(chuàng)建實(shí)例的時(shí)候直接用這塊卷OpenStack會(huì)自動(dòng)處理引導(dǎo)順序。如果創(chuàng)建完實(shí)例發(fā)現(xiàn)直接進(jìn)了BIOS或者提示“no bootable device”那說明引導(dǎo)順序不對需要檢查一下卷的bootable標(biāo)記和鏡像關(guān)聯(lián)是否正確。2.4 網(wǎng)絡(luò)與安全組的配置要點(diǎn)網(wǎng)絡(luò)這塊ISO安裝過程中通常需要聯(lián)網(wǎng)下載一些額外的包所以實(shí)例得能訪問外網(wǎng)。如果你用的是私有網(wǎng)絡(luò)記得把路由和NAT配好讓實(shí)例能通過路由器訪問外部網(wǎng)絡(luò)。安全組方面安裝過程中可能需要SSH或者HTTP訪問但默認(rèn)的安全組通常只開了SSH。如果你在安裝過程中需要從外部訪問虛擬機(jī)的Web控制臺(tái)那還得開對應(yīng)的端口。不過說實(shí)話ISO安裝階段最方便的還是通過VNC或者SPICE直接看虛擬機(jī)的控制臺(tái)這樣不需要額外開端口直接在Dashboard里就能操作。OpenStack的Dashboard里實(shí)例詳情頁有個(gè)“控制臺(tái)”標(biāo)簽點(diǎn)進(jìn)去就能看到虛擬機(jī)的屏幕跟坐在物理機(jī)前面一樣。安裝系統(tǒng)的時(shí)候用這個(gè)最省事。注意VNC控制臺(tái)在安裝過程中可能會(huì)因?yàn)榫W(wǎng)絡(luò)延遲或者瀏覽器兼容性問題卡頓建議用Chrome或者Firefox別用那些小眾瀏覽器。如果控制臺(tái)一直黑屏先檢查實(shí)例狀態(tài)是不是ACTIVE再看VNC代理服務(wù)是不是正常。3. 實(shí)操過程與核心環(huán)節(jié)實(shí)現(xiàn)3.1 完整操作流程拆解下面我把整個(gè)流程按順序走一遍你可以直接照著做。假設(shè)你已經(jīng)有了OpenStack的訪問權(quán)限命令行工具也配好了。第一步上傳ISO到Glance。openstack image create centos-7-iso \ --file ./CentOS-7-x86_64-Minimal-2009.iso \ --disk-format iso \ --container-format bare \ --private上傳完成后確認(rèn)狀態(tài)openstack image show centos-7-iso -c status -c size狀態(tài)應(yīng)該是activesize跟你本地文件大小一致。第二步創(chuàng)建可引導(dǎo)的空白卷。openstack volume create --size 50 --image centos-7-iso \ --bootable centos7-system-disk等卷狀態(tài)變成availableopenstack volume show centos7-system-disk -c status第三步創(chuàng)建實(shí)例并掛載卷。openstack server create --flavor m1.large \ --volume centos7-system-disk \ --network private-net \ --security-group default \ --key-name mykey \ centos7-vm創(chuàng)建完之后用openstack server list看實(shí)例狀態(tài)應(yīng)該是ACTIVE。如果狀態(tài)是ERROR用openstack server show centos7-vm看fault信息通常是卷掛載失敗或者flavor資源不足。第四步通過控制臺(tái)安裝系統(tǒng)。在Dashboard里找到這個(gè)實(shí)例點(diǎn)“控制臺(tái)”應(yīng)該能看到CentOS的安裝界面。如果看到的是“no bootable device”或者直接進(jìn)了BIOS說明引導(dǎo)順序不對。這時(shí)候需要檢查卷的bootable標(biāo)記或者手動(dòng)把ISO掛載為光盤。手動(dòng)掛載ISO的命令openstack server add volume centos7-vm centos-7-iso --device /dev/sr0然后重啟實(shí)例openstack server reboot --hard centos7-vm重啟的時(shí)候盯著控制臺(tái)應(yīng)該能看到從光盤引導(dǎo)的提示。如果還是不行可能需要在創(chuàng)建實(shí)例的時(shí)候指定引導(dǎo)順序但這個(gè)操作在不同OpenStack版本里差異很大有的版本支持--boot-from-volume參數(shù)有的版本需要在Nova的配置里改。第五步安裝完成后卸載ISO。系統(tǒng)裝完之后虛擬機(jī)會(huì)自動(dòng)從硬盤重啟。這時(shí)候ISO還掛載著雖然不影響使用但最好卸載掉免得下次重啟又從光盤引導(dǎo)。openstack server remove volume centos7-vm centos-7-iso卸載完之后再重啟一次實(shí)例確認(rèn)能從硬盤正常引導(dǎo)。3.2 參數(shù)計(jì)算與選擇依據(jù)整個(gè)流程里有幾個(gè)參數(shù)需要你根據(jù)實(shí)際情況算一下。卷的大小前面說了官方最小要求加20%到30%。但如果你要裝圖形界面或者大量開發(fā)工具那得再加。比如CentOS 7 Minimal官方建議最小10GB但你如果要裝GNOME桌面至少得20GB起步。我的經(jīng)驗(yàn)是開發(fā)測試環(huán)境給40GB生產(chǎn)環(huán)境給60GB到100GB具體看你的應(yīng)用需求。flavor的選擇ISO安裝過程中對CPU和內(nèi)存的要求比正常運(yùn)行時(shí)要高因?yàn)榘惭b程序本身要解壓大量文件。建議至少2核4GB起步如果ISO比較大或者要裝圖形界面4核8GB更穩(wěn)妥。安裝完之后你可以再調(diào)整flavor但注意OpenStack默認(rèn)不支持在線調(diào)整flavor需要關(guān)機(jī)再改。網(wǎng)絡(luò)帶寬如果你是從外部上傳ISO到Glance那上傳速度取決于你的網(wǎng)絡(luò)帶寬。一個(gè)4GB的ISO在100Mbps的網(wǎng)絡(luò)上大概要傳5到6分鐘。如果Glance后端是分布式存儲(chǔ)上傳過程中可能會(huì)有額外的網(wǎng)絡(luò)開銷時(shí)間會(huì)更長。3.3 實(shí)操現(xiàn)場記錄與關(guān)鍵截圖說明由于這里沒法貼圖我用文字描述一下關(guān)鍵界面的樣子你操作的時(shí)候可以對照。Glance鏡像列表上傳成功后鏡像名稱旁邊會(huì)顯示“active”大小顯示為ISO的實(shí)際大小比如“4.2 GB”。如果顯示“queued”說明還在上傳中如果顯示“error”點(diǎn)進(jìn)去看錯(cuò)誤信息通常是存儲(chǔ)后端的問題。卷列表創(chuàng)建完卷之后卷的狀態(tài)是“available”大小顯示為你指定的大小比如“50 GB”。如果狀態(tài)是“creating”等一會(huì)兒刷新如果狀態(tài)是“error”看錯(cuò)誤信息可能是Cinder后端存儲(chǔ)空間不足。實(shí)例控制臺(tái)安裝界面出現(xiàn)后你會(huì)看到ISO的引導(dǎo)菜單比如CentOS的“Install CentOS 7”或者Ubuntu的“Try or Install Ubuntu Server”。用鍵盤方向鍵選擇回車進(jìn)入安裝程序。安裝過程中分區(qū)那一步建議選“自動(dòng)分區(qū)”除非你有特殊需求。如果選手動(dòng)分區(qū)記得給/boot至少1GB/至少20GBswap根據(jù)內(nèi)存大小定一般內(nèi)存的1到2倍。安裝完成后的重啟安裝程序會(huì)提示你重啟重啟的時(shí)候注意看屏幕如果又出現(xiàn)了“Press any key to boot from CD”千萬別按鍵等它自己跳過從硬盤引導(dǎo)。如果按了鍵又會(huì)進(jìn)安裝程序那就白裝了。4. 常見問題與排查技巧實(shí)錄4.1 引導(dǎo)失敗類問題排查問題一創(chuàng)建完實(shí)例控制臺(tái)顯示“no bootable device”。這是最常見的問題。原因通常是卷沒有正確標(biāo)記為可引導(dǎo)或者ISO沒有正確掛載為光盤。排查步驟檢查卷的bootable屬性openstack volume show volume-id -c bootable應(yīng)該是True。檢查卷關(guān)聯(lián)的鏡像openstack volume show volume-id -c image_id應(yīng)該是ISO的鏡像ID。檢查實(shí)例掛載的卷openstack server show server-id -c volumes確認(rèn)系統(tǒng)盤掛載在/dev/vda或者/dev/sda。如果以上都正常嘗試手動(dòng)掛載ISO為光盤openstack server add volume server-id iso-image-id --device /dev/sr0然后硬重啟。問題二控制臺(tái)顯示“Booting from Hard Disk”但硬盤是空的。這說明引導(dǎo)順序錯(cuò)了虛擬機(jī)直接從硬盤引導(dǎo)但硬盤里沒系統(tǒng)。解決辦法是進(jìn)入BIOS調(diào)整引導(dǎo)順序但OpenStack里通常沒法直接進(jìn)BIOS。替代方案是在創(chuàng)建實(shí)例的時(shí)候指定引導(dǎo)順序或者用--boot-from-volume參數(shù)強(qiáng)制從卷引導(dǎo)。如果這些都不行那就只能刪掉實(shí)例重新創(chuàng)建創(chuàng)建的時(shí)候確保ISO已經(jīng)正確關(guān)聯(lián)到卷上。問題三安裝過程中提示“Unable to find a medium containing a live file system”。這是Ubuntu ISO常見的問題通常是因?yàn)镮SO掛載的設(shè)備不對。Ubuntu的安裝程序會(huì)去找包含casper目錄的設(shè)備如果ISO掛載在/dev/sr0但安裝程序沒認(rèn)出來就會(huì)報(bào)這個(gè)錯(cuò)。解決辦法是在引導(dǎo)菜單里按e編輯引導(dǎo)參數(shù)把cdrom相關(guān)的路徑改對或者干脆換一個(gè)ISO版本試試。我遇到過幾次換成Server版而不是Live版就好了。4.2 性能與資源類問題問題四安裝過程特別慢進(jìn)度條半天不動(dòng)??赡艿脑蛴袔讉€(gè)一是Cinder后端存儲(chǔ)性能差讀寫速度跟不上二是網(wǎng)絡(luò)帶寬不夠安裝程序在下載額外的包三是flavor給的資源太少CPU跑滿了解壓速度慢。排查的時(shí)候先在Dashboard里看實(shí)例的CPU和內(nèi)存使用率如果CPU一直100%那就是資源不夠關(guān)機(jī)改flavor。如果CPU不高但磁盤IO很高那就是存儲(chǔ)性能問題找存儲(chǔ)管理員確認(rèn)后端是不是機(jī)械盤或者網(wǎng)絡(luò)存儲(chǔ)延遲大。問題五安裝完成后實(shí)例啟動(dòng)特別慢或者卡在某個(gè)服務(wù)上。這通常是系統(tǒng)盤的問題。用Cinder卷做系統(tǒng)盤IO性能取決于后端存儲(chǔ)。如果后端是機(jī)械盤或者低端網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)啟動(dòng)會(huì)比本地盤慢很多。我的經(jīng)驗(yàn)是生產(chǎn)環(huán)境盡量用SSD或者高性能分布式存儲(chǔ)做Cinder后端不然裝完系統(tǒng)用起來也難受。如果實(shí)在沒法改存儲(chǔ)那就只能忍或者在創(chuàng)建實(shí)例的時(shí)候用本地盤做系統(tǒng)盤但那樣就失去了持久化和遷移的能力。4.3 常見問題速查表問題現(xiàn)象可能原因排查命令解決辦法控制臺(tái)顯示“no bootable device”卷未標(biāo)記可引導(dǎo)或ISO未掛載openstack volume show id -c bootable重新創(chuàng)建卷并確保--bootable和--image參數(shù)正確直接從硬盤引導(dǎo)但硬盤為空引導(dǎo)順序錯(cuò)誤openstack server show id -c volumes手動(dòng)掛載ISO為光盤并硬重啟安裝程序找不到ISO介質(zhì)ISO掛載設(shè)備不對在控制臺(tái)查看掛載點(diǎn)編輯引導(dǎo)參數(shù)或更換ISO版本安裝過程極慢存儲(chǔ)性能差或資源不足查看實(shí)例CPU和磁盤IO改flavor或更換存儲(chǔ)后端安裝完成后無法從硬盤引導(dǎo)ISO未卸載或引導(dǎo)順序未恢復(fù)openstack server show id -c volumes卸載ISO并重啟實(shí)例卷創(chuàng)建失敗Cinder后端空間不足openstack volume show id -c status清理無用卷或擴(kuò)容后端存儲(chǔ)4.4 獨(dú)家避坑技巧技巧一先用小ISO測試流程。如果你第一次做這個(gè)操作別上來就拿幾十GB的ISO試。找一個(gè)幾百M(fèi)B的輕量級(jí)Linux發(fā)行版比如Alpine或者Tiny Core先把整個(gè)流程跑通確認(rèn)引導(dǎo)、掛載、安裝、卸載都沒問題再換正式ISO。這樣能省很多時(shí)間因?yàn)榇驣SO上傳和安裝都慢出錯(cuò)了排查也費(fèi)勁。技巧二安裝過程中別關(guān)控制臺(tái)。有些人習(xí)慣開著控制臺(tái)然后去干別的結(jié)果回來發(fā)現(xiàn)控制臺(tái)斷開了安裝卡在某個(gè)交互界面等輸入。OpenStack的VNC控制臺(tái)在長時(shí)間無操作后可能會(huì)斷開雖然虛擬機(jī)本身還在跑但你沒法看到界面也沒法輸入。所以安裝過程中最好保持控制臺(tái)窗口活躍或者用openstack console log show看日志確認(rèn)進(jìn)度。技巧三裝完系統(tǒng)先別急著卸載ISO。系統(tǒng)裝完第一次重啟后確認(rèn)能正常登錄了再卸載ISO。因?yàn)橛袝r(shí)候系統(tǒng)裝完但引導(dǎo)記錄沒寫對卸載ISO后直接起不來還得重新掛載ISO進(jìn)救援模式修復(fù)。多掛一會(huì)兒不礙事確認(rèn)沒問題了再卸。技巧四用卷快照做備份。系統(tǒng)裝好之后第一時(shí)間給卷做個(gè)快照。這樣以后裝壞了或者要批量部署直接從這個(gè)快照創(chuàng)建新卷就行不用每次都從頭裝。快照命令openstack volume snapshot create --volume volume-id snapshot-name。恢復(fù)的時(shí)候用openstack volume create --snapshot snapshot-id new-volume-name。技巧五注意時(shí)區(qū)和鍵盤布局。安裝過程中時(shí)區(qū)和鍵盤布局這兩個(gè)選項(xiàng)很容易被忽略但裝完之后再改就麻煩了。特別是鍵盤布局如果你選錯(cuò)了后面輸密碼的時(shí)候會(huì)發(fā)現(xiàn)打出來的字符跟預(yù)期不一樣登錄都登不進(jìn)去。安裝的時(shí)候花幾秒鐘確認(rèn)一下省得后面折騰。5. 批量部署與自動(dòng)化擴(kuò)展思路單臺(tái)從ISO裝系統(tǒng)搞定了接下來自然會(huì)想能不能批量做。答案是能但需要一些額外的工具和腳本。OpenStack本身提供了Heat編排服務(wù)你可以寫一個(gè)Heat模板把上傳ISO、創(chuàng)建卷、創(chuàng)建實(shí)例、掛載ISO這一系列操作串起來一鍵部署多臺(tái)。但Heat模板寫起來比較繁瑣而且調(diào)試麻煩對于偶爾用一次的場景有點(diǎn)殺雞用牛刀。更輕量的做法是用命令行腳本。把前面那些命令寫成一個(gè)bash腳本用循環(huán)創(chuàng)建多臺(tái)實(shí)例。但注意ISO安裝過程中需要人工交互腳本沒法自動(dòng)完成分區(qū)、設(shè)置密碼這些步驟。所以批量部署的場景通常不是從ISO裝而是先手工裝好一臺(tái)做成鏡像然后用這個(gè)鏡像批量創(chuàng)建實(shí)例。這才是OpenStack的正確用法。如果你確實(shí)需要批量從ISO裝那可以考慮用Kickstart或者Preseed做自動(dòng)化安裝。CentOS系用KickstartUbuntu系用Preseed把安裝配置寫成一個(gè)文件放在HTTP服務(wù)器上ISO引導(dǎo)的時(shí)候指定這個(gè)文件的URL安裝程序就會(huì)自動(dòng)完成所有步驟不需要人工干預(yù)。這樣配合腳本就能實(shí)現(xiàn)批量部署。但配置Kickstart文件本身也需要不少時(shí)間適合有長期批量需求的場景。提示Kickstart和Preseed的配置文件里可以指定分區(qū)方案、軟件包列表、網(wǎng)絡(luò)配置、用戶密碼等。寫的時(shí)候注意密碼要用加密后的哈希值別直接寫明文。生成哈??梢杂胦penssl passwd -6命令。6. 個(gè)人實(shí)操體會(huì)與后續(xù)擴(kuò)展這套流程我在不同環(huán)境里跑過很多次最大的體會(huì)是OpenStack從ISO裝虛擬機(jī)的難點(diǎn)不在命令本身而在環(huán)境配置和引導(dǎo)順序。命令就那么幾條背都背下來了但環(huán)境里任何一個(gè)環(huán)節(jié)沒配好比如Cinder后端不支持可引導(dǎo)卷、Glance鏡像格式不對、Nova引導(dǎo)順序配置有問題都會(huì)讓你卡住。所以遇到問題的時(shí)候別急著懷疑自己的操作先確認(rèn)環(huán)境是不是支持這個(gè)用法。另一個(gè)體會(huì)是能不用ISO就不用ISO。如果你的需求只是裝一個(gè)標(biāo)準(zhǔn)系統(tǒng)那直接找一個(gè)現(xiàn)成的qcow2鏡像上傳到Glance創(chuàng)建實(shí)例的時(shí)候選這個(gè)鏡像幾十秒就能起來比ISO安裝快得多也穩(wěn)得多。ISO安裝適合那些確實(shí)需要自定義分區(qū)、需要特定驅(qū)動(dòng)、或者需要模擬完整安裝過程的場景。日常運(yùn)維里大部分情況用現(xiàn)成鏡像就夠了。后續(xù)如果要把這個(gè)流程產(chǎn)品化可以考慮做成一個(gè)自服務(wù)門戶讓用戶填幾個(gè)參數(shù)ISO選擇、卷大小、flavor、網(wǎng)絡(luò)后臺(tái)自動(dòng)完成剩下的步驟。這樣不懂OpenStack命令的人也能用。但要注意ISO安裝過程中還是需要人工交互所以門戶里得集成VNC控制臺(tái)讓用戶能直接操作安裝界面。這個(gè)集成工作量不小但做一次能省很多重復(fù)勞動(dòng)。最后分享一個(gè)小技巧如果你經(jīng)常需要從ISO裝系統(tǒng)可以準(zhǔn)備一個(gè)“萬能”ISO里面集成常用的驅(qū)動(dòng)和工具然后把這個(gè)ISO做成Glance里的公共鏡像所有人共享。這樣不用每個(gè)人都上傳一遍ISO省存儲(chǔ)空間也省時(shí)間。ISO的定制可以用mkisofs或者genisoimage工具把額外的文件追加進(jìn)去具體方法這里就不展開了有需要的可以自己查一下。