Hai mai pensato di provare DSC ma ho sentito che la curva di apprendimento è troppo ripida? O forse non ti sei mai visto usarlo in produzione, quindi non si è preoccupato?
L'utilizzo di DSC non deve essere difficile o complesso, e non hai bisogno di un'infrastruttura gigantesca per farne valere la pena. Questo post parlerà di DSC e di come iniziare, e include esempi di come iniziare applicandolo su piccola scala nella produzione.
Cos'è DSC?
Le impostazioni di stato desiderate (DSC) è un sistema di gestione della configurazione integrato in Windows e consente di configurare il sistema come codice. Utilizza una configurazione scritta in PowerShell che viene quindi convertita in un formato di oggetto gestito (MOF).
Il file MOF viene quindi letto e applicato dal servizio Local Configuration Manager sul nodo di destinazione (computer).
La configurazione creata ed eseguita utilizza DSC differenti si intende a partire dal Moduli DSC. I moduli DSC sono come un normale modulo PowerShell e le risorse sono le loro funzioni. Come esempio, puoi installarli usando Install-Module
, e sono memorizzati di seguito nel PSModulePath.
Per cosa posso usare DSC?
La parte più difficile di DSC per molti è trovare casi d'uso. Le persone tendono a parlare e scrivere di DSC solo quando si tratta di orchestrare e far girare grandi locali, o test e QA per diverse applicazioni, che è un argomento lontano per molti amministratori.
Possiamo usare DSC per le nostre routine quotidiane e molto altro, senza dover ristrutturare tutta la nostra organizzazione. Ho compilato un elenco di alcune aree che puoi automatizzare completamente o parzialmente con DSC:
Esempio: leggere e scrivere una configurazione DSC
Alcune righe di DSC possono eguagliare centinaia di righe con PowerShell grezzo, ecco perché può essere così incredibilmente potente.
Una configurazione DSC consiste principalmente di 2 parti: Configurazione DSC e dati di configurazione.
Dati di configurazione (che sono spiegati di seguito) può essere incluso esternamente, generalmente da un file PSD, o essere incluso nel file di configurazione. L'approccio consigliato e più semplice da mantenere è includerlo da un file separato.
Prossimo, mostra un esempio di come creare un MOF DSC che scarica e installa un MSI generico quando applicato:
Configuration MyDSCConfiguration {
# Import DSC modules with resources to use in the configuration
Import-DscResource -ModuleName PSDesiredStateConfiguration
Import-DscResource -ModuleName xPSDesiredStateConfiguration -ModuleVersion "8.10.0.0"
##############################################
# Creates configuration for the server fileserver-1
##############################################
Node "fileserver-1" {
# Create C:ProgramDataSoftwarePackages to download files to on all nodes
File SoftwarePackagesDirectory {
# Identifier "SoftwarePackagesDirectory" using the DSC resource "File" from DSC module "PSDesiredStateConfiguration"
DestinationPath = "C:ProgramDataSoftwarePackages"
Type = "Directory" # Is a directory
Ensure = "Present" # Ensure that it exists
}
# Download MSI
xRemoteFile DownloadBackupAgent {
# The xRemoteFile resource from xPSDesiredStateConfiguration DSC module used to download an MSI through HTTP
DependsOn = "[File]SoftwarePackagesDirectory" # Tells DSC to not run this if the previous step hasn't completed successfully
Uri = "http://web.contoso.com/packages/backupagent.msi" # Where to download the remote file from
DestinationPath = "C:ProgramDataSoftwarePackagesBackupAgent.msi" # Where to save the downloaded file
}
# Install MSI
xMsiPackage InstallBackupAgent {
# The xMsiPackage resource from xPSDesiredStateConfiguration DSC module used to install the MSI we just downloaded
DependsOn = "[xRemoteFile]DownloadBackupAgent" # Depends on previous step being completed before starting
ProductId = "d29c3fa9-e03e-40e0-a6ed-556c6f05476a" # The MSI package ProductID
Path = "C:ProgramDataSoftwarePackagesBackupAgent.msi" # Path to the MSI file we just downloaded
Ensure = "Present" # Ensure that it's present (install the MSI), 'Ensure = "Absent"' would uninstall the MSI
}
}
}
Dopo aver eseguito questo codice, creare una funzione di configurazione nella sessione corrente di PowerShell che può essere utilizzata. Crea una sottocartella con lo stesso nome della configurazione in cui salvi i file MOF generati:
PS51> MyDSCConfiguration
Directory: C:TutorialsDSCMyDSCConfiguration
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019-10-28 16:38 3952 fileserver-1.mof
Puoi applicare tutte le impostazioni DSC nella cartella MyDSCConfiguration al tuo host eseguendo:
PS51> Start-DscConfiguration -Path .MyDSCConfiguration -Wait
Usando DSC con ConfigurationData
I dati di configurazione contengono i dati di configurazione per la configurazione DSC. Le informazioni includono un nome di nodo (nome del computer) e può contenere altri dati come informazioni su come installare un pacchetto MSI o valori delle chiavi di registro, eccetera. Questo ci offre un approccio dinamico e più versatile al DSC., in modo che possa essere riutilizzato. e facilmente modificabile.
Diciamo che hai questi tre server e ognuno ha bisogno di una combinazione unica di pacchetti:
- fileserver-1
- database-1
- Bisogni: Agente di backup, BackupAgent-DatabaseAddon
- server applicazioni-1
- Bisogni: Agente di backup, Agente di monitoraggio
L'approccio migliore è creare un file con i dati di configurazione necessari, non solo specificando i nodi (server), ma anche aggiungendo un elenco di pacchetti al suo interno:
# Save as ConfigurationData.psd1
@{
#############################
# Specify server nodes
#############################
AllNodes = @(
@{
NodeName = "*"
}
# File server node
@{
NodeName = "fileserver-1"
Role = "Fileserver"
# Selects what packages to install
Packages = @(
'BackupAgent'
)
},
# Database server node
@{
NodeName = "database-1"
Role = "Database"
# Selects what packages to install
Packages = @(
'BackupAgent',
'BackupAgent-DataBaseAddon'
)
},
# Appserver node
@{
NodeName = "appserver-1"
Role = "Appserver"
# Selects what packages to install
Packages = @(
'BackupAgent',
'MonitoringAgent'
)
}
)
#############################
# Establece each package
#############################
Packages = @(
@{
Name = "BackupAgent"
ProductId = "3c4e21b5-8de2-408e-84e0-a42b0507b8b1"
FileName = "BackupAgent.msi"
Ensure = "Present"
},
@{
Name = "BackupAgent-DataBaseAddon"
ProductId = "97f860f6-0a58-4bf3-aef8-abc0f796e9df"
FileName = "BackupAgent-DataBaseAddon.msi"
Ensure = "Present"
},
@{
Name = "MonitoringAgent"
ProductId = "77b29b12-c222-4d85-b812-bbd4136ad0ff"
FileName = "MonitoringAgent.msi"
Ensure = "Present"
}
)
}
Ora puoi utilizzare questo file di dati di configurazione per generare dinamicamente configurazioni DSC per i tuoi server.:
Configuration MyDSCConfiguration {
# Import DSC modules with resources to use in the configuration
Import-DscResource -ModuleName PSDesiredStateConfiguration
Import-DscResource -ModuleName xPSDesiredStateConfiguration -ModuleVersion "8.10.0.0"
# Get Packages from the ConfigurationData
$Packages = $ConfigurationData.Packages
##############################################
# Applies to all nodes
##############################################
Node $AllNodes.NodeName {
# Create C:ProgramDataSoftwarePackages to download files to on all nodes
File SoftwarePackagesDirectory {
DestinationPath = "C:ProgramDataSoftwarePackages"
Type = "Directory" # Is a directory
Ensure = "Present" # Ensure that it exists
}
# Start dynamically generating DSC configuration by running through all the package names in Node.Packages
Foreach($PackageName in $Node.Packages){
$Package = $Packages.Where{$_.Name -eq $PackageName}
xRemoteFile "PackageDownload-$($Package.Name)" {
DependsOn = "[File]SoftwarePackagesDirectory"
DestinationPath = "C:SoftwarePackages$($Package.FileName)"
Uri = "http://web.contso.com/packages/$($Package.FileName)"
}
xMsiPackage "Install$($Package.Name)" {
DependsOn = "[xRemoteFile]PackageDownload-$($Package.Name)"
ProductId = $Package.ProductId
Path = "C:ProgramDataSoftwarePackages$($Package.FileName)"
Ensure = $Package.Ensure
}
}
}
}
Se esegui questo, la funzione DSC genera un file MOF per ciascuno dei tuoi server che può essere utilizzato per installare i pacchetti che hai definito nel ConfigurationData.psd1 procedimento:
PS51> MyDSCConfiguration -ConfigurationData .ConfigurationData.psd1
Directory: C:TutorialsDSCMyDSCConfiguration
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019-10-28 17:25 3962 fileserver-1.mof
-a---- 2019-10-28 17:25 6012 database-1.mof
-a---- 2019-10-28 17:25 5894 appserver-1.mof
# Applies the configuration to the servers
PS51> Start-DscConfiguration -Path .MyDSCConfiguration -Wait
Se vuoi aggiungere nuovi pacchetti, modifica il tuo ConfigurationData.psd1 file ed esegui il codice sopra ancora una volta.
conclusione
Iniziare con DSC può essere una curva di apprendimento piuttosto breve e ripida. Ma la parte più difficile per molti è trovare casi d'uso in cui possono usarlo.
Utilizzando il metodo sopra che utilizza HTTP (o HTTPS) La ricerca di pacchetti ti offre un modo versatile per fornire software ai tuoi server. E poiché è HTTPS, inoltre è più facile da esporre e puoi utilizzare per gestire il software su DMZ e altre reti meno affidabili.
Allo stesso tempo, l'utilizzo dei dati di configurazione invece di codificare tutto nelle configurazioni DSC offre un approccio molto più semplice da mantenere. Puoi persino generare questi dati di configurazione da fonti esterne come CSV, SQL, Sharepoint e tutto ciò che può essere letto con PowerShell.
Spero che tu abbia qualche idea per il tuo ambiente per iniziare a semplificare le tue attività quotidiane con DSC..