什么是 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

您将看到如下输出。

请注意此处的两个属性 - StateHasMoreData。其状态为运行,并且在输出中存储了更多数据。如果我们在同一个 DSC 脚本中使用上述命令,则使用 -Wait 参数,以便 DSC 将等待启动配置,直到 MOF 文件加载到内存中。

让我们检查作业状态。这里的作业 ID 为 1000,作业名称为 Job1000,因此我们将检索其作业。

Get-Job -Id 1000 | Select -ExpandProperty ChildJobs

输出

您可以看到这两个作业都已完成。现在,我们可以使用 TestDSCConfiguration 命令测试配置。

Test-DscConfiguration -Path C:\Scripts\DSC\DSCOut -Verbose

输出

运行该命令后,您可以在上面的输出中检查两台服务器是否都处于所需状态。

更新于:2020年11月2日

浏览量:335

开启您的职业生涯

完成课程获得认证

开始学习
广告