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

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告