Windows PowerShell DSC (Desired State Configuration) ile Altyapı Otomasyonu
Windows PowerShell DSC (Desired State Configuration) ile Altyapı Otomasyonu
PowerShell DSC (Desired State Configuration), Windows ve karma ortamlarda sunucuların ve servislerin hedef bir duruma otomatik olarak getirilmesini ve bu durumun sürekli korunmasını sağlayan, deklaratif bir yapılandırma çerçevesidir. DSC ile rol/özellik kurulumları, servis ayarları, dosya ve registry politikaları, IIS/SQL gibi bileşenlerin standardizasyonu kodla yönetilir. Bu yazıda DSC’nin temel mimarisini, push/pull dağıtım modellerini, LCM ayarlarını, güvenlik ve gözlemlenebilirlik önerilerini ve kurumsal ölçekte devreye alma pratiklerini adım adım özetliyoruz. Büyük ortamlarda tutarlılık ve performans için ölçeklenebilir VDS ya da Premium VDS altyapıları tercih edilebilir.
- DSC Nedir, Neden Kullanılır?
- Temel Bileşenler
- Push vs Pull Modeli
- Örnek: Basit DSC Konfigürasyonu
- LCM (Local Configuration Manager) Ayarları
- Pull Server Seçenekleri
- Kaynaklar ve Modüller
- Güvenlik: Kimlik, Gizli Bilgi, İmzalama
- Gözlemlenebilirlik ve Uyum
- CI/CD ile Entegrasyon
- İleri Seviye: Kısmi Konfigürasyon ve Bağımlılıklar
- Sorun Giderme Pratikleri
- Performans ve Ölçek
- Sonuç
DSC Nedir, Neden Kullanılır?
- İstenen Durum: Sunucu/rol ayarlarını tek tek komutlarla değil, hedef durumu kod olarak tanımlarsınız (idempotent yaklaşım).
- Tekrarlanabilirlik: Test, ön-prod ve prod ortamları aynı kodla kurulup güncellenir.
- Uyumluluk: Güvenlik temel çizgileri (baseline), drift tespiti ve düzeltmesiyle kalıcı hale gelir.
Temel Bileşenler
- Configuration: DSC yapılandırma kodu (PowerShell) MOF dosyalarına derlenir.
- Resources: Dosya, Hizmet, Paket, Registry, WindowsFeature gibi kaynaklar (yerleşik + topluluk).
- LCM (Local Configuration Manager): Her düğümde (node) durum motoru; çekme/sürme, drift düzeltme, raporlama.
Push vs Pull Modeli
Push modelde MOF, yönetim istasyonundan hedef sunucuya itilir; küçük ölçekli veya geçici işler için pratiktir. Pull modelde ise düğümler, kimlikleriyle Pull Server üzerinden periyodik olarak konfigürasyonlarını çeker; büyük ve dinamik ortamlarda önerilir. Pull sunucusu için Sunucu Barındırma ya da izole bir Kurumsal Hosting kullanımı yaygındır.
Örnek: Basit DSC Konfigürasyonu
Configuration WebSunucusu {
param([string[]]$Nodes)
Import-DscResource -ModuleName PSDesiredStateConfiguration
Node $Nodes {
WindowsFeature IIS {
Name = "Web-Server"
Ensure = "Present"
}
File AnaSayfa {
DestinationPath = "C:\inetpub\wwwroot\index.html"
Contents = "Merhaba DSC!"
Ensure = "Present"
Type = "File"
}
Service W3SVC {
Name = "W3SVC"
State = "Running"
StartMode = "Automatic"
DependsOn = "[WindowsFeature]IIS"
}
}
}
WebSunucusu -Nodes "SRV-WEB01"
# .\WebSunucusu\SRV-WEB01.mof üretildikten sonra:
# Start-DscConfiguration -Path .\WebSunucusu -Wait -Verbose -Force
LCM (Local Configuration Manager) Ayarları
LCM; konfigürasyon uygulama modu, kontrol sıklığı, drift düzeltme ve raporlama gibi davranışları belirler.
[DSCLocalConfigurationManager()]
Configuration LCM_Ayar {
Node "SRV-WEB01" {
Settings {
ConfigurationMode = "ApplyAndAutoCorrect" # Drift tespitinde otomatik düzelt
RefreshMode = "Pull" # Pull Server’dan çek
RefreshFrequencyMins = 30
ConfigurationModeFrequencyMins = 15
RebootNodeIfNeeded = $true
}
}
}
LCM_Ayar
# Set-DscLocalConfigurationManager -Path .\LCM_Ayar -ComputerName SRV-WEB01 -Verbose
Pull Server Seçenekleri
- SMB/HTTP(S) tabanlı klasik çekme sunucusu; düğümler ConfigurationID ile kimliklenir.
- Azure Otomasyon DSC: Bulut tabanlı merkezi yönetim ve raporlama.
- Versiyonlama: Konfigürasyonları ve DSC Resource paketlerini sürümleyin.
Kaynaklar ve Modüller
Yerleşik kaynaklara ek olarak NetworkingDsc, xWebAdministration, SqlServerDsc gibi modüller genişletme sağlar. Modülleri bir build adımıyla paketleyip Pull Server’a yerleştirerek tüm düğümlerde aynı sürümün kullanılmasını garanti edin.
Güvenlik: Kimlik, Gizli Bilgi, İmzalama
- Kimlik Doğrulama: HTTPS Pull Server ve sertifika doğrulaması zorunlu olmalı.
- Gizli Veriler: MOF içinde Credentials şifrelenmeli; düğüm sertifikasıyla Data Encryption kullanın.
- İmzalı Kod: Yapılandırma betikleri ve modüller için kod imzalama ve kontrollü yayın (release) süreci.
Gözlemlenebilirlik ve Uyum
- Raporlama: LCM raporlarını merkezi olarak toplayın; drift ve başarısızlıkları uyarıya bağlayın.
- Loglama: Get-DscConfigurationStatus, Event Log ve APM araçlarıyla uçtan uca görünürlük sağlayın.
- Uyumluluk: Güvenlik temelleri (CIS/Benchmarks) DSC ile enforce edilerek kalıcı hale getirilir.
CI/CD ile Entegrasyon
Konfigürasyonu bir repoda (Git) tutun; pull request kod inceleme, birim test (Pester), modül sürüm kontrolü ve pipeline içinde derleme → imzalama → yayınlama adımlarını uygulayın. MOF artefaktlarını artifact repositoryde saklayın. Büyük yapılarda çekme sunucusunu izole bir Kurumsal Hosting veya Barındırma üzerinde konumlandırın.
İleri Seviye: Kısmi Konfigürasyon ve Bağımlılıklar
Partial Configurations ile farklı ekipler (OS, Middleware, Uygulama) aynı düğüm üzerinde sorumluluklarını ayrı MOF’larla yönetebilir. Bağımlılıklar DependsOn ile tanımlanır; ApplyAndAutoCorrect modunda drift hızlıca düzeltilir.
Sorun Giderme Pratikleri
Get-DscConfigurationveGet-DscConfigurationStatusile anlık durum/son uygulama sonuçlarını inceleyin.- Event Viewer > Microsoft-Windows-Desired State Configuration günlüklerini kontrol edin.
- Kaynak sürümlerini eşitleyin; modül uyumsuzluklarını pipeline’da erken yakalayın.
Performans ve Ölçek
- Uygulama Sıklığı: LCM RefreshFrequency’i ortama uygun ayarlayın; aşırı sık kontrol oranlı yük üretir.
- Artefakt Önbelleği: Büyük MOF/modül paketleri için CDN/önbellekleme düşünün.
- Altyapı: Yük ve SLA gereksinimleri için Premium VDS veya dedike Kirala Senin Olsun sunucular tercih edilebilir.
Sonuç
PowerShell DSC, altyapı standartlarını kodla tarif ederek sunucu filonuzun istenen durumda kalmasını sağlar. Doğru LCM ayarları, güvenli MOF yönetimi, sürümleme ve merkezi raporlama ile DSC; kurulum, uyumluluk ve güvenlik süreçlerini sadeleştirir. Ölçek ve süreklilik için HostLigo’nun ölçeklenebilir platformları üzerinde Pull Server ve CI/CD hattınızı konumlandırarak kurumsal seviyede güvenilir bir otomasyon mimarisi kurabilirsiniz.