A Virtualizációs technológiák és alkalmazásaik választható tárgyunkban most volt nemrég az ESXi-s gyakorlat, amire meg kellett oldani, hogy minden hallgatónak legyen egy saját ESXi homokozója. Bár a napokban megjelent új VMware Workstation 7-ben már támogatott az ESX 4.0 futtatása, nekünk még csak 6-os volt a laborban, így Dani megoldotta egyik este, hogy PXE boot segítségével hálózatról lehessen ESXi-t bootolni [amit majd szépen le is dokumentál itt, igaz?;-]. Minden hallgató 2 gépet kapott, az egyiken elindította az ESXi 4-et, a másikon pedig kapott két virtuális gépet: egy linuxos iSCSI target-et, ami a tárhelyet fogja szolgáltatni, és egy windowsos virtuális gépet benne a vSphere Client menedzsment eszközzel. Írtunk még egy rövid segédletet, hogy ebben a környezetben mit kell beállítani, hogy üzemképes legyen az ESXi. A tapasztalat viszont az volt, hogy mivel a hallgatók nagy része most látott először iSCSI-t és szerver oldali virtualizációs rendszert, ezért ez kb. egy óráig tartott, és gyakorlat végén jutottunk el oda, hogy akkor most lehetne virtuális gépet létrehozni:-). A következő alkalomra automatizálni kellett az előkészítő lépéseket. Ehhez a következők kellenek:
- VMKernel interfész létrehozása,
- Szoftveres iSCSI engedélyezése,
- iSCSI target csatlakoztatása,
- Kiajánlott lemezek felderítése,
- A csatlakoztatott lemezen VMFS-es datastore létrehozása.
A VMware több féle automatizálási megoldást nyújt, van távoli parancssor, Perl-es, PowerShell-es, Web Service-s API is. A VMware PowerShell cmdlet-eit úgyis ki akartam próbálni, ez tehát pont jó alkalomnak tűnt:-) A következőt kell tenni:
- PowerShell feltelepítése a windowsos virtuális gépre (Windows 7 előtti Windowsokon),
- PowerCLI letöltése és telepítése,
- PowerCLI elindít, a Get-VICommand segítségével ismerkedni a parancssokkal.
Akkor lássuk, miből élünk:) A VMKernel létrehozását elég gyorsan megoldottam, erre a New-VMHostNetworkAdapter cmdlet való. Az iSCSI már kicsit bonyolultabbnak nézett ki, de szerencsére a New-Datastore man oldalán van pont egy ilyen példa. Ezek alapján könnyű volt összerakni a szkriptet:
# Name: Prepare-ESXi.ps1 # Author: Micskei Zoltán # Scripts based on the example in man New-Datastrore # Date: 2009. 10. 27. # Desc: Configures iSCSI initiator and adds a datastore to a PXE-booted ESXi host in IE224 lab # Param: 1 - IP of the ESX host # 2 - IP of the iSCSI target to connect param( [string] $esxIP = $(throw "Supply the IP address of the ESX host"), [string] $iscsiServer = $(throw "Supply the IP address of the iSCSI target") ) # Constants $ISCSI_HBA = "vmhba34" $ISCSI_PORT = 3260 Write-Output "Setting up $esxIP.." # connect to the ESX host connect-viserver $esxIP # get the default virtual switch (assumes there is only one) $vSwitch = Get-VirtualSwitch # modify this according to your environment $vmKernel_IP = $esxIP.Replace(".100.", ".120.") # create a nem VMKernel New-VMHostNetworkAdapter -VMHost $esxIP -PortGroup "VMKernel Port" -VirtualSwitch $vSwitch -IP $vmKernel_IP -SubnetMask 255.255.0.0 # get the necessary views $h = Get-VMHost $hostView = Get-View -VIObject $h $storageSystem = Get-View $hostView.configManager.storageSystem #Enable the software iSCSI controller. $storageSystem.UpdateSoftwareInternetScsiEnabled($true) #Add an iSCSI server for a dynamic discovery. $target = New-Object VMware.Vim.HostInternetScsiHBASendTarget $target.address = $iscsiServer $target.port = $ISCSI_PORT $storageSystem.AddInternetScsiSendTargets($ISCSI_HBA, $target) #Scan for iSCSI devices. $storageSystem.RescanHba($ISCSI_HBA) # Get lunPath and create a new storage. # Select the lun where the vendor is IET (iSCSI Enterprise Target, the Linux-based iSCSI target used currently) $lunList = Get-ScsiLun -VMHost $h #HACK: the proper name is 'IET ' (yes, with the spaces:( ) $lun = ($lunList | ? { $_.Vendor -like "IET*" }) # create new datastore New-Datastore -Vmfs -VMHost $h -Path $lun.CanonicalName -Name iScsi Write-Host "Datastrore created" |
A szkript természetesen a mi környezetünkre (hálózat, iSCSI beállításai) illeszkedik, de szerintem könnyen lehet máshova is adaptálni. Pár dolog, amire érdemes figyelni:
- Jelenlegi formájában a csatlakozáshoz szükséges felhasználónevet és jelszót interaktívan kéri be,
- A New-Datastore leírásában a példában van pár elírás (pl. CannonicalName -> CanonicalName, ( előtti felesleges szóközök), lásd itt,
- A LUN kiválasztásánál sehogy se sikerült az IET sztringre szűrni, persze, mert a pontos név IET és utána még 5 szóköz, ezért használok -like operátort a kiválasztásban:)
- FIGYELEM: az ingyenes ESXi esetén csak olvasási műveleteket lehet végrehajtani távolról, tehát ott az alábbi szkript nem működik.
Alapvetően meglepően gyorsan ment a szkript elkészítése, és a segítéségével tényleg percek alatt össze lehet hozni egy működő teszt ESXi rendszert. Érdemes még nézegetni a PowerCLI csapat blogját, jó kis példák vannak ott is.
Micskei Zoltán