不要反对其他虚拟化平台进入你的数据中心。企业往往需要更低的成本或者需要找到替代的解决方案,IT专业人员在管理异构虚拟环境时往往面临挑战。不要让这一挑战超出必要的限度。作为一名IT专业人士,应该关注统一的管理平台,减少学习曲线,始终保持对控制异构数据中心大量系统的灵活性。
图形管理工具是解决之道吗?
在了解了不同厂商虚拟化平台之间的差异后,你面临的挑战就是如何对这些平台进行管理。你不想在不满足需求的工具上浪费时间以及投资成本。
很多IT专业人员首先倾向于找到一款GUI工具来帮助他们管理整个异构数据中心。图形工具有其优点:易于使用,包括了完成复杂任务的向导而且提供了图形化展示功能。
很多虚拟化平台厂商比如VMware和微软,已经推出了GUI管理工具,为管理其他厂商的产品提供了帮助。这些工具提供了统一的界面,减少了混淆因素及培训成本,第三方管理产品也提供了同样的功能。尽管具有界面统一的优点,但使用GUI管理工具要考虑其存在的一些不足之处:
? 你只能执行厂商已经开发出来的GUI管理任务,在执行未开发出来的任务时存在困难。
? 当一家厂商试图通过图形界面管理其他厂商的产品时,会遇到跨平台管理问题而且存在数不清的限制。
? 图形管理工具通常无法提供众多自动化功能,任务必须重复执行多次。
? 当需要使用时,在客户端上安装GUI工具并非总是很轻松。
对特定图形管理工具的优缺点进行权衡需要花一些时间而且要进行测试。对于图形化工具来说往往是这样。然而,作为一名需要在多种平台下工作并需要实现自动化的IT专业人员,我并不希望在限制我才能的工具上浪费时间。
存在功能以及灵活性最强大的选择
我关注于使用PowerShell而不是浪费时间来研究图形管理工具。在你开始对我表示愤怒之前,让我通过一个例子来列举PowerShell的一些优点与不足。
PowerShell可以跨多个虚拟化平台。cmdlets适用于大多数流行的虚拟化平台,包括VMware(PowerCLI)、微软(SCVMM和Hyper-V)以及Citrix(XenDesktop)。针对企业需要处理所有问题PowerShell都提供了足够的灵活性。告别了使用GUI工具时所存在的限制,而且你还可以使用自动化来消除在使用图形工具时经常要执行的重复性任务。自动化同样排除了人为错误的可能性。
当然,使用shell和脚本语言比如PowerShell时同样存在缺点。你可以请教任意一名有经验的Unix管理员,学习并使用工具可能会存在困难,而且可能要投入大量的精力。目前有一些很不错的资源可以利用——包括图书、视频以及培训班——但是你需要坐下来练习而不仅仅是搜集信息。
使用PowerShell需要做一些研究。使用一些简单的命令并不能解决所有问题。很多时候,你需要研究问题,然后编写脚本解决。有时可能要在MSDN网站泡上几个小时,还需要学习开发技能。你不需要成为一名全能的开发人员,但是却需要学习脚本以及编程技能。
一旦了解了哪种管理工具更适合你所在组织以及虚拟环境后,很多IT专业人员会选择PowerShell来管理异构的数据中心。
开始跨平台管理
下面这些例子通过在PowerShell命令提示符下输入了一些命令,描述了PowerShell能够提供的部分功能。
首先,通过加载多个模块而非提供额外的cmdlets,PowerShell提供了灵活的以及可扩展的管理功能。如果厂商已经创建了相应的模块而且你已经在本地计算机上安装了这些工具,那么就可以加载并使用这些模块来管理异构的数据中心了。下面这个例子说明了如何加载用于管理VMware的cmdlets:
PS> Add-PSSnapin VMware*
你可以加载多个模块并针对多个产品创建自动化的管理脚本。在下面这个例子中,我加载了VMware和微软SCVMM cmdlets。请注意:多个厂商使用同样的cmdlet名时可能会存在冲突。如果cmdlets属于一个模块,那么import-Module cmdlet提供了一个参数 -prefix,通过在cmdlet之前增加前缀可以避免冲突:
PS> Add-PSSnapin VMware*
PS> import-Module –Name VirtualMachineManager -Prefix MS
通常我不想在我的电脑上安装管理工具。PowerShell有一个PowerShell Remoting功能,通过该功能你可以借用服务器上已经安装的cmdlets。出现在你计算机上的cmdlets就像安装在本地计算机上一样,更准确地说是远程服务器上安装的cmdlets的一个快捷方式。下面这个例子调用了适用于VMware、Citrix以及SCVMM的远程cmdlets。然而在你做实验时,会发现并非所有厂商都为此做了规划,而且可能会发现某些cmdlets无法使用。
#VMware
$VWsession=New-PSSession -ComputerName "NameOfVMWareServer"
Invoke-Command -Session $VWsession -scriptBlock {Add-PSSnapin VMware*}
import-PSSession -Session $VWsession -Module VMware* -Prefix VW
#Citrix
$CXSession=New-PSSession -ComputerName "NameOfCitrixZenDesktopServer"
Invoke-Command -Session $CXSession -scriptBlock {Add-PSSnapin Citrix*}
import-PSSession -Session $CXSession -Module Citrix* -Prefix CX
#MS SCVMM
$MSsession=New-PSSession -ComputerName "NameOfSCVMMServer"
Invoke-Command –Session $MSSession -scriptBlock {import-Module –Name VirtualMachineManager}
import-PSSession -Session $MSsession -Module VirtualMachineManager -Prefix MS