什麼是 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
輸出
執行該命令後,您可以在上面的輸出中檢查兩臺伺服器是否都處於所需狀態。