[TR] VMware ESXi Host’larda Yüklü VIB Paketlerinin Karşılaştırılması

[TR] VMware ESXi Host’larda Yüklü VIB Paketlerinin Karşılaştırılması

Kurumsal ölçekte bir VMware vSphere ortamı yönetiyorsanız yalnızca sanal makinelerin sağlıklı çalışması yeterli değildir. Asıl kritik nokta altyapıyı taşıyan ESXi host’ların konfigürasyon tutarlılığıdır.

Çoğu yönetici sürüm (Version) ve build (Build) numaralarının aynı olmasını yeterli görse de gerçek tutarlılık bunun çok daha ötesindedir.

Cluster içerisindeki host’ların yüklü VIB (vSphere Installation Bundle) paketlerinin birebir aynı olması, özellikle NSX, iSCSI, Fibre Channel, yüksek performanslı NIC ve özel OEM sürücü kullanılan ortamlarda hayati önem taşır.

Bu makalemde:

  • VIB nedir ve neden kritiktir?
  • VIB farklılıkları hangi riskleri doğurur?
  • PowerCLI ile VIB’ler nasıl karşılaştırılır?
  • Validate-ESXiPackages fonksiyonu nasıl çalışır?
  • Çıktılar nasıl analiz edilmelidir?
  • Gerçek hayatta karşılaşılabilecek risk senaryoları nelerdir? tüm detaylarıyla ele alacağız.

VIB (vSphere Installation Bundle) Nedir?

VIB, ESXi üzerinde çalışan;

  • Kernel modülleri
  • Donanım sürücüleri (NIC, HBA, RAID vb.)
  • Agent servisleri
  • OEM bileşenleri
  • NSX modülleri
  • Storage eklentileri gibi bileşenleri içeren paket yapısıdır.

Bir ESXi host’un çalışmasını belirleyen temel yapı taşları VIB paketleridir.

Dolayısıyla iki host aynı sürümde olsa bile VIB seviyesinde farklılık varsa davranışları farklı olabilir.

VIB Farklılıkları Neden Risklidir?

Her VIB farklılığı kriz anlamına gelmez. Ancak bazı senaryolarda ciddi sonuçlar doğurabilir.

Düşük Riskli Senaryo

  • Kullanılmayan bir sürücü paketi
  • Aktif olmayan bir OEM modülü
  • Referans host’ta olup diğerinde kullanılmayan bir agent

Bu tür farklılıklar genellikle operasyonel risk oluşturmaz.

Yüksek Riskli Senaryolar

NIC Driver Uyumsuzluğu

  • Farklı driver versiyonları
  • Farklı firmware uyumluluk seviyesi
  • NSX ortamında VTEP performans düşüşü
  • Paket kaybı
  • Ağ gecikmesi

NSX-V veya NSX-T VIB Farklılığı

Örneğin çıktıda görülen;

VMware_bootbank_esx-nsxv_6.5.0-0.0.7563456

Eğer bu VIB bazı host’larda var, bazılarında yoksa:

  • Distributed Firewall tutarsız çalışabilir
  • VXLAN / Geneve encapsulation sorunları oluşabilir
  • Host preparation eksik olabilir
  • Mikro segmentasyon düzgün uygulanmayabilir

Storage Driver Uyumsuzluğu

  • iSCSI driver farklılıkları
  • HBA sürücü versiyon farkı
  • Multipath hataları
  • Storage latency artışı

Görüntülerde örnek olarak;

EMU_bootbank_ima-be2iscsi_11.2.1147.5-1OEM




versiyon farklılıkları dikkat çekmektedir.

PowerCLI ile VIB Karşılaştırma Mantığı

Karşılaştırmanın temelinde şu PowerShell cmdlet’i vardır;

Compare-Object




Bu komut iki veri kümesini karşılaştırır;

ReferenceObject → Referans host
DifferenceObject → Kontrol edilen host

VIB listesi şu komutla alınır;

Get-ESXCLI -VMHost <Host> -V2




Ve;

$esxcli2.software.vib.list.invoke()




ile VIB ID listesi elde edilir.

Validate-ESXiPackages Fonksiyonu

Bu fonksiyon:

  • Bir cluster içindeki tüm ESXi host’ları
  • Belirlenen bir referans host ile
  • VIB ID bazında karşılaştırır
  • Farklılıkları raporlar

Parametreler

  • Cluster → Kontrol edilecek cluster
  • RefernceHost → Referans alınacak ESXi host

Örnek Kullanım

Tek cluster

Validate-ESXiPackages -Cluster (Get-Cluster | Select-Object -First 1) `
                      -RefernceHost (Get-VMHost | Select-Object -First 1)




Birden fazla cluster

Get-Cluster | Validate-ESXiPackages -RefernceHost $(Get-VMHost "ESX01")




Çıktının Detaylı Analizi

Fonksiyon çıktısında şu alanlar bulunur:

AlanAçıklama
HostESXi host adı
VersionESXi versiyonu
BuildBuild numarası
VibDiffCountFarklı VIB sayısı
VibDiffFarklı VIB ID’leri
VibDiffSideIndicatorFarkın yönü

Gerçek Örnek Analizi

Görüntülerde tüm host’lar;

Version: 6.5.0
Build: 7388607

Ancak:

  • Bazılarında VibDiffCount = 0
  • Bazılarında 12, 18, 19 gibi değerler

Bu ne anlama gelir?

Sürüm aynı ama paket yapısı farklı.

VibDiffSideIndicator Ne Anlatır?

Compare-Object şu sembolleri kullanır:

SembolAnlamı
<=Sadece referans host’ta var
=>Sadece kontrol edilen host’ta var

Örnek:

=> VMware_bootbank_esx-nsxv_6.5.0-0.0.7563456
<= EMU_bootbank_ima-be2iscsi_11.2.1147.5-1OEM

Yorum:

  • NSX-V VIB referans host’ta yok ama diğer host’ta var.
  • iSCSI driver referans host’ta var ama diğer host’ta yok.

Bu cluster içinde ciddi konfigürasyon farklılığı anlamına gelir.

Büyük Ortamlarda Gerçek Hayat Senaryosu

100+ host bulunan bir ortam düşünelim.

Upgrade sonrası:

  • Bazı host’lar OEM image ile kurulu
  • Bazıları vanilla ESXi
  • Bazılarında NSX düzgün prepare edilmiş
  • Bazılarında eksik VIB kalmış

Bu durumda:

  • HA davranışı farklılaşabilir
  • VM migration sorun çıkarabilir
  • DRS kararsız çalışabilir
  • Ağ segmentleri düzgün izole olmayabilir

Manuel kontrol imkânsızdır.

Bu fonksiyon dakikalar içinde tüm cluster’ı doğrular.

NIC Driver ve Firmware Kontrolü

Makale ayrıca daha detaylı analiz için şu modülü öneriyor;

Get-NICDetails.psm1

function Get-NICDetails {
<#	
    .NOTES
    ===========================================================================
    Created by: Markus Kraus
    Twitter: @VMarkus_K
    Private Blog: mycloudrevolution.com
    ===========================================================================
    Changelog:  
    2017.02 ver 1.0 Base Release  
    ===========================================================================
    External Code Sources: 
    -
    ===========================================================================
    Tested Against Environment:
    vSphere Version: ESXi 6.0 U2, ESXi 6.5
    PowerCLI Version: PowerCLI 6.3 R1, PowerCLI 6.5 R1
    PowerShell Version: 4.0, 5.0
    OS Version: Windows 8.1, Server 2008 R2, Server 2012 R2
    Keyword: ESXi, NIC, vmnic, Driver, Firmware
    ===========================================================================

    .DESCRIPTION
    Reports Firmware and Driver Details for your ESXi vmnics.

    .Example
    Get-NICDetails -Clustername *

    .PARAMETER Clustername
    Name or Wildcard of your vSphere Cluster Name to process.


#Requires PS -Version 4.0
#Requires -Modules VMware.VimAutomation.Core, @{ModuleName="VMware.VimAutomation.Core";ModuleVersion="6.3.0.0"}
#>

[CmdletBinding()]
param( 
    [Parameter(Mandatory=$True, ValueFromPipeline=$False, Position=0)]
    [ValidateNotNullorEmpty()]
        [String] $Clustername
        
)

Begin {
    $Validate = $True

    if (($myCluster = Get-Cluster -Name $Clustername).count -lt 1) {
       $Validate = $False
       thow "No Cluster '$myCluster' found!"
    }
  
}

Process {

    $MyView = @()
    if ($Validate -eq $True) {
  
        foreach ($myVMhost in ($myCluster | Get-VMHost)) {

            $esxcli2 = Get-ESXCLI -VMHost $myVMhost -V2
            $niclist = $esxcli2.network.nic.list.invoke()

            $nicdetails = @()
            foreach ($nic in $niclist) {

                $args = $esxcli2.network.nic.get.createargs()
                $args.nicname = $nic.name
                $nicdetail = $esxcli2.network.nic.get.Invoke($args)
                $nicdetails += $nicdetail

                }
            ForEach ($nicdetail in $nicdetails){
		        $NICReport = [PSCustomObject] @{
				        Host = $myVMhost.Name
				        vmnic = $nicdetail.Name
				        LinkStatus = $nicdetail.LinkStatus
				        BusInfo = $nicdetail.driverinfo.BusInfo
				        Driver = $nicdetail.driverinfo.Driver
				        FirmwareVersion = $nicdetail.driverinfo.FirmwareVersion
				        DriverVersion = $nicdetail.driverinfo.Version
				        }
		        $MyView += $NICReport
		        }

		}
        
       $MyView

    }
}
}

Bu script ile:

  • NIC driver versiyonu
  • Firmware versiyonu
  • PCI bilgileri
  • Uyumluluk durumu

detaylı analiz edilebilir.

Özellikle yüksek throughput ortamlarında driver/firmware uyumsuzluğu performansı dramatik etkileyebilir.

Fonksiyonun Teknik Çalışma Mantığı

Özet akış:

  1. Referans host’tan VIB listesi alınır.
  2. Cluster içindeki tüm host’lar dolaşılır.
  3. Her host için VIB listesi alınır.
  4. Compare-Object ile ID bazlı karşılaştırma yapılır.
  5. Fark sayısı hesaplanır.
  6. SideIndicator oluşturulur.
  7. PSCustomObject ile rapor üretilir.

Kritik satır:

$VibDiff = Compare-Object -ReferenceObject $RefernceVibList.ID `
                          -DifferenceObject $VibList.ID




Operasyonel En İyi Uygulamalar

✔ Referans host olarak en güncel ve doğru yapılandırılmış host’u seçin
✔ Upgrade sonrası mutlaka cluster bazlı VIB doğrulaması yapın
✔ NSX ortamlarında driver eşitliğini zorunlu kontrol edin
✔ OEM image kullanıyorsanız tüm host’larda aynı image’ı kullanın
✔ Firmware ve driver kombinasyonlarını vendor matrix ile doğrulayın

vSphere ortamlarında gerçek tutarlılık:

  • Aynı sürüm
  • Aynı build
  • Aynı VIB paketleri
  • Aynı driver versiyonları
  • Aynı NSX bileşenleri

anlamına gelir.

Validate-ESXiPackages fonksiyonu, cluster içindeki ESXi host’ların paket seviyesinde doğrulanmasını sağlayarak:

✔ Konfigürasyon risklerini azaltır
✔ Operasyonel kararlılığı artırır
✔ NSX ve storage hatalarını önler
✔ Upgrade sonrası kontrol mekanizması sunar
✔ Audit süreçlerini kolaylaştırır

Özellikle büyük ve kritik ortamlarda düzenli olarak bu kontrolün yapılması önerilir.

Validate-ESXiPackages Scirpt;

function Validate-ESXiPackages {
    <#
    .DESCRIPTION
        Compares all ESXi Host VIBs within a vSphere with a reference Hosts.

    .NOTES
        File Name  : Validate-ESXiPackages.ps1
        Author     : Markus Kraus
        Version    : 1.0
        State      : Ready

        Tested Against Environment:

        vSphere Version: 6.0 U2, 6.5 U1
        PowerCLI Version: PowerCLI 10.0.0 build 7895300
        PowerShell Version: 4.0
        OS Version: Windows Server 2012 R2

    .LINK
        https://mycloudrevolution.com/

    .EXAMPLE
        Validate-ESXiPackages -Cluster (Get-Cluster) -RefernceHost (Get-VMHost | Select-Object -First 1)

    .PARAMETER Cluster
        vSphere Cluster to verify

    .PARAMETER RefernceHost
        The VIB Reference ESXi Host
    #>
    
    [CmdletBinding()]
    param( 
        [Parameter(Mandatory=$True, ValueFromPipeline=$True, HelpMessage="vSphere Cluster to verify")]
        [ValidateNotNullorEmpty()]
            [VMware.VimAutomation.ViCore.Impl.V1.Inventory.ComputeResourceImpl] $Cluster,
        [Parameter(Mandatory=$True, ValueFromPipeline=$false, HelpMessage="The VIB Reference ESXi Host")]
        [ValidateNotNullorEmpty()]
            [VMware.VimAutomation.ViCore.Impl.V1.Inventory.InventoryItemImpl] $RefernceHost
    )
        
    Process {
        
        #region: Get reference VIBs
        $EsxCli2 = Get-ESXCLI -VMHost $RefernceHost -V2
        $RefernceVibList = $esxcli2.software.vib.list.invoke()
        #endregion
        
        #region: Compare reference VIBs
        $MyView = @()    
        foreach ($VmHost in ($Cluster | Get-VMHost)) {
    
            $EsxCli2 = Get-ESXCLI -VMHost $VmHost -V2
            $VibList = $esxcli2.software.vib.list.invoke()
            [Array]$VibDiff = Compare-Object -ReferenceObject $RefernceVibList.ID -DifferenceObject $VibList.ID

            if($VibDiff.Count -gt 0) {
                $VibDiffSideIndicator = @() 
                foreach ($Item in $VibDiff) {
                    $VibDiffSideIndicator += $($Item.SideIndicator + " " + $Item.InputObject)
                }
            }
            else {
                $VibDiffSideIndicator = $null
            }

            $Report = [PSCustomObject] @{
                    Host = $VmHost.Name
                    Version = $VmHost.Version
                    Build = $VmHost.Build
                    VibDiffCount = $VibDiff.Count
                    VibDiff = $VibDiff.InputObject
                    VibDiffSideIndicator = $VibDiffSideIndicator
                    }
            $MyView += $Report
    
        }
        #region: Compare reference VIBs

        $MyView
    }
}

Kaynak : https://github.com/vMarkusK/vSphere-Modules