Giriş: Masterless Puppet Nedir ve Neden Kullanılır?
Puppet, sunucuların ve altyapının durumunu kod olarak tanımlamanıza ve otomatik olarak yönetmenize olanak tanıyan güçlü bir yapılandırma yönetim aracıdır. Geleneksel olarak Puppet, merkezi bir Puppet Master sunucusu ve bu sunucuya bağlanarak yapılandırmaları alan Puppet Agent istemcileri olmak üzere iki ana bileşenden oluşur. Ancak, her zaman bu karmaşık mimariye ihtiyaç duyulmaz.
Masterless Puppet (veya “Puppet Apply”), Puppet Master sunucusu olmadan, yapılandırma manifest dosyalarını doğrudan bir sunucu üzerinde çalıştırma yöntemidir. Bu yaklaşım, özellikle küçük ortamlar, tek sunucu yapılandırmaları, test ve geliştirme ortamları veya CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım) süreçlerinde hızlı ve basit otomasyon sağlamak için idealdir. Ubuntu 14.04 gibi eski bir işletim sisteminde bile, Puppet’in temel otomasyon gücünden bu şekilde faydalanabilirsiniz.
Bu rehberde, Ubuntu 14.04 üzerinde Masterless Puppet ortamını nasıl kuracağınızı, temel manifest dosyalarını nasıl oluşturacağınızı ve uygulayacağınızı adım adım öğreneceksiniz.
Ortamın Hazırlanması ve Puppet Kurulumu
Masterless Puppet ortamınızı kurmadan önce, Ubuntu 14.04 sunucunuzun temel gereksinimleri karşıladığından ve Puppet’i doğru şekilde yükleyebileceğinizden emin olmalıyız.
Sunucuyu Güncelleme
Herhangi bir yazılım kurulumuna başlamadan önce sistemin güncel paket listelerine sahip olması ve mevcut paketlerin güncellenmesi iyi bir pratiktir. Bu, olası bağımlılık sorunlarını önlemeye yardımcı olur.
sudo apt-get update
sudo apt-get upgrade -y
Puppet Kurulumu
Ubuntu 14.04 (Trusty Tahr) için Puppet paketlerini doğrudan Ubuntu depolarında bulmak mümkündür, ancak en güncel ve kararlı sürümü almak için Puppet Labs’ın kendi deposunu eklemek daha iyidir.
1. Puppet Labs Deposunu Ekleme:
Aşağıdaki komutlarla Puppet Labs’ın Trusty Tahr için özel olarak hazırlanmış depo paketini indirip kurun.
wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
sudo dpkg -i puppetlabs-release-trusty.deb
2. Paket Listesini Güncelleme:
Yeni eklenen depodan paket bilgilerini almak için apt-get update komutunu tekrar çalıştırın.
sudo apt-get update
3. Puppet’i Kurma:
Artık Puppet paketini yükleyebilirsiniz. Bu komut, Puppet’in tüm gerekli bağımlılıklarını da kuracaktır.
sudo apt-get install -y puppet
4. Kurulumu Doğrulama:
Puppet’in başarıyla kurulduğunu ve sürümünü kontrol etmek için aşağıdaki komutu kullanın.
puppet --version
Çıktı olarak yüklü Puppet sürümünü görmelisiniz (örneğin, 3.8.7 veya benzeri bir 3.x sürümü).
Masterless Puppet Mimarisi ve Temel Kavramlar
Masterless Puppet ortamında, Puppet Master’ın rolünü puppet apply komutu üstlenir. Bu komut, belirtilen manifest dosyalarını doğrudan yerel sistem üzerinde çalıştırır.
Masterless Puppet Nasıl Çalışır?
* Manifest Dosyaları: Puppet, yapılandırma talimatlarını .pp uzantılı manifest dosyalarında saklar. Bu dosyalar, sistemde hangi paketlerin kurulacağını, hangi servislerin çalışacağını, hangi dosyaların oluşturulacağını vb. tanımlar.
* puppet apply Komutu: Bu komut, bir veya daha fazla manifest dosyasını okur ve sistemin mevcut durumunu tanımlanan yapılandırmaya uygun hale getirmek için gerekli değişiklikleri uygular.
* Facter: Puppet, sistemi hakkında bilgi toplamak için Facter adlı bir araç kullanır. Bu bilgiler (IP adresi, işletim sistemi sürümü, bellek miktarı vb.), manifest dosyalarında koşullu mantık veya değişkenler için kullanılabilir.
* Modüller: Tekrar kullanılabilir Puppet kodu parçalarıdır. Modüller, belirli bir yazılımın (örneğin Nginx, Apache) veya bir sistem bileşeninin (örneğin kullanıcılar, ağ yapılandırması) yapılandırmasını kapsüller.
Manifest ve Modül Dizini Yapısı
Masterless Puppet için standart bir dizin yapısı olmasa da, düzenli kalmak için bir yapı oluşturmak önemlidir. Genellikle /etc/puppet dizini altında çalışılır.
/etc/puppet/
├── manifests/
│ └── site.pp # Ana manifest dosyası, tüm yapılandırmanın giriş noktası
└── modules/
└── my_module/ # Özel modüller için dizin
├── manifests/
│ └── init.pp # Modülün ana sınıfını tanımlar
├── files/ # Modül tarafından kopyalanacak statik dosyalar
└── templates/ # Modül tarafından kullanılacak şablon dosyaları (.erb)
* manifests/site.pp: Bu dosya, tüm Puppet uygulamasının ana giriş noktasıdır. Genellikle include veya class deyimleri ile diğer modülleri veya sınıfları çağırır.
* modules/: Bu dizin, kendi oluşturduğunuz veya Puppet Forge’dan indirdiğiniz modülleri içerir. Her modül kendi alt dizininde yer alır.
Puppet Manifest Dosyaları ve Kaynak Tanımları
Puppet manifest dosyaları, sistem kaynaklarını (resource) tanımlayan bloklardan oluşur. Her kaynak bloğu, belirli bir sistem bileşeninin (paket, servis, dosya vb.) istenen durumunu açıklar.
Bazı yaygın kaynak tipleri:
* package: Paket yükleme/kaldırma (örneğin nginx).
* service: Servisleri başlatma/durdurma/etkinleştirme (örneğin nginx).
* file: Dosyaları oluşturma, düzenleme, silme.
* user: Kullanıcı oluşturma/silme.
* exec: Herhangi bir komutu çalıştırma.
Örnek bir kaynak tanımı:
# Bir paketin kurulu olmasını sağlar
package { 'nginx':
ensure => installed, # 'installed', 'present', 'latest', 'absent' olabilir
}
Bir servisin çalışıyor ve sistem başlangıcında etkin olmasını sağlar
service { 'nginx':
ensure => running, # 'running', 'stopped' olabilir
enable => true, # 'true', 'false' olabilir
}
Pratik Bir Uygulama: Nginx Kurulumu
Şimdi öğrendiklerimizi kullanarak basit bir Nginx web sunucusu kurulumunu otomatikleştirelim.
İlk Manifest Dosyamızı Oluşturma
1. Manifest Dizini Oluşturma:
Öncelikle, manifest dosyalarımızı saklayacağımız dizini oluşturalım:
sudo mkdir -p /etc/puppet/manifests
2. site.pp Dosyasını Oluşturma:
Şimdi /etc/puppet/manifests/site.pp adlı ana manifest dosyamızı oluşturalım ve içine Nginx kurulumu için gerekli Puppet kodunu ekleyelim:
sudo nano /etc/puppet/manifests/site.pp
Dosyanın içine aşağıdaki içeriği yapıştırın:
# /etc/puppet/manifests/site.pp
# Nginx paketinin yüklü olmasını sağlar
package { 'nginx':
ensure => installed,
}
# Nginx servisinin çalışıyor ve sistem başlangıcında etkin olmasını sağlar
service { 'nginx':
ensure => running,
enable => true,
require => Package['nginx'], # Nginx paketi kurulduktan sonra başlat
}
# Basit bir index.html dosyası oluştur
file { '/usr/share/nginx/html/index.html':
ensure => file,
content => 'Bu sayfa Puppet tarafindan olusturuldu.
',
owner => 'www-data',
group => 'www-data',
mode => '0644',
require => Package['nginx'], # Nginx paketi kurulduktan sonra dosyayı oluştur
}
Bu manifest dosyası şunları yapacaktır:
* nginx paketinin yüklü olduğundan emin olur.
* nginx servisinin çalışır durumda olduğundan ve sistem başlangıcında otomatik başlayacak şekilde etkinleştirildiğinden emin olur.
* /usr/share/nginx/html/index.html yolunda basit bir HTML dosyası oluşturur. require parametresi, Puppet’in bu kaynakları doğru sırayla (paket kurulduktan sonra servis başlatma ve dosya oluşturma) işlemesini sağlar.
Manifest’i Uygulama
Manifest dosyasını oluşturduktan sonra, puppet apply komutu ile uygulayabiliriz.
1. Önizleme (No-Op Modu):
Değişiklikleri uygulamadan önce ne olacağını görmek için --noop (no operation) bayrağını kullanmak iyi bir alışkanlıktır:
sudo puppet apply --noop /etc/puppet/manifests/site.pp
Bu komut, Puppet’in yapacağı değişiklikleri raporlayacak ancak fiilen uygulamayacaktır. Çıktıda “Would have done” gibi ifadeler görmelisiniz.
2. Manifest’i Uygulama:
Her şey yolundaysa, --noop bayrağını kaldırarak manifest’i uygulayın:
sudo puppet apply /etc/puppet/manifests/site.pp
Puppet, Nginx’i kuracak, servisi başlatacak ve index.html dosyasını oluşturacaktır.
3. Doğrulama:
Nginx’in çalıştığını ve web sayfasının erişilebilir olduğunu doğrulayın:
systemctl status nginx # Ubuntu 14.04'te upstart veya service komutu da kullanılabilir
curl http://localhost
curl komutu size “Merhaba, Puppet ile Nginx!” mesajını içeren HTML çıktısını vermelidir.
Modül Kullanarak Daha Düzenli Yapı
Tek bir site.pp dosyası küçük projeler için yeterli olsa da, daha büyük ve yönetilebilir projeler için modüller kullanmak en iyi pratiktir. Nginx yapılandırmamızı bir modüle taşıyalım.
1. Modül Dizini Oluşturma:
Nginx modülü için dizin yapısını oluşturalım:
sudo mkdir -p /etc/puppet/modules/nginx/manifests
2. Modül Sınıfını Oluşturma:
init.pp dosyasını oluşturup Nginx yapılandırmasını buraya taşıyalım:
sudo nano /etc/puppet/modules/nginx/manifests/init.pp
Dosyanın içine aşağıdaki içeriği yapıştırın:
# /etc/puppet/modules/nginx/manifests/init.pp
class nginx {
package { 'nginx':
ensure => installed,
}
service { 'nginx':
ensure => running,
enable => true,
require => Package['nginx'],
}
file { '/usr/share/nginx/html/index.html':
ensure => file,
content => 'Bu sayfa Puppet modülü tarafindan olusturuldu.
',
owner => 'www-data',
group => 'www-data',
mode => '0644',
require => Package['nginx'],
}
}
3. site.pp‘yi Güncelleme:
Şimdi site.pp dosyamızı, nginx modülünü içerecek şekilde güncelleyelim:
sudo nano /etc/puppet/manifests/site.pp
Mevcut içeriği silip aşağıdaki ile değiştirin:
# /etc/puppet/manifests/site.pp
include nginx # nginx modülünü çağır
4. Güncellenmiş Manifest’i Uygulama:
Modülü içeren yeni yapılandırmayı uygulayın:
sudo puppet apply /etc/puppet/manifests/site.pp
Tekrar curl http://localhost komutunu çalıştırarak değişiklikleri doğrulayabilirsiniz. Artık sayfanızda “(Modülden)” ifadesini görmelisiniz.
Sonuç ve Sıkça Sorulan Sorular (SSS)
Bu rehberde, Ubuntu 14.04 üzerinde Masterless Puppet ortamını nasıl kuracağınızı, temel yapılandırma manifest dosyalarını nasıl oluşturup uygulayacağınızı ve modüllerle daha düzenli bir yapıya nasıl geçeceğinizi öğrendiniz. Masterless Puppet, basit ve hızlı otomasyon ihtiyaçlarınız için mükemmel bir başlangıç noktasıdır.
Masterless Puppet’in başlıca avantajları şunlardır:
* Basitlik: Karmaşık bir Master sunucusu kurma ve yönetme ihtiyacını ortadan kaldırır.
* Hızlı Başlangıç: Küçük projeler, test ortamları veya tek sunucu yapılandırmaları için idealdir.
* Taşınabilirlik: Manifest dosyalarınızı bir Git deposunda saklayarak farklı sunuculara kolayca uygulayabilirsiniz.
Ancak, büyük ve dinamik altyapılarda merkezi raporlama, sertifika yönetimi ve envanter gibi özellikler için geleneksel Puppet Master/Agent mimarisi daha uygun olacaktır.
Bir sonraki adım olarak, Puppet Forge’dan hazır modülleri kullanmayı, Hiera ile veri ayrıştırmayı ve manifest dosyalarınızı bir versiyon kontrol sistemi (Git gibi) ile yönetmeyi düşünebilirsiniz.
Sıkça Sorulan Sorular (SSS)
S: Masterless Puppet ile Master/Agent arasındaki temel fark nedir?
C: Master/Agent mimarisinde, merkezi bir Puppet Master sunucusu yapılandırmaları depolar ve agent’lar periyodik olarak bu sunucudan talimatları çeker. Masterless Puppet’te ise, yapılandırma manifest dosyaları doğrudan puppet apply komutu ile yerel sistem üzerinde çalıştırılır, merkezi bir sunucuya ihtiyaç duyulmaz.
S: Ubuntu 14.04 yerine daha yeni bir Ubuntu sürümünde de bu adımlar çalışır mı?
C: Evet, temel Puppet prensipleri ve puppet apply komutu tüm Ubuntu sürümlerinde aynı şekilde çalışır. Tek fark, Puppet Labs depo URL’sinin veya puppetlabs-release paket adının Ubuntu sürümüne göre değişebileceğidir (örneğin, Ubuntu 20.04 için focal kelimesi kullanılır).
S: Hangi durumlarda Masterless Puppet kullanmalıyım?
C: Tek bir sunucuyu yapılandırmak, test veya geliştirme ortamlarını hızlıca kurmak, CI/CD süreçlerinde geçici ortamlar oluşturmak veya Puppet’e yeni başlayanlar için Masterless Puppet idealdir.
S: Puppet Forge modüllerini Masterless ortamda nasıl kullanırım?
C: Puppet Forge’dan modülleri puppet module install komutu ile indirebilirsiniz. Bu komut, modülü /etc/puppet/modules dizinine (veya yapılandırılmış başka bir modül yoluna) yerleştirecektir. Daha sonra site.pp dosyanızda include ile bu modülü çağırabilirsiniz.
S: Manifest dosyalarımı versiyon kontrol sistemine (Git) almalı mıyım?
C: Kesinlikle! Manifest dosyalarınızı Git gibi bir versiyon kontrol sisteminde saklamak, değişiklikleri takip etmenizi, geri almanızı, farklı dallarda çalışmanızı ve ekip içinde işbirliği yapmanızı sağlar. Bu, Puppet kullanımında en iyi pratiklerden biridir.
