当前位置: 首页 > 科技观察

通过Chef自动化配置管理Windows集群

时间:2023-03-19 20:38:47 科技观察

当服务器具有一定规模(100台以上)时,普通的ssh登录管理方式变得越来越困难。想象一下,Linux发布了针对高危漏洞的补丁。你必须在你的命令下为数百台机器更新补丁。如果没有自动化的方法,至少需要半天时间。虽然你写了大量的shell(或python、perl)脚本来实现各种自动化场景,但你最终会发现自己陷入了脚本的海洋,而管理和维护那么多脚本的成本并不高小的。你需要一个基础设施自动化工具,希望它能具备以下功能:  1。批量执行这个就不多说了!想象一下想要给每一台机器打补丁!  2。任务安排现在稍微复杂一点的应用需要部署N台服务器,在部署的过程中必须有一个依赖序列。所以从这个角度来说,任务调度肯定是必不可少的。  3。业务场景的抽象,也就是DSLization放弃使用shell(或其他语言)脚本来实现各种自动化的原因之一是这些脚本很难理解,而且除了你之外几乎所有人都无法修改。作为一个成熟的工具,自然而然的要对我们复杂的应用场景进行抽象,比如服务器节点和角色的抽象,服务器上各种安装配置操作的抽象,不同环境的抽象。通过抽象的DSL,大家很容易达成一致,一起工作。  4。由于安全机制是基础设施自动化工具,必然会包含各种敏感信息,如何脱敏也很重要。并且由于可以控制整个服务器集群,所以控制方式必须是绝对安全的。  除了这些基本的功能,当然我们也希望有更多的功能,比如脚本复用,审计功能,完善的文档等等,这里就不多说了。  类似的工具肯定已经存在了,现在市面上比较流行的开源软件有Puppet、Chef、Ansible、SaltStack等,关于它们的优缺点不是本文的重点。  提到集群管理,大家似乎都默认了Linux系统集群的管理,很少涉及到Windows集群。我认为这有两个原因。一方面,大多数公司的机器集群类型大多是Linux系统。另一方面,Windows机器在批量管理上有天然的缺陷,比如缺少各种方便的脚本命令,机器配置难以完全脚本化等。但是,Windows集群的管理是无法回避的,因为Windows集群确实存在于企业中.微软也在努力改善这些问题,比如WindowPowerShell就是为了解决校本问题。  作者上一个项目涉及数百个Windows和Linux集群的管理。Windows集群的主要操作系统是WindowsServer2008,Linux集群的主要操作系统是Ubuntu12.04。为了实现这样一个集群的自动化配置和管理,笔者积累了一些经验,特地分享给大家。  1.自动化工具的选择  在选择工具的时候,如果你发现自己处在一个很纠结的位置,可能是因为在竞争的工具中没有一个能脱颖而出,导致你难以取舍每个的优点和缺点。我也明白在工具选择上要考虑的因素太多了。其实这个项目的选择并没有经过多少波折,很快就决定使用Chef。可以简单说一下的原因是Puppet的API太不友好,Ansible和Salt对Windows的支持程度不得而知。根据我之前的经验,Chef对Windows的支持是比较成熟的。所以我们解决了这个问题,选择了Chef。  二、打造Chef生态环境  Chef既然定了,接下来要考虑很多问题。  1。使用自建ChefServer  的原因很简单,因为客户不会将自己的节点暴露给公共的ChefServer。因此,我们在企业内网搭建了一台Chef服务器,放在一台ubuntu机器上。  2.工作站选择windows机(windows7)  考虑到我们要同时管理Linux集群和Windows集群,工作站的选择也很重要。当bootstrap为节点时,工作站与linux节点的通信方式为ssh,与windows节点的通信方式为通过WinRM。如果使用Linux通过WinRM与Windows系统通信,理论上是可行的。我们可以借助一些第三方工具来实现,但是过程肯定是比较曲折的。而如果你用Windows机器来与Linux和Windows系统通信,也没有什么大问题。  3。搭建属于自己的软件仓库  对于Linux系统来说,有很多成熟的包管理工具,基本上可以一条命令安装任何软件。至于Windows系统,虽然有chocolatey等工具,但分发一些内部软件还是捉襟见肘。因此,我们选择自建软件仓库。一开始为了简单起见,搭建了一个ftp服务器作为软件仓库。稍后,我们会考虑迁移到像SonatypeNexus这样可以提供更多功能的包管理服务器。  创建一个Chefrepo并纳入源码管理的内容不是太具体,这里就不展开了。  2。使用Chef管理Windows集群  使用Chef管理Windows集群肯定没有管理Linux集群那么简单。以下是需要注意的几点。  1。配置Windows节点启用WinRM服务  WinRM服务是微软提供的远程通信服务(内置支持Windows7及之后的系统),可以简单理解为Windows版本的SSH。在Windowsserver2008R2操作系统中,WinRM服务默认是禁用的,我们需要启用它。首先,需要修改两个组策略。在GroupPolicyComputerConfiguration->Policy->WindowsComponents->WindowsRemoteManagement(WinRM)->WinRMService中,选择“Allowautomaticconfigurationoflisteners”,选择此策略为启用,修改IPv4和IPv6过滤器*。然后在“控制面板”中选择“Windows防火墙”,单击“例外”选项卡,并选中“Windows远程管理”复选框。如果您没有看到该复选框,请单击添加程序以添加Windows远程管理。(详情请参考http://www.briantist.com/how-to/powershell-remoting-group-policy/)  这两项的配置也可以通过PowerShell脚本来实现。有关详细信息,请参阅本文https://powertoe.wordpress.com/2011/05/16/enable-winrm-with-group-policy-but-use-powershell-to-create-the-policy/。然后可以启用和配置  WinRM。只需在PowerShell终端中输入winrmquickconfig-q。此外,Chef还推荐了WinRM的一些高级配置,详情请参考https://github.com/Chef/knife-windows#requirementssetup。  2。使用windowscookbook  windowscookbook是大厨专门为windows平台编写的cookbook。它包含了很多针对windows平台特点的函数,是操作windows平台不可或缺的工具。比如解压文件、执行批处理(PowerShell)命令、安装身份验证、安装和卸载windows包、配置和执行计划任务……  使用起来也非常简单,通过大厨超市即可安装。有关详细信息,请参阅https://supermarket.chef.io/cookbooks/windows#knife。如果需要在其他cookbook中使用本cookbook的模块,只需在其他cookbook的metadata.rb中添加depends'windows'即可。  3。升级Windows节点上的PowerShell版本  PowerShell之于Windows就像shell之于Linux。WindowsServer2008R2默认的PowerShell版本是3.0,最好升级到高级版本。https://github.com/opscode-cookbooks/powershell中的cookbook可以方便地升级和配置Windows节点PowerShell,安装各种PowerShell模块,执行PowerShell脚本等。  4.实现软件的静默安装  Linux上的每一种软件基本上都有通过命令行静默安装的方式。Windows下的软件并不总是这样。如果软件打包为.msi,您可以使用WindowsInstaller静默安装。如果是.exe形式的打包,就不用慌了。大家可以仔细分析是否以inno、NSIS、installshield等方式打包,然后根据各个方式的静默方式实现自动安装。如果以上都不适用,您可以分析该软件是否为绿色软件,安装后尝试将整个文件夹打包放在软件仓库中,以后安装时只需解压即可。如果软件既没有标准化的打包方式,又没有绿色软件,那就比较麻烦了。需要分析安装后创建的文件并执行那些脚本,然后尝试将这些操作做成命令行(不过这样的软件很少见,不用太担心)。  5.使用pushjobs功能  通常我们需要对节点进行批量操作,但是通过chef-client的方式功能有限。Chef提供了pushjobs等扩展功能,让我们可以对节点进行任意的批量操作。有关详细信息,请参阅https://docs.chef.io/push_jobs.html。  6。熟练使用PowerShell脚本  之前说过,PowerShell之于Windows就像Shell之于Linux。WindowsPowerShell提供了对COM组件和WMI组件的完全访问,可以轻松调用.netframework框架中的函数,还包括强大的文档。如果你想配置一个DHCP服务器,或者配置一个IIS网站服务,或者修改注册表,使用PowerShell可以轻松让你达到目的,彻底摆脱图形界面。  总的来说,Chef对Windows平台的支持还是比较完善的。如果要实现Windows集群的自动化管理,那么Chef是一个可行的方案。至于其他的自动化工具,笔者有时间会深入研究,然后出一篇报告。