Cepet utawa mengko, administrator sistem VMware bakal ngotomatisasi tugas rutin. Iku kabeh diwiwiti karo baris printah, banjur teka PowerShell utawa VMware PowerCLI.
Contone, sampeyan wis nguwasani PowerShell luwih sithik tinimbang ngluncurake ISE lan nggunakake cmdlet standar saka modul sing bisa digunakake amarga "sawetara jenis sihir". Nalika sampeyan miwiti ngetang mesin virtual ing atusan, sampeyan bakal nemokake sing Tulisan sing bantuan metu ing ukuran cilik mlaku noticeably alon ing ukuran gedhe.
Ing kahanan iki, 2 alat bakal mbantu:
PowerShell Runspaces - pendekatan sing ngidini sampeyan parallelize eksekusi proses ing benang sing kapisah;
Get-View - fungsi PowerCLI dhasar, analog saka Get-WMIObject ing Windows. Cmdlet iki ora narik obyek sing ngiringi entitas, nanging nampa informasi ing wangun obyek prasaja karo jinis data prasaja. Ing akeh kasus metu luwih cepet.
Sabanjure, aku bakal ngomong babagan saben alat lan nuduhake conto panggunaan. Ayo analisa skrip tartamtu lan deleng yen siji bisa luwih apik tinimbang liyane. Tindak!
Tahap pisanan: Runspace
Dadi, Runspace dirancang kanggo ngolah tugas paralel ing njaba modul utama. Mesthi, sampeyan bisa miwiti proses liyane sing bakal mangan sawetara memori, prosesor, etc. Yen script mbukak ing sawetara menit lan nganggo gigabyte memori, paling kamungkinan sampeyan ora perlu Runspace. Nanging kanggo skrip kanggo puluhan ewu obyek dibutuhake.
kacepetan kanthi matesi dhaptar printah sing dieksekusi,
eksekusi paralel tugas,
keslametan
Iki conto saka Internet nalika Runspace mbantu:
"Pertentangan panyimpenan minangka salah sawijining metrik sing paling angel dilacak ing vSphere. Ing vCenter, sampeyan ora mung bisa ndeleng VM sing nggunakake sumber daya panyimpenan luwih akeh. Untunge, sampeyan bisa ngumpulake data iki sajrone sawetara menit amarga PowerShell.
Aku bakal nuduhake script sing bakal ngidini administrator sistem VMware cepet nelusuri saindhenging vCenter lan nampa dhaftar VM karo data ing konsumsi rata-rata sing.
Skrip nggunakake PowerShell runspaces kanggo ngidini saben host ESXi ngumpulake informasi konsumsi saka VM dhewe ing Runspace kapisah lan langsung laporan rampung. Iki ngidini PowerShell kanggo nutup proyek langsung, tinimbang ngulang liwat host lan ngenteni saben wong ngrampungake panjaluke.
Ing kasus ing ngisor iki, Runspace ora migunani maneh:
"Aku nyoba nulis skrip sing ngumpulake akeh data saka VM lan nulis data anyar yen perlu. Masalahe yaiku ana akeh VM, lan 5-8 detik digunakake ing siji mesin.
Ing kene sampeyan butuh Get-View, ayo pindhah menyang.
Tahap kapindho: Get-View
Kanggo ngerti sebabe Get-View migunani, sampeyan kudu ngelingi cara kerja cmdlet ing umum.
Cmdlet dibutuhake kanggo entuk informasi kanthi gampang tanpa perlu sinau buku referensi API lan reinvent sabanjure wheel . Apa ing jaman biyen njupuk satus utawa rong baris kode, PowerShell ngidini sampeyan nindakake karo siji printah. We mbayar penak iki karo kacepetan. Ora ana sihir ing jero cmdlet dhewe: naskah sing padha, nanging ing tingkat sing luwih murah, ditulis dening tangan trampil master saka India sing cerah.
Saiki, kanggo mbandhingake karo Get-View, ayo njupuk cmdlet Get-VM: ngakses mesin virtual lan ngasilake obyek komposit, yaiku, nempelake obyek sing gegandhengan karo: VMHost, Datastore, lsp.
Get-View ing panggonane ora nambah apa-apa sing ora perlu kanggo obyek sing bali. Kajaba iku, ngidini kita nemtokake informasi sing dibutuhake, sing bakal nggawe obyek output luwih gampang. Ing Windows Server umume lan ing Hyper-V khususe, cmdlet Get-WMIObject minangka analog langsung - ide kasebut persis padha.
Njaluk-View ora trep kanggo operasi rutin ing obyek titik. Nanging nalika nerangake ewu lan puluhan ewu obyek, iku ora duwe rega.
Saiki aku bakal nuduhake sampeyan kabeh nggunakake kasus nyata.
Nulis skrip kanggo mbongkar VM
Sawijining dina kancaku njaluk aku ngoptimalake naskah. Tugas kasebut minangka rutinitas umum: golek kabeh VM kanthi parameter cloud.uuid duplikat (ya, iki bisa ditindakake nalika kloning VM ing vCloud Director).
Kabeh iku arang banget prasaja lan cetha. Bisa ditulis sajrone sawetara menit kanthi istirahat kopi. Screw ing filtrasi lan wis rampung.
Nanging ayo ngukur wektu:
2 menit 47 detik nalika ngolah meh 10k VM. Bonus yaiku ora ana saringan lan kudu ngurutake asil kanthi manual. Temenan, skrip kasebut mbutuhake optimasi.
Runspaces sing pisanan teka kanggo ngluwari nalika sampeyan kudu bebarengan njupuk metrik host saka vCenter utawa kudu proses puluhan ewu obyek. Ayo ndeleng apa pendekatan iki ndadekke.
Nanging ana masalah: PowerCLI ora ngidini kita mbukak akeh sesi independen menyang vCenter lan bakal mbuwang kesalahan sing lucu:
You have modified the global:DefaultVIServer and global:DefaultVIServers system variables. This is not allowed. Please reset them to $null and reconnect to the vSphere server.
Kanggo ngatasi iki, sampeyan kudu ngirim informasi sesi ing stream. Elinga yen PowerShell bisa digunakake karo obyek sing bisa dilewati minangka parameter menyang fungsi utawa menyang ScriptBlock. Ayo ngliwati sesi kasebut ing wangun obyek kasebut, ngliwati $global:DefaultVIServers (Sambung-VIServer karo tombol -NotDefault):
$ConnectionString = @()
foreach ($vCenter in $vCenters)
{
try {
$ConnectionString += Connect-VIServer -Server $vCenter -Credential $Credential -NotDefault -AllLinked -Force -ErrorAction stop -WarningAction SilentlyContinue -ErrorVariable er
}
catch {
if ($er.Message -like "*not part of a linked mode*")
{
try {
$ConnectionString += Connect-VIServer -Server $vCenter -Credential $Credential -NotDefault -Force -ErrorAction stop -WarningAction SilentlyContinue -ErrorVariable er
}
catch {
throw $_
}
}
else {
throw $_
}
}
}
Saiki ayo ngetrapake multithreading liwat Runspace Pools.
Algoritme kaya ing ngisor iki:
Kita entuk dhaptar kabeh VM.
Ing aliran podo karo kita njaluk cloud.uuid.
Kita ngumpulake data saka stream menyang siji obyek.
Kita nyaring obyek kanthi nglumpukake kanthi nilai lapangan CloudUUID: sing jumlah nilai unik luwih saka 1 yaiku VM sing kita goleki.
Kaendahan saka skrip iki yaiku bisa digunakake ing kasus liyane sing padha kanthi ngganti ScriptBlock lan paramèter sing bakal dikirim menyang stream. Eksploitasi!
Kita ngukur wektu:
55 detik. Luwih apik, nanging isih bisa luwih cepet.
Ayo pindhah menyang kacepetan kapindho: GetView
Ayo goleki apa sing salah.
Kaping pisanan, cmdlet Get-VM butuh wektu suwe kanggo dieksekusi.
Kapindho, cmdlet Get-AdvancedOptions butuh luwih suwe kanggo ngrampungake.
Ayo dadi urusan karo sing nomer loro dhisik.
Outpute padha karo Get-AdvancedOptions, nanging kerjane luwih cepet.
Saiki menyang Get-VM. Iku ora cepet amarga urusan karo obyek Komplek. Pitakonan logis muncul: kenapa kita butuh informasi tambahan lan PSObject monstrous ing kasus iki, nalika kita mung butuh jeneng VM, negara lan nilai atribut sing angel?
Kajaba iku, alangan ing wangun Get-AdvancedOptions wis dibusak saka script. Nggunakake Runspace Pools saiki katon kaya overkill amarga ora ana maneh perlu kanggo parallelize tugas alon ing benang jongkok nalika nyerahke sesi. Alat kasebut apik, nanging ora kanggo kasus iki.
Ayo katon ing output ExtensionData: iku ora luwih saka obyek Get-View.
Ayo nelpon teknik kuno saka master PowerShell: siji baris nggunakake saringan, ngurutake lan ngelompokake. Kabeh medeni sadurunge kanthi elegan ambruk dadi siji baris lan dieksekusi ing siji sesi:
9 detik kanggo meh 10k obyek karo nyaring dening kondisi sing dikarepake. apik tenan!
Tinimbang kesimpulan
Asil sing bisa ditampa langsung gumantung saka pilihan alat. Asring angel ngomong kanthi pasti apa sing kudu dipilih kanggo entuk. Saben cara sing kadhaptar kanggo nyepetake skrip apik ing watesan sing bisa ditrapake. Muga-muga artikel iki bakal mbantu sampeyan ing tugas angel kanggo mangerteni dhasar otomatisasi proses lan optimasi ing infrastruktur sampeyan.
PS: Penulis matur nuwun marang kabeh anggota komunitas kanggo bantuan lan dhukungan kanggo nyiapake artikel kasebut. Malah sing duwe paws. Lan malah sing ora duwe sikil, kaya boa constrictor.