Automatizar procesos sobre vDS con PowerCLI – Parte 2 – Migración Management ESXi a vDS

Vamos con el segundo post de la serie de automatización de procesos sobre vDS con PowerCLI. En este post, vamos a ver varios procesos importantes, que podemos integrar en un script de configuración masiva de esxi. En el anterior post, vimos cómo asignar interfaces de red de los ESXi a los Uplinks del vDS en orden. En este post, vamos a ver cómo asignar un interfaz a un Uplink en concreto. Lo vamos a ver, como proceso para poder realizar la migración del vmkernel de management de nuestros esxi de vSS a vDS.

Primero, vamos a ponernos en situación para tratar de entenderlo. En la siguiente imagen podemos ver la foto inicial de nuestro entorno. Tenemos por ejemplo, 3 ESXi, con dos interfaces de red cada uno, en este caso, sería tras una instalación y configuración básica de los ESXi, en la cual la vmnic0, estuviera añadida al vSwitch Standard, con un vmkernel para MGMT. La vmnic1 no está asignada aún. También, ya tenemos creado nuestro vDS, con 2 Uplinks. En el post anterior, vimos como añadir Host ESXi a nuestro vDS.

Foto inicial – Migración MGMT

Lo primero, es crear nuestro vDPortgroup que posteriormente asignaremos cuando migremos el vmkernel de MGMT de nuestro ESXi. Para ello, ejecutaremos el siguiente comando:

$VDS = Get-VDSwitch -Name «vDS-J2K-Mgmt»

$pg_mgmt = New-VDPortgroup -VDSwitch $VDS -Name «vDP-J2K-Mgmt» | Out-Null #-VlanId $id_vlan

También vamos a configurar el Teaming Policy para nuestro vDPortgroup. Primero, dejaremos como activo, el Uplink2, ya veremos el por qué. Para ello:

Get-VDSwitch $VDS | Get-VDPortgroup -Name | Get-VDUplinkTeamingPolicy |Set-VDUplinkTeamingPolicy -ActiveUplinkPort ‘dvUplink2’ -StandbyUplinkPort ‘dvUplink1’ -LoadBalancingPolicy LoadBalanceSrcId

Foto creación vDPortgroup para Mgmt

El siguiente paso, será asignar la vmnic1 de nuestros ESXi al Uplink2. Lo haremos de la siguiente manera, utilizando la siguiente función

**Si queremos hacerlo para todos los ESXi, llamaremos a esta función desde un bucle para cada ESXi.

function Migrate-MGMT ([string]$esxName,[string]$vdsName)
{

        $pnicName = 'vmnic1'

        $uplinkName = 'dvUplink2'

        $esx = Get-VMHost -Name $esxName

        $vds = Get-VDSwitch -Name $vdsName -VMHost $esx

        Write-Host "Adding first uplink of ESXi $esx .... to vDS $vds -->" -NoNewline

        $uplinks = Get-VDPort -VDSwitch $vds -Uplink | where {$_.ProxyHost -like $esxName}
        $netSys = Get-View -Id $esx.ExtensionData.ConfigManager.NetworkSystem

        $config = New-Object VMware.Vim.HostNetworkConfig

        $proxy = New-Object VMware.Vim.HostProxySwitchConfig

        $proxy.Uuid = $vds.ExtensionData.Uuid

        $proxy.ChangeOperation = [VMware.Vim.HostConfigChangeOperation]::edit

        $proxy.Spec = New-Object VMware.Vim.HostProxySwitchSpec

        $proxy.Spec.Backing = New-Object VMware.Vim.DistributedVirtualSwitchHostMemberPnicBacking

        $pnic = New-Object VMware.Vim.DistributedVirtualSwitchHostMemberPnicSpec

        $pnic.PnicDevice = $pnicName

        $pnic.UplinkPortKey = $uplinks | where{$_.Name -eq $uplinkName} | Select -ExpandProperty Key

        $proxy.Spec.Backing.PnicSpec += $pnic

        $config.ProxySwitch += $proxy

        $netSys.UpdateNetworkConfig($config,[VMware.Vim.HostConfigChangeMode]::modify) | Out-Null

        Write-Host "[OK] Added first dvUplink to vDS $vds" -fo Green
    
}

Tras lanzar la función, estaremos en la siguiente situación:

Foto tras añadir vmnic1 a Uplink2

Lo siguiente sería, migrar el vmkernel de Mgmt a nuestro vDS. Para ello ejecutaremos lo siguiente:

# Migrate VMkernel Management to VDS - Modify vmk number
     Write-Host "Migrating vmkernel to" $VDS -fo Yellow -NoNewline          
     $DPG = Get-VDPortgroup -name "vDP-J2K-Mgmt" -VDSwitch $VDS
     $VMK = Get-VMHostNetworkAdapter -Name vmk0 -VMHost $ESXi
     Set-VMHostNetworkAdapter -PortGroup $DPG -VirtualNic $VMK -confirm:$false | Out-Null
     Write-Host "[OK] Migrated vmkernel to" $VDS -fo Green

Por último, nos quedaría migrar la vmnic0 de cada ESXi al Uplink de nuestro vDS. Para ello:

 # Migrate vmnic0 to VDS - After migrate vmk0
            Write-Host "Adding vmnic0 to" $VDS -fo Yellow -NoNewline
            $VMNIC = Get-VMHost $ESXi | Get-VMHostNetworkAdapter -Physical -Name vmnic0
            $VDS | Add-VDSwitchPhysicalNetworkAdapter -VMHostNetworkAdapter $VMNIC -Confirm:$false 
            Write-Host "[OK]" -fo Green

Y la foto que nos quedaría sería la siguiente:

Y ya para terminar de manera elegante, eliminaremos el vSwitch Standard que ya no lo utilizaremos y reconfiguraremos el Teaming Policy del vDPortgroup de Mgmt.

# Remove Old vSwitch - Change vSwitch to remove
        #Store old standard vSwitch
        $VSS = Get-VirtualSwitch -VMHost $ESXi -Name "vSS0"
        Write-Host "Removing old standard switch" -fo Yellow -NoNewline
        Remove-VirtualSwitch -VirtualSwitch $VSS -confirm:$false
        Write-Host "[OK]" -fo Green

# Reconfigure the Failover Uplinks to vDPortgroup vDP-J2K-Mgmt
        Write-Host "Reconfiguring Teaming Failover for MGMT..." -fo Yellow 
        Get-VDSwitch $VDS | Get-VDPortgroup -Name "vDP-J2K-Mgmt" | Get-VDUplinkTeamingPolicy |Set-VDUplinkTeamingPolicy -ActiveUplinkPort 'dvUplink1','dvUplink2'
        Write-Host "[OK]" -fo Green -NoNewline

Espero que os sea de ayuda! En el próximo post de la serie veremos como configurar vMotion bajo vDS para crear MultiNIC vMotion y también veremos como configurar TCP-Netstack para Cross vCenter vMotion bajo vDS.

Comparte si te gusta 🙂

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.