Sanal sunucularını barındırmak için vCenter kullanan birçok kişinin bildiği gibi, snapshot, bir sistemde yükseltme veya değişiklik yapmadan önce sıklıkla gerçekleştirilen kritik bir işlevdir. Ancak, özellikle birden fazla snapshot alıyorsanız, snapshot almak sıkıcı bir süreç olabilir. Neyse ki VMware, bu süreci çok daha verimli hale getirebilecek PowerCLI PowerShell modülünü yarattı. PowerShell Gallery web sitesinden indirilen VMware. Web görünümünde ortak görevlerin nasıl gerçekleştirileceğini gözden geçirelim ve aynı görevin CLI’den nasıl yapıldığını sizlere anlatacağın.

GUI’yi kullanarak bir URL’ye gitmekte ve credentials bilgilerini girmeniz gerekmektedir. Ortamınızda birden çok vSphere sunucusu varsa, kullanıcının birden çok sekme açması ve her sunucuya ayrı ayrı bağlanması gerekir.

Resim-1

PowerShell’i de kullanabilirsiniz,

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force
Import-Module VMware.VimAutomation.Core -Force
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false
$Credential = Import-CliXml -path <scrubbed> 
# Credentials
$vcserver = "vcenterservername"
$vcusername = $Credential.UserName
# Login VMware
Connect-VIServer -Server $vcserver -Protocol https -User $vcusername -Password $Credential.GetNetworkCredential().Password

Kullandığım kayıtlı credentials bilgileri yöntemi, yalnızca o bilgisayarda oturum açtığımda credentials bilgilerim için çalışır. Bu, daha fazla güvenlik sağlar, çünkü başka hiç kimse kayıtlı credentials bilgilerini kopyalayamaz ve bunları başka bir sunucuda kullanamaz.

Resim-2

Connect-VIServer cmdlet’i, vSphere sunucusuna bağlanmamı sağlıyor; Aynı credentials bilgilerini kullanarak birden fazla sunucuya bağlanmak istersem, “$vcserver = “vcenterservername” satırına ek sunucu adlarını ekleyebilirim.Farklı credentials bilgileri gerekiyorsa, kullanıcı adı ile birkaç Connect-VIServer komutu kullanabilirim ve her vSphere sunucusu için gerekli parola.Bunu yapmanın birincil avantajı, kullanıcının tek bir PowerShell oturumundan tüm vSphere sunucularına erişmesine izin verilmesidir.

Aynı anda birden çok vCenter Sunucusuna bağlanma örneği aşağıdaki gibidir:

$vCenters = "vCenter01-EAST",”vCenter02-WEST”
Connect-VIServer -Server $vCenters -Protocol https -User $vcusername -Password $Credential.GetNetworkCredential().Password

$global:defaultviservers global değişkenini kullanarak hangi vCenter
Sunucularına bağlı olduğunuzu görebilirsiniz:

$global:defaultviservers

Name                           Port   User
----                           ----   ----
vCenter01-EAST                 443    DOMAIN\UserName
vCenter02-WEST                 443    DOMAIN\UserName
Anlık Snapshot Alma

Web arayüzünden anlık görüntü almak için her bir sunucuya gitmeniz ve anlık görüntü 
işlemini manuel olarak başlatmanız gerekir. Aşağıda, tamamlamanız gereken adımların
 bazı ekran görüntüleri bulunmaktadır.

Resim-3

GUI'de anlık görüntü almak için, anlık görüntüsünü almak istediğiniz VM makinesini
seçin ve ardından Actions > Snapshots > Take Snapshot üzerinden alabilirsiniz.

Bu adımların anlık görüntüsünü almak istediğiniz her sunucu için tekrarlanması gerekir.

PowerCLI modülünü kullanmak, özellikle birden çok sunucunun anlık görüntüsünü alıyorsanız, daha akıcı bir süreç sağlar. İlk adım, anlık görüntüsünü almak istediğiniz tüm sunucuların bir dizisini oluşturmak ve ardından bunu bir değişken olarak kaydetmektir. Ardından, SnapShotName’i dinamik olarak oluşturmak için bir ForEach döngüsü kullanın (örnekte, sanal makine adına yalnızca “-backup” ifadesini ekledim, ancak isterseniz bir tarih veya başka bir karakter ekleyebilirsiniz), bir durum mesajı yazın PowerShell konsoluna yükleyin ve anlık görüntüyü oluşturmak için New-Snapshot cmdlet’ini kullanın. Ayrıca her sunucuyu statik olarak ayrı bir dize olarak tanımlıyorum ve ardından her yeni sunucu adını $AppVMs dizisine ekliyorum.

$AppVMs=”server1″,”server2″,”server3″,”server4″
# Take Snapshot
ForEach ($VM in  $AppVMs){
$snapshotname = $vm + ”-backup”
write-host ”Creating snapshot [$snapshotname] for the VM [$vm]”
New-Snapshot -vm $vm -name $snapshotname -confirm:$false -runasync:$true
}

VM adlarının tümü farklıysa, her bir VM’yi statik olarak tanımlamak yararlıdır; ancak, adlar benzerse, sanal makine adlarını almak için alternatif bir yöntem kullanabilirsiniz:

$AppVMs= Get-VM -Name server*

Bu yöntemi kullanmak, önceki örnekte kullanılan dördü de dahil olmak üzere “sunucu” kelimesiyle başlayan tüm VM’lerin bir dizisini oluşturur. Özellikle sadece bu dört sunucuyu kullanmak istersem, bu yöntemi kullanabilirim:

$AppVMs= Get-VM -Name “server[1-4]”

Bu, yalnızca bu sunucuların VM’lerini açıkça almamı sağlıyor. 100 sunucu varsa ve sadece orta 50 ile çalışmak istiyorum, şunu yapabilirim:

$AppVMs= Get-VM -Name “server[26-75]”

Tüm VM nesnesini $AppVMs dizisinde depoladığım için, önceki snap’te kullanıldığı gibi statik olarak tanımlanmış dize yerine her bir VM’den .Name özelliğini kullanmak için anlık görüntü komut dosyamı değiştirmem gerekiyor.

Şuna benziyor:

# Take Snapshot
ForEach ($VM in  $AppVMs){
$snapshotname = $vm.Name + ”-backup”
write-host
“Creating snapshot [$snapshotname] for the VM [$($vm.Name)]”
New-Snapshot -vm $vm -name $snapshotname -confirm:$false -runasync:$true
}

Sunucunun host adı veya DNS adı olabilecek veya olmayabilecek sanal makine adına ihtiyacınız olduğunu unutmayın. Birisi VM adını değiştirirse PowerShell komutunuzu güncellemeniz gerekir.

Snapshots Silme

Bir sunucuda (veya birden çok sunucuda) değişikliklerinizi yaptıktan sonra, vCenter Sunucunuzda değerli yer kaplayabileceğinden anlık görüntüleri kaldırmanız gerekecektir. Sadece bu da değil, anlık görüntüler ne kadar uzun süre kalırsa, bunları kaldırmaya çalıştığınızda sorunlarla karşılaşma olasılığınız o kadar yüksek olur.

Web konsolunda, her bir sanal makineye gidin ve Actions > Snapshots > Manage Snapshots öğesine tıklayın.

Resim-4

Kaydettiğiniz tüm anlık snapler, Manage Snapshot ekranında görünecektir.

Manage snapshot Yönet ekranından, önceden kaydedilmiş bir anlık snapshot silebilir veya geri dönebilirsiniz.

Snapshot almada olduğu gibi, bunu her sanal makine için yapmamız gerekiyor.

PowerShell’de New-Snapshot cmdlet’ine benzer bir snapten kullanabiliriz:

ForEach ($VM in $AppVMs){
$snapshotname = $vm + “-backup”
$snap = Get-Snapshot -vm $vm -name $snapshotname
write-host “Removing snapshot [$snapshotname] for the VM [$vm]”
remove-snapshot -snapshot $snap -confirm:$false -runasync:$true
}

Bu snap’te, Get-Snapshot cmdlet’ini kullanarak bireysel anlık görüntüyü almamız ve ardından bunu remove-snapshot kullanarak kaldırmamız gerekiyor.

Snapshot Temizleme Yöntemi

Daha önce de belirtildiği gibi, çok uzun süre snapshot tutmak vCenter’da sorunlara neden olabilir. Muhtemelen başka bir kullanıcının snapshot’larını kaldıramadığı bir durumla karşılaşacaksınız; sunucuda şu anda kaç tane anlık görüntünün kaydedildiğini proaktif olarak görüntülemek faydalı olabilir.

GUI ile başlayalım. Ne yazık ki, her VM için listelenen her anlık görüntünün güzel bir görüntüsünü veya genel görünümünü oluşturmak mümkün değildir. vSphere, sizin için ne kadar uygun olursa olsun, bunu sizin için yapma yeteneğine sahip değildir.

Ancak PowerCLI ile aşağıdaki PowerShell satırını kullanarak bir rapor oluşturabilirsiniz:

Get-VM | Get-Snapshot | select VM, Name, Created | Export-Csv .\VM.csv

Bu tek satır, bağlı olduğunuz her vSphere Sunucusundaki tüm VM’leri sorgulayacak ve ilgili tüm snapshot’ların çıktısını alacaktır. Ardından VM adını, anlık görüntü adını ve oluşturma tarihini seçer ve bu bilgileri bir CSV dosyasına aktarır. Bu, sanal makine yöneticilerinin anlık görüntüler hakkında ne yapacaklarına karar vermelerini sağlar.

Get-VM | Get-Snapshot | Remove-Snapshot -Confirm:$false

Aşağıdaki örnek, tüm bağlı vCenter Sunucularından VM’ler için “snapshot” ifadesiyle başlayan tüm anlık görüntüleri alır ve anlık görüntüleri listeleyen bir GUI’de görüntüler.

Get-VM | Get-Snapshot -name snapshot*| Out-GridView -PassThru | Remove-Snapshot -Confirm:$false

Resim-5