Omówienie platformy Desired State Configuration dla inżynierówDesired State Configuration Overview for Engineers

Ten dokument jest przeznaczony dla deweloperów i zespołów operacyjnych, aby poznać zalety konfiguracji żądanego stanu (DSC) programu PowerShell.This document is intended for developer and operations teams to understand the benefits of PowerShell Desired State Configuration (DSC). W przypadku widoku wartości DSC o wyższym poziomie należy zapoznać się z tematem Konfiguracja żądanego stanu na potrzeby podejmowania decyzjiFor a higher level view of the value DSC provides, please see Desired State Configuration Overview for Decision Makers

Zalety konfiguracji żądanego stanuBenefits of Desired State Configuration

Konfiguracja DSC istnieje:DSC exists to:

  • Zmniejsz złożoność skryptów w systemie WindowsDecrease the complexity of scripting in Windows
  • Zwiększ szybkość iteracjiIncrease the speed of iteration

Pojęcie "ciągłego wdrażania" staje się ważniejsze.The concept of "continuous deployment" is becoming more important. Ciągłe wdrażanie to możliwość wdrażania często, potencjalnie wiele razy dziennie.Continuous deployment means the ability to deploy frequently, potentially many times per day. Te wdrożenia nie rozwiązują problemu, ale w celu szybkiej publikacji.The purpose of these deployments are not to fix something but to get something published quickly. Dzięki wykorzystaniu nowych funkcji w sposób niesprawny i niezawodny, można skrócić czas do wartości nowej logiki biznesowej.By getting new features through development into operation as smoothly and reliably as possible, you reduce time-to-value of new business logic.

Przechodzenie do usługi obliczeniowej w chmurze oznacza rozwiązanie do wdrażania, które wykorzystuje model szablonu "deklaracyjne", gdzie środowisko stanu końcowego jest zadeklarowane jako tekst i opublikowane w aparacie wdrażania.The move towards cloud computing implies a deployment solution that utilizes a "declarative" template model, where an end state environment is declared as text and published to a deployment engine. Ta technika wdrażania pozwala na szybką zmianę na dużą skalę, z odporność na zagrożenia, ponieważ w dowolnym momencie wdrożenie może być ciągle powtarzane w celu zagwarantowania stanu końcowego.This deployment technique allows for rapid change, at scale, with resilience against threat of failure because at any time the deployment can be consistently repeated to guarantee an end state. Tworzenie narzędzi i usług obsługujących ten styl operacji za pomocą automatyzacji jest odpowiedzią na te zmiany.The creation of tools and services that support this style of operations through automation is a response to these changes.

DSC to platforma, która zapewnia deklaratywne i idempotentne (Powtarzalne) wdrożenie, konfigurację i zgodność.DSC is a platform that provides declarative and idempotent (repeatable) deployment, configuration and conformance. Platforma DSC pozwala upewnić się, że składniki centrum danych mają poprawną konfigurację, co pozwala uniknąć błędów i uniemożliwia kosztowne błędy wdrażania.The DSC platform enables you to ensure that the components of your data center have the correct configuration, which avoids errors and prevents costly deployment failures. Przez zatraktowanie konfiguracji DSC jako części kodu aplikacji, DSC umożliwia ciągłe wdrażanie.By treating DSC configurations as part of application code, DSC enables continuous deployment. Konfiguracja DSC powinna zostać zaktualizowana w ramach aplikacji, dzięki czemu wiedza konieczna do wdrożenia aplikacji jest zawsze aktualna i gotowa do użycia.The DSC configuration should be updated as a part of the application, ensuring that the knowledge needed to deploy the application is always up-to-date and ready to be used.

"Mam program PowerShell, dlaczego potrzebuję konfiguracji żądanego stanu?""I have PowerShell, why do I need Desired State Configuration?"

Konfiguracja DSC — oddzielne zamierzenie lub "co chcę zrobić", od wykonania lub "jak to zrobić".DSC configurations separate intent, or "what I want to do", from execution, or "how I want to do it." Oznacza to, że logika wykonywania jest zawarta w zasobach.This means the logic of execution is contained within the resources. Użytkownicy nie muszą wiedzieć, jak zaimplementować lub wdrożyć funkcję, gdy jest dostępny zasób DSC dla tej funkcji.Users do not have to know how to implement or deploy a feature when a DSC resource for that feature is available. Dzięki temu użytkownik może skupić się na strukturze wdrożenia.This allows the user to focus on the structure of their deployment.

Przykładowo skrypty programu PowerShell powinny wyglądać następująco:As an example, PowerShell scripts should look like this:

# Create a share in Windows Server 8
New-SmbShare -Name MyShare -Path C:\Demo\Temp -FullAccess Alice -ReadAccess Bob

Ten skrypt jest prosty, zrozumiały i prosty.This script is simple, comprehensible, and straightforward. Jednak jeśli spróbujesz umieścić ten skrypt w środowisku produkcyjnym, będziesz działać w kilku kwestiach.However, if you try putting that script into production, you will run into several issues. Co się stanie, jeśli skrypt zostanie uruchomiony dwa razy w wierszu?What happens if that script is run twice in a row? Co się stanie, jeśli Robert miał wcześniej pełny dostęp do udziału?What happens if Bob previously had Full Access to the share?

Aby zrekompensować te problemy, "rzeczywista" wersja skryptu będzie wyglądać bliżej podobnej do poniższego:To compensate for these issues, a "real" version of the script will look closer to something like:

# But actually creating a share in an idempotent way would be

$shareExists = $false
$smbShare = Get-SmbShare -Name $Name -ErrorAction SilentlyContinue
if($smbShare -ne $null)
{
    Write-Verbose -Message "Share with name $Name exists"
    $shareExists = $true
}

if ($shareExists -eq $false)
{
    Write-Verbose "Creating share $Name to ensure it is Present"
    New-SmbShare @PSBoundParameters
}
else
{
    # Need to call either Set-SmbShare or *ShareAccess cmdlets
    if ($PSBoundParameters.ContainsKey("ChangeAccess"))
    {
       #...etc, etc, etc
    }
}

Ten skrypt jest bardziej skomplikowany, z dużą ilością logiki i obsługi błędów.This script is more complex, with plenty of logic and error handling. Skrypt jest bardziej skomplikowany, ponieważ nie zawiera już tego, co chcesz zrobić, ale jak to zrobić .The script is more complex because you are no longer stating what you want done, but how to do it .

Konfiguracja DSC pozwala na wypowiadanie, co chcesz zrobić, a podstawowa logika jest abstrakcyjna.DSC allows you to say what you want done, and the underlying logic is abstracted away.

# A configuration is a special kind of PowerShell function
Configuration Sample_Share
{
   Import-DscResource -Module xSmbShare
   # Nodes are the endpoint we wish to configure
   # A Configuration block can have zero or more Node blocks
   Node $NodeName
   {
      # Next, specify one or more resource blocks
      # Resources are simply PowerShell modules that
      # implement the logic of "how" to execute a task
      xSmbShare MySMBShare
      {
          Ensure      = "Present"
          Name        = "MyShare"
          Path        = "C:\Demo\Temp"
          ReadAccess  = "Bob"
          FullAccess  = "Alice"
          Description = "This is an updated description for this share"
      }
   }
}
#Run the function to compile the configuration
Sample_Share
#Pass the configuration to the nodes we defined and configure them
Start-DscConfiguration Sample_Share

Ten skrypt jest czysty i nieczytelny.This script is cleanly formatted and straightforward to read. Ścieżki logiki i obsługa błędów są nadal obecne w implementacji zasobów , ale nie są widoczne dla autora skryptu.The logic paths and error handling are still present in the resource implementation, but invisible to the script author.

Oddzielanie środowiska od strukturySeparating Environment from Structure

Typowym wzorcem w programie DevOps jest posiadanie wielu środowisk do wdrożenia.A common pattern in DevOps is to have multiple environments for deployment. Na przykład może istnieć środowisko deweloperskie służące do szybkiego tworzenia prototypów nowego kodu.For example, there might be a "dev" environment used to quickly prototype new code. Kod ze środowiska "dev" przechodzi do środowiska "test", gdzie inne osoby weryfikują nowe funkcje.The code from the "dev" environment goes into a "test" environment, where other people verify the new functionality. Na koniec kod przechodzi do "prod" lub w środowisku produkcyjnym działającym na żywo.Finally, the code goes into "prod", or the live site production environment.

Konfiguracje DSC obsługują ten potok Dev-Test-prod przy użyciu danych konfiguracyjnych.DSC configurations accommodate this dev-test-prod pipeline through the use of configuration data. To bardziej zróżnicowanie różnic między strukturą konfiguracji z zarządzanymi węzłami.This further abstracts the difference between the structure of the configuration from the nodes that are managed. Można na przykład zdefiniować konfigurację, która wymaga programu SQL Server, serwera IIS i serwera warstwy środkowej.For example, you can define a configuration that requires a SQL server, an IIS server, and a middle-tier server. Niezależnie od tego, które węzły odbierają różne fragmenty tej konfiguracji, te trzy elementy będą zawsze obecne.Regardless of what nodes receive the different pieces of this configuration, those three elements will always be present. Możesz użyć danych konfiguracji, aby wskazać wszystkie trzy elementy do tego samego komputera dla środowiska deweloperskiego, oddzielić trzy elementy do trzech różnych maszyn w środowisku testowym, a wreszcie do wszystkich serwerów produkcyjnych w środowisku produkcyjnym.You can use configuration data to point all three elements towards the same machine for a dev environment, separate out the three elements to three different machines for a test environment, and finally towards all your production servers for the prod environment. Aby wdrożyć w różnych środowiskach, można wywołać Start-DscConfiguration z prawidłowymi danymi konfiguracyjnymi dla środowiska, które ma być celem.To deploy to the different environments, you can invoke Start-DscConfiguration with the correct configuration data for the environment you want to target.

Zobacz teżSee Also

KonfiguracjeConfigurations

Dane konfiguracjiConfiguration Data

ZasobyResources