Buenas! Seguimos con la serie de post sobre automatización de procesos sobre vDS con PowerCLI. En este post, vamos a ver como crear y configurar la red de vMotion para múltiples NICs en nuestro vDS.
En primer lugar, entender en que consiste el MultiNIC vMotion. Para ello, configuraremos el Teaming de los vDPortgroup para obtener una red de vMotion con múltiples NICs. En la imagen podemos ver como sería el funcionamiento lógico:

Bien, vamos a ponernos manos a la obra. En el anterior post, creamos nuestro vDS para MGMT, en este caso, yo voy a utilizar este vDS para la red de vMotion. Como recordábamos teníamos dos Uplinks, y para la red de vMotion, vamos a añadir, dos Uplinks más. Para ello, ejecutaremos el siguiente código:
$VDS = Get-VDSwitch -Name "vDS-J2K-Mgmt" # Aumentamos en 4 Uplinks el vDS que habíamos creado Set-VDSwitch -NumUplinkPorts 4 -VDSwitch $vDS
Ahora crearemos los dvPortgroup para la red de vMotion. Para ello:
, $vDPG_vMotion1 = Get-vDSwitch $vDS | New-VDPortgroup -VDSwitch $VDS -Name "vDP-J2K-vMotion1" $vDPG_vMotion2 = Get-vDSwitch $vDS | New-VDPortgroup -VDSwitch $VDS -Name "vDP-J2K-vMotion2"
Ahora configuraremos el Teaming de los vDPortgroup para obtener una red de vMotion con múltiples NICs, tal como hemos podido ver en la imagen anterior. Primero, asignaremos los interfaces de red de nuestro ESXi a los dvUplinks. Vamos a suponer que las vmnic 2 y 3 se van a dedicar como interfaces para vMotion (doy por hecho que los interfaces 0 y 1 (dvUplink1 y 2) son para Management (En próximos Post os explicaré como migrar las redes de Management mediante PowerCLI 😉 )). Para ello asignaremos las vmnic a los dvUplinks de la siguiente manera:
$UPLINK3 = Get-VMHost $ESXi | Get-VMHostNetworkAdapter -Physical -Name vmnic2 $UPLINK4 = Get-VMHost $ESXi | Get-VMHostNetworkAdapter -Physical -Name vmnic3 $VDS | Add-VDSwitchPhysicalNetworkAdapter -VMHostNetworkAdapter $UPLINK3 -Confirm:$false $VDS | Add-VDSwitchPhysicalNetworkAdapter -VMHostNetworkAdapter $UPLINK4 -Confirm:$false

Para finalmente configurar el Teaming Policy, lo realizaremos de la siguiente manera:
Get-VDSwitch $VDS | Get-VDPortgroup -Name$vDPG_vMotion1 | Get-VDUplinkTeamingPolicy |Set-VDUplinkTeamingPolicy -ActiveUplinkPort 'dvUplink3' -StandbyUplinkPort 'dvUplink4' -UnusedUplinkPort 'dvUplink1','dvUplink2', Get-VDSwitch $VDS | Get-VDPortgroup -Name $vDPG_vMotion2 | Get-VDUplinkTeamingPolicy |Set-VDUplinkTeamingPolicy -ActiveUplinkPort 'dvUplink4' -StandbyUplinkPort 'dvUplink3' -UnusedUplinkPort 'dvUplink1','dvUplink2'
Ahora toca configurar los vmkernel de vMotion. Para añadir una configuración más completa, vamos a configurar el TCP-IP Stack para la red de vMotion. Recordemos que para realizar vMotion Cross vCenter es necesario configurar TCP-IP Stack para los vmk de vMotion, para poder enrutar correctamente el tráfico de vMotion. Para ello, vamos a utilizar dos funciones, que harán lo siguiente:
1ª Función «SetConfig-Netstack«: Su función es configurar el NetStack de vMotion, para ello deberemos especificar la IP de Gateway para red de vMotion, IP dns server y dominio. A esta función, debemos pasarle las variables ESXi y vmkernel.
function SetConfig-Netstack ([string]$esxname,[string]$ipDevice) { # Variables a configurar $stackName = 'vmotion' $ipGateway = 'My_Gateway_IP' $dnsServers = 'My_DNS_Server' $domainName = 'Just2Kloud.com' $esx = Get-VMHost -Name $esxName $netSys = Get-View -Id $esx.ExtensionData.ConfigManager.NetworkSystem $stack = $esx.ExtensionData.Config.Network.NetStackInstance | where{$_.Key -eq $stackName} $config = New-Object VMware.Vim.HostNetworkConfig $spec = New-Object VMware.Vim.HostNetworkConfigNetStackSpec $spec.Operation = [VMware.Vim.ConfigSpecOperation]::edit $spec.NetStackInstance = $stack $spec.NetStackInstance.RouteTableConfig = New-Object VMware.Vim.HostIpRouteTableConfig $route = New-Object VMware.vim.HostIpRouteConfig $route.defaultGateway = $ipGateway $route.gatewayDevice = $ipDevice $spec.NetStackInstance.ipRouteConfig = $route $dns = New-Object VMware.Vim.HostDnsConfig $dns.Address = $dnsServers $dns.Dhcp = $false $dns.HostName = "" $dns.DomainName = "" $dns.SearchDomain = $domainName $spec.NetStackInstance.DnsConfig = $dns $config.NetStackSpec += $spec $netsys.UpdateNetworkConfig($config,[VMware.Vim.HostConfigChangeMode]::modify) }
2ª Función «Migrate-vMotion«: Crearemos dos vmkernel de vMotion en un vSwitch Standard temporal, el cuál será borrado una vez se realice la migración a vDS. Para esta función le pasaremos el ESXi y las IP’s de vMotion.
function Migrate-vMotion ([string]$ESXi,[string]$ip_vm1,[string]$ip_vm2) { $esxcli = Get-EsxCli -VMHost (Get-VMHost $ESXi) -V2 # Add a Stack TCP IP for vmotion interfaces $esxcli.network.ip.netstack.add.Invoke(@{netstack = ‘vmotion’}) | Out-Null # Create VSS-Temporal $vss = New-VirtualSwitch -Name 'vss_temporal' -VMHost (Get-VMHost $ESXi) | Out-Null # Create Portgroups vMotion $esxcli.network.vswitch.standard.portgroup.add.Invoke(@{portgroupname = ‘vMotion1-Temp’; vswitchname = ‘vss_temporal’}) | Out-Null $esxcli.network.vswitch.standard.portgroup.add.Invoke(@{portgroupname = ‘vMotion2-Temp’; vswitchname = ‘vss_temporal’}) | Out-Null # Add the vmknics for vMotion1 y vMotion2 $esxcli.network.ip.interface.add.Invoke(@{interfacename = 'vmk2'; portgroupname = 'vMotion1-Temp'; netstack = 'vmotion'}) | Out-Null $esxcli.network.ip.interface.add.Invoke(@{interfacename = 'vmk3'; portgroupname = 'vMotion2-Temp'; netstack = 'vmotion'}) | Out-Null # Config vmk IPv4 $mask = '255.255.255.0' $esxcli.network.ip.interface.ipv4.set.Invoke(@{interfacename = 'vmk2';netmask= $mask ;ipv4= $ip_vm1; type = 'static'}) | Out-Null $esxcli.network.ip.interface.ipv4.set.Invoke(@{interfacename = 'vmk3';netmask= $mask ;ipv4= $ip_vm2; type = 'static'}) | Out-Null # Config netstack gateway. SetConfig-Netstack -esxname $ESXi -ipDevice 'vmk2' SetConfig-Netstack -esxname $ESXi -ipDevice 'vmk3' }
Por último, nos faltaría realizar la migración de los vmkernel de vSS a vDS. Lo haríamos de la siguiente manera:
Write-Host "Migrate vMotion MultiNIC VSS to" $VDS -fo Yellow $DPG = Get-VDPortgroup -name "vDP-J2K-vMotion1" -VDSwitch $VDS $VMK = Get-VMHostNetworkAdapter -Name vmk2 -VMHost $ESXi Set-VMHostNetworkAdapter -PortGroup $DPG -VirtualNic $VMK -confirm:$false | Out-Null $DPG = Get-VDPortgroup -name "vDP-J2K-vMotion2" -VDSwitch $VDS $VMK = Get-VMHostNetworkAdapter -Name vmk3 -VMHost $ESXi Set-VMHostNetworkAdapter -PortGroup $DPG -VirtualNic $VMK -confirm:$false | Out-Null
Tras los pasos que hemos realizado, nos quedará la siguiente foto:

Espero que os haya sido de ayuda!
Comparte si te gusta 🙂