什么是 PowerShell Desired State Configuration?
尽管 DSC 是一个非常大的主题,但我们将在本文中快速总结它,其中包含所需的概念,以了解它究竟是什么以及我们如何实现它。
PowerShell Desired State Configuration (DSC) 是一种基础设施自动化工具,用于基础设施即代码 (Iaac)。此外,DSC 还可以用作清单管理工具,例如获取服务器上的特定清单(如果存在的话)。PowerShell 和 DSC 是不同的东西。但是,可以使用 PowerShell 实现 DSC。
PowerShell 脚本使用命令式模型,这意味着我们需要编写脚本来说明我们将如何实现这些事情,而 DSC 是声明式模型,这意味着它只显示我们需要执行什么,而不是如何执行。
例如,对于邮政服务器配置,我们需要将服务器加入特定域,创建一个本地用户,并在服务器上安装 IIS 功能。使用 DSC,我们只需要使用 DSC 资源声明所有项目,而使用脚本,我们需要编写代码来说明如何完成。
PowerShell DSC 适用于 .Net Framework 版本(4.0 和 5.0),而微软已在 .Net Core 版本(6.0 及更高版本)中将其弃用,但 Azure DSC 在云中作为基础设施代码表现出色。
本地配置管理器 (LCM)
DSC 使用 LCM 引擎来维护远程计算机的状态。因此,它是已声明的配置和远程计算机之间的桥梁。如果使用拉取方法(稍后解释),LCM 会定期轮询远程服务器以检查它们是否处于所需状态,如果不是,则调用配置以使其进入所需状态。
结构
Configuration DSCConfig{ Node ("Node1","Node2","Node3"){ DSCResource ResourceName1{ #Configuration Parameters } DSCResource ResourceName2{ #Configuration Parameters } } }
示例
Configuration MyDSCConfig{ Node ("Test1-Win2k12","Test1-Win2k16"){ Service WinRMStatus{ Name = 'WINRM' State = 'Running' StartupType = 'Automatic' } File IISFile{ Type = 'File' DestinationPath = 'C:\IIS\Config.html' SourcePath = '\addc\shared\Config.html' Ensure = 'Present' Force = $true } } }
在此示例中,配置了两个节点和两个资源 Service 和 File。第一个资源 Service 确保 WINRM 应在两台服务器上运行,并且应处于自动状态。第二个资源 File 确保 Config.html 文件应存在于两台服务器上的目标路径上。
您还可以为每个单独的节点配置一个配置,如下所示。
Configuration MyDSCConfig{ Node Test1-Win2k12 { Service WinRMStatus{ Name = 'WINRM' State = 'Running' StartupType = 'Automatic' } } Node Test1-Win2k16 { File IISFile{ Type = 'File' DestinationPath = 'C:\IIS\Config.html' SourcePath = '\addc\shared\Config.html' Ensure = 'Present' Force = $true } } }
如果有多个节点,您可以提供一个存储节点的文本文件,并像在 PowerShell 脚本中一样使用 foreach 循环。
编译配置
当我们编译上述 DSC 脚本时,它会为 Node 块中给定的每个节点创建管理对象格式 (MOF) 文件。要编译,我们需要编写配置的名称,并提供生成 MOF 文件的路径。例如:
MyDScConfig -OutputPath C:\Scripts\DSC\DSCOut
将上述配置加载到内存后,它将在指定位置生成 MOF 文件。
Directory: C:\Scripts\DSC\DSCOut Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 10/18/2020 2:10 AM 1964 Test1-Win2k12.mof -a---- 10/18/2020 2:10 AM 2066 Test1-Win2k16.mof
MOF 文件执行
您可以使用两种方法在远程节点上执行 MOF 文件。
推送方法
拉取方法
推送方法 - 此方法是将配置推送到节点的最简单方法。要推送 MOF 文件以便在远程节点上执行,我们需要使用 StartDSCConfiguration 命令提供 MOF 文件的路径。当此命令运行时,远程节点会立即开始应用配置。此方法的缺点是,如果服务器脱机,则以后无法推送配置。
拉取方法 - 使用此方法,我们需要一台额外的服务器来托管配置。我们大多使用 SMB 共享服务器。在此方法中,服务器会持续轮询远程节点,如果服务器脱机,则在下一个间隔内将 MOF 文件发送到服务器,直到服务器上线。
应用配置
在本文中,我们将使用拉取方法来应用配置。为此,可以使用 Start-DSCConfiguration 命令。请参见下面的示例。
Start-DscConfiguration -Path C:\Scripts\DSC\DSCOut -Verbose
您将看到如下输出。
请注意此处的两个属性 - State 和 HasMoreData。其状态为运行,并且在输出中存储了更多数据。如果我们在同一个 DSC 脚本中使用上述命令,则使用 -Wait 参数,以便 DSC 将等待启动配置,直到 MOF 文件加载到内存中。
让我们检查作业状态。这里的作业 ID 为 1000,作业名称为 Job1000,因此我们将检索其作业。
Get-Job -Id 1000 | Select -ExpandProperty ChildJobs
输出
您可以看到这两个作业都已完成。现在,我们可以使用 TestDSCConfiguration 命令测试配置。
Test-DscConfiguration -Path C:\Scripts\DSC\DSCOut -Verbose
输出
运行该命令后,您可以在上面的输出中检查两台服务器是否都处于所需状态。