PowerCLI是VMware开发的基于微软(MSFT)的PowerShell的命令行管理vSphere的实现,因此在批量化操作方面CLI会减轻很多GUI环境下的繁琐重复劳作。
现有场景中有大量的物理主机已经安装好的ESXi,并且可以被vCenter所管理,由于默认情况下可供管理的那个Manage管理网卡是不开启vMotion的,因此我们需要借用这个Manage管理网卡来开启vMotion功能,从而实现集群内的HA功能。
说明:一般情况下,VMware建议,条件允许的情况下每个网卡的功能最好能独立且分开,有专门跑iSCSI的网卡,有专门组建业务网络的业务网卡,有专门用来节点管理的Manage网卡,有专门用来实现高可用HA和迁移vMotion的网卡。
通过官方文档,我们很容易找到命令行开启vMotion的方法(link:https://www.vmware.com/support/developer/PowerCLI/PowerCLI41U1/html/Set-VMHostNetworkAdapter.html ):
Get-VMHost Host | Get-VMHostNetworkAdapter -VMKernel | Set-VMHostNetworkAdapter -VMotionEnabled $true
该命令可以实现对Get-VMHost到的所有Host主机下的具有VMkernel的网卡进行vMotion的开启
现有场景需要对特定的HOST进行操作,因此语句我们需要更改一下:
Connect-VIServer –Server 172.5.140.201
get-vmhost -name 172.5.140.160 | Get-VMHostNetworkAdapter -VMKernel | Set-VMHostNetworkAdapter -VMotionEnabled $true
该组合实现登陆一个vCenter服务器172.5.140.201 之后,对该管辖范围内的172.5.140.160主机单独进行vMotion的开启
这个场景中有大量的新加入主机需要这般操作,因此我们需要准备一个包含这些主机IP文件列表我命名为“hosts.txt”文件,因此我们对语句进行了一些修改:
Connect-VIServer –Server 172.5.140.201
Get-Content hosts.txt | Foreach-Object {get-vmhost -name $_ | Get-VMHostNetworkAdapter -VMKernel | Set-VMHostNetworkAdapter -VMotionEnabled $true}
该组合实现登陆到vCenter之后,在这个hosts.txt内逐行寻找匹配项,通过PowerShell的Foreach-Object 进行自动填入“$_”关键信息,完成批量自动化开启vMotion
Figure 1需要进一步确认的对话环节
这种输出结果我们会有多次的确认,如vCenter的SSL信息的警告内容显示、VMKernel的多个确认,这里都需要按下更多次的回车才能完成。
因此我们想让屏幕输出更简洁,对语句做了如下修改:
Connect-VIServer –Server 172.5.140.201 -WarningAction 0
Get-Content hosts.txt | Foreach-Object {get-vmhost -name $_ | Get-VMHostNetworkAdapter -VMKernel -name vmk0 | Set-VMHostNetworkAdapter -VMotionEnabled $true -Confirm:$false}
该组合实现了忽略SSL信息警告内容,只在vmk0上开启vMotion,并且忽略确认 是的返回结果更加清爽
注意:这里需要注意一下,如果您的配置环境不是将vmk0上开启vMotion的话,请使用Get-VMHostNetworkAdapter -VMKernel命令获取当前所连接的vCenter内的所有ESXi主机上的VMKernel信息。
-=EOB=-