Chef Nedir ve Nasıl Kurulur
Sistem yöneticileri olarak yüzlerce hatta binlerce sunuculuk ortamları yönetiyoruz. Tüm bu sistemlerin konfigürasyonlarını takip etmemiz, kurmamız, güncellememiz ve bunu hem kendi hem de öteki ekipte ki arkadaşlarımızla paylaşmamız gerekmektedir.Bu süreç düzgün planlanmaz ve işletilmezse alt yapımızda ciddi sorunlara ve beklenmedik davranışlara sebep olabilir. Konfigürasyon yönetiminin (Configuration management) önemi ve sürece olan etkisi artık yadsınamaz bir gerçektir.
Sistemlerin sayısı ve karmaşıklığı artıkça çözüm olarak konfigürasyon yönetimi ve sistemlere otomatik uygulanabilmesi içinde çeşitli araçlar geliştirilmiştir. Bunlardan popüler olanları Puppet, Chef, CFEngine ve Microsoft’un DSC ürünleridir.
Configuration management sürecini otomatikleştirmenin, sunucu kurulumunu kolaylaştırmanın haricinde getireceği başka avantajlar da bulunmaktadır bunlar:
- Tutarlılık: Konfigürasyonların otomatik olarak yüklenmesi ve denetlenmesi sayesinde tüm sunucuların istediğimiz seviyede olmasını garanti ederiz.
- Değişiklik yönetiminin kolaylığı: Hepimiz değişiklikten korkarız çünkü eksik veya hatalı konfigürasyon bilgisi sebebiyle sürprizlerle karşılaşmamız ve sorun yaşamamız olası bir durumdur. CM yazılımları sayesinde her şeyi hem kayıt altına alır hem de tüm durum değişikliklerini yakından izleyebilirsek en doğru analizi yapabilir, etkili bir değişiklik süreci geçirebiliriz.
- Denetleme: Şirketler çeşitli standartlara uymak zorundadırlar, bundan dolayı çeşitli aralıklarla denetlenmesi gereklidir. Eğer düzgün kurgulanmış bir yapımız varsa bu denetlemeler hem kolay hem de sıkıntısız geçer.
Bu yazımın devamında hem Linux hem de Windows ortamlarında kullandığım Chef’in yapısı ve kurulumundan bahsetmek istiyorum.
Chef Terminalojisi:
Chef servisi: İstemcilerin bağlanıp kendileri ile ilişkilendirilmiş rol ve konfigürasyonları alabildikleri sunucu.
Node: Chef tarafından ilgili konfigürasyon veya rollerin yükleneceği sunuculara verilen isimdir Windows,Linux veya Unix olabilirler. Chef agent’ı sayesinde Chef servisinin yüklü olduğu sunucuya bağlanarak kendileri için tanımlanmış rol ve konfigürasyonları çekip uygularlar.
Recipe: Uygulanacak konfigürasyona verilen isim. Kullanıcı ekleme, güvenlik kuralı tanımlama veya yazılımda ki bir parametreyi değiştirme olabilir
Cookbook: Birden fazla recipe’in beraber kullanılmasına Cookbook denir. Mesela bir web servisi yüklemek istiyorsunuz bunun için gereken tüm recipe’leri tek bir cookbook içerisinde toplayabilirsiniz.
Role: Cookbook ve Recipe’lerden oluşmuş kullanıcı tanımlı bir ifadedir. WordPress isimli bir role’lümüz varsa bu role için gerekli olan Apache ve MySQL cookbook’larını barındırması gereklidir.
Kurulum:
Chef birden fazla servise bağımlı olarak çalışmaktadır. Bu servisleri dağıtık bir yapıda kurabileceğimiz gibi tek bir sunucu üzerinde de barındırabiliriz. Bu servisler,
- API service
- Message Queue
- Data storage
- Search Service(Solr)
- Management Console
Ben test ortamım için Ubuntu 14.04 sunucusu içerisine tüm servisleri opscode sayfasında ki kurulum scriptiyle kurdum. Kurulumu root yetkilerine sahip bir kullanıcıyla yapmanız gerekmektedir.
curl -L https://www.opscode.com/chef/install.sh | bash -s -- -P server curl -L https://www.opscode.com/chef/install.sh | bash
Yukarıda ki iki komut hem chef server’ını hem de client’ı kuracaktır. Bu yazıyı yazdığım esnada en son stabil chef-server sürümü 11.1.3’dü. Kurulum bittikten sonra aşağıda ki çıktıyı alacaksınız.
Terminale belirtmiş olduğu komutu girerek yapılandırmaya geçelim. Yapılandırma bittikten sonra artık Chef’in web ara yüzüne giriş yapıp son yapılandırma kısmına girelim.
Web ara yüzüne giriş için https://<sunucuadı/ip> üzerinden giriş yapabilirsiniz. Eğer giriş yapamazsanız terminal üzerinden chef-server-ctl status|grep nginx komutunu yazarak nginx’in çalışıp çalışmadığını kontrol edin.
İlk girişte admin kullanıcısı için şifre p@ssw0rd1 olarak atanmıştır, giriş yaptıktan sonra size yeni bir şifre tanımlamanızı isteyecektir. Artık ortamımızı kurduğumuza göre ilk recipe’mizi hazırlayabiliriz. Terminale tekrar dönelim ve “/” altında recipe isimli bir klasör yaratalım, içerisinde de hello.rb isimli bir ruby dosyası yaratıp içeriğini aşağıda ki gibi oluşturalım.
file "#{ENV['HOME']}/hello.txt" do content 'Hello World' end
Ruby dosyasını chef-apply hello.rb ile çalıştırdığımız zaman aşağıda ki gibi bir çıktı vermektedir.
Tebrikler her kullanıcının home klasöründe hello.txt dosyasını yaratmayı otomatikleştirdiniz 🙂 Bir sonra ki Chef yazımda başka bir sunucuya Chef yardımıyla nasıl LAMP kurabileceğimizi anlatacağım.
Okuduğunuz için teşekkürler.