Desired State Configuration

   DevOps dünyasının karşı karşıya kaldığı en büyük problemlerden birisi kuşkusuz ki yapılandırma yönetimidir (configuration management). Özellikle günümüz rekabet ortamındaki hızlı değişim gereksimini ve bulut mimarisinde uygulamaların yatayda hızla çoğaltılabildiğini düşünecek olursak artan önemini daha iyi kavrayabiliriz. Bir fikir sahibi oaln değil, bir fikri hızla ürüne dönüştüren, geliştiren kazanacaktır. Bu bakış açısıyla, geçen her saniye para kaybı anlamına gelecektir. İşlerin çoğalması ve daha büyük iş yapmak herkesin arzuladığı bir şeydir. Diğer yandan unutmayın; işlerin çoğalması demek daha çok son kullanıcı demektir. Bu da daha çok sunucu, yönetilecek daha karmaşık sistemler ve dolayısıyla daha büyük dertler, daha fazla hata demektir. Bu denkleme bir de rekabetle birlikte değişen marketi kaçırmamak adına hızlı değişim gereksinimi katacak olursak… Süreç doğru yönetilemezse her şey bir anda tepetaklak olabilir, daha fazla kesinti, kaybedilen müşteriler, düşen pazar payı ile karşı karşıya kalabiliriz.  Facebook, Twitter, Flickr v.b. büyük sunucu parkuruna sahip pek çok uygulama gün içerisinde defalarca yeni sürüm çıkartabilme yeteneğine sahiptir.

   Yakın zamana kadar bu konuda şanslı olan taraf daha çok Linux dünyasıydı. Puppet, Chef v.b. başarılı ürünler sayesinde Linux dünyası yapılandırma yönetiminde deyim yerindeyse maça 1-0 önde başlıyorlardı. Durum bu gibi uygulamaların Windows sistemlere destek verilmesi ile dengelenmiş olsa da asıl önemli desteğe Windows Server 2012 R2 ve Windows 8.1’in çıkışıyla kavuştuk. Bu Windows sürümlerinde yer alan Powershell 4.0 içerisindeki Desired State Configuration (DSC) eklentisi sayesinde yapılandırma gerçekten de kolay bir şekilde yönetilebilir duruma geldi.

   Önceden beri PowerShell’in yol haritasında yer alan Desired State Configuration platformu (Bknz. : The Monad  Management Models, Monad Manifesto) sayesinde sunucularımızın yapılandırmasını daha kolay yönetebilir duruma geliyoruz. Buradaki kolaylıktan kastım; alt taraftaki detaylardan ve işlerin nasıl yapılacağından ziyade ne yapılacağına odaklanmak. Birincil hedef her zaman için işlerin yapılması, yapılmamışların tespit edilmesi; yani işlerin yönetilmesidir. Örneğin; hazırladığımız powershell scriptleri ile IIS’in nasıl kurulacağına, nasıl application pool ve uygulama oluşturulacağına odaklanmak, teknik detaylarında boğulmak yerine “IIS’i kur, ASP.Net’i kur ve şu klasördeki uygulamayı sun” diyebiliriz artık. Hatta bunu bir adım öteye taşıyabilir ve “IIS özelliği kurulu ve çalışıyor olmalıdır. Üzerinden XYZ uygulaması bulunmalı ve çalışır durumda olmalı” diyebiliriz. Bu sayede elimizdeki araç bir yapılandırma aracı olmaktan öteye geçiyor, bir durumu tasvir edebilir oluyoruz. Kısacası Desired State Configuration, sunucularımızın olmasını istediğimiz durumu anlatabileceğimiz bir araç. İşlerin bu seviye soyutlanmasıyla birlikte detaylardan boğulmadan asıl işimiz olan sistemlerin tutarlı çalışmasına odaklanabiliriz.

   Desired State configuration hakkında yukarıda paylaştığım bilgiler ardından artık nasıl kullanacağımıza geçmenin zamanı. Desired State Configuration ile bir sunucu üzerinde yapılandırma yapmak için öncelikle olmasını istediğimiz durumu anlatan bir tanım hazırlamamız gerekli. Bu tanımlayı yapabilmemiz için Powershell 4.0 ile birlikte Configuration ve Node şeklinde iki anahtar kelime geldi. Configuration anahtar kelimesi konsept olarak bir fonksiyondan farklı değil aslında. Sadece normal bir fonksiyon olarak yorumlanmak yerine işlem yapması üzere DSC’ye eklentisine teslim edilmekte.

Configuration UygulamaSunucusuVarsayimi {

}

   Yukarıdaki basit örnekle PowerShell’e bir DSC yapılandırmasına başladığımızı ve bunun adının UygulamaSunucusuVarsayimi olduğunu belirtiyoruz. Sıradaki adımda bu yapılandırma varsayımının kontrol edilmesi/uygulanmasını istediğimiz sunucuları belirtmeliyiz. Bu noktada da sahneye Node anahtar kelimesi geçiyor. Node ile üzerinden işlem yapmak istediğimiz sunucu/sunucuları belirtebiliriz;

Configuration UygulamaSunucusuVarsayimi {
    Node "UygulamaSunucusu1" {
    
    }
}

   İşlem yapılacak sunucuların belirlenmesin sonra sıra artık ne yapılacağında. DSC içerisinde yapılabilecek işlemler sağlayıcılar (providers) ile gerçekleştirilmektedir. Ön tanımlı olarak oldukça faydalı sağlayıcılar gelmeklle birlikte kendimizde sağlayıcı oluşturabilir ya da hazır bir paketi indirip kullanabiliriz. Hazır sağlayıcılardan örneğin; WindowsFeature ile Windows özellikleri üzerinde işlem yapabilirsiniz ya da File ile dosya işlemlerinizi gerçekleştirebilirsiniz;

Configuration UygulamaSunucusuVarsayimi {
    Node "UygulamaSunucusu1" {
        WindowsFeature IIS { 
        
        }
    }
}

   Aşağıdaki satırlarla UygulamaSunucusu1 isimli sunucuda IIS kurulumu kontrol edilebilir;

Configuration UygulamaSunucusuVarsayimi {
    Node "UygulamaSunucusu1" {
        WindowsFeature IIS { 
            Ensure = "Present"
            Name = "Web-Server"
        }
    }
}

   Gördüğünüz gibi oldukça basit ve okunaklı. Aslında yaptığımız, WindowsFeature sağlayıcına anahtar-değer ikilileri şeklinde parametre vermek. Bu satırlarla UygulamaSunucusu1’de Windows özelliklerinden Web-Server’ın (IIS) aktif olması gerektiğini belirtiyoruz.

DSC_yapilandirma

   Tabi bu satırlar tek başına yeterli değil. Öncelikle bu satırları Powershell üzerinde çalıştırıp asıl işi yapacak kodların bizim için üretilmesini sağlamalıyız. Bunu için yapmamız gereken sadece oluşturduğumuz yapılandırmanın adını belirtmek;

DSC_yapilandirma_mof

   Bu şekilde örnek bir DSC tanımlamasını tamamlamış oluyoruz. Son satırda oluşturduğumuz yapılandırmayı çağırmakla birlikte DSC eklentisi bizim adımıza arkaplanda talep ettiklerimize dair gerekli scriptleri hazırlayacaktır. Desired State Configuration aslında doğrudan yazdığımız bu script’i çalıştıramamakta. Desired State Configuration motoru MOF (Management Object Format) dosyalarını anlayıp tüketmektedir. Powershell 4.0 ile birlikte gelen ve yukarıda örneklediğim tanımlama dosyası ise son satırla birlikte bizim için asıl olan işletilebilir MOF dosyasını oluşturacaktır.

   Artık elimizde DSC tarafından çalıştırılabilir MOF dosyamızda olduğuna göre sıra bunu ilgili sunucuda çalıştırmaya. Bunun için aşağıdaki şekilde Start-DscConfiguration komutunu yapılandırma adı ile çalıştırmalıyız;

Start-DscConfiguration –Path .\UygulamaSunucusuVarsayimi –Wait –Verbose

  Bu komutta Path parametresi ile az önce oluşturduğumuz MOF dosyasının bulunduğu dizini belirtmekteyiz. Komutu çalıştırmamız ile birlikte uygulama sunucunda IIS özelliğinin kurulumu yapılacaktır. DSC tüm bu işlemleri yaparken öncelikle her bir adım için sunucunun talep edilen durumunda olup olmadığını kontrol edecek, gerektiğinde ilgili durum kodlarını işletecektir.

   Gördüğünüz gibi yukarıda sıraladığım bir kaç basit işlemle ile uygulama sunucumuzun olmasını istediğimiz durumunu tanımladık, hatta bu durumun gerçeğe dönüşmesini sağladık. İşin güzel tarafı DSC ile yapabileceğimiz sadece bu da değil. DSC tanımımızla aynı zamanda sunucularımızın istediğimiz durumda olup olmadığını da kontrol edebilmemiz mümkün. Bunu için Test-DscConfiguration komutunu kullanmamız yeterli olacaktır;

 $oturum = New-CimSession -ComputerName UygulamaSunucusu1
Test-DscConfiguration –CimSession $oturum

   Test-DscConfiguration komutu, çalıştırıldığı hedef sunucu istenilen durum yapılandırmasına sahip ise true, aksi durumda false değeri dönecektir.

   DSC tanımlaması ile ilgili bir diğer önemli noktada makalemin başında da belirttiğim gibi, Configuration anahtar kelimesinin aynı bir fonksiyon gibi davranabilmesidir. Bu durumda, aynı fonksiyonlarda olduğu gibi parametre kabul edebilir. Dolayısıyla birden fazla sunucu için yukarıdaki yapılandırmayı uygulamak isterseniz yapılandırma tanımı aşağıdaki şekilde yapabilirsiniz;

 Configuration UygulamaSunucusuVarsayimi {
    param ($SunucuAdi)
    
    Node $SunucuAdi {
        WindowsFeature IIS { 
            Ensure = "Present"
            Name = "Web-Server"
        }
    }
}

   Bu durumda MOF dosyası aşağıdaki şekilde oluşturulabilir;

UygulamaSunucusuVarsayimi –SunucuAdi UygulamaSunucusu1

   Oluşacak MOF dosyasının çalıştırılmasında ise bir değişiklik bulunmuyor. Aşağıdaki örnekte ise birden fazla sunucuda yapılandırmanın nasıl tanımlanacabileceğini görebilirsiniz;

 Configuration UygulamaSunucusuVarsayimi {
    param ([string[]]$SunucuAdi)
    
    Node $SunucuAdi {
        WindowsFeature IIS { 
            Ensure = "Present"
            Name = "Web-Server"
        }
    }

   DSC tanım dosyasında kullanabileceğiniz sisteminizdeki tüm sağlayıcıları aşağıdaki komut ile listelemeniz mümkün;

Get-DscResource | Select Name, Properties | ft -AutoSize

   Listelenen sağlayıcılar için kullanabileceğiniz anahtar-değer ikililerinin listesini ise aşağıdaki şekilde alabilirsiniz;

(Get-DscResource -Name WindowsFeature).Properties

   Bu örnekte WindowsFeature yerine istediğiniz sağlayıcının adını yazarak detayını öğrenebilirsiniz. Söz dizimi konusunda aşağıdaki şekilde bilgi de alabilirsiniz;

Get-DscResource -Name WindowsFeature -Syntax

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir