Puppet 4’ü Ubuntu 14.04 Üzerinde Master-Agent Yapılandırmasıyla Kurulumu: Adım Adım Kapsamlı Rehber
Günümüzün karmaşık IT altyapılarında sunucu yönetimi, yapılandırma otomasyonu ve sürekli dağıtım (Continuous Delivery) süreçleri, sistem yöneticilerinin en büyük zorluklarından biridir. Binlerce sunucuyu tek tek yönetmek, yazılım kurulumlarını tekrarlamak, güvenlik yamalarını uygulamak veya yapılandırma dosyalarını senkronize etmek hem zaman alıcı hem de hataya açık bir süreçtir. İşte bu noktada Yapılandırma Yönetimi (Configuration Management) araçları devreye girer. Bu araçlar, altyapınızı kod olarak tanımlamanıza (Infrastructure as Code – IaC) ve bu tanıma göre sunucularınızı otomatik olarak yapılandırmanıza olanak tanır. Puppet, bu alandaki en güçlü ve yaygın kullanılan araçlardan biridir.
Bu kapsamlı rehberde, Puppet 4’ü Ubuntu 14.04 işletim sistemi üzerinde bir Master-Agent mimarisiyle nasıl kuracağınızı ve temel bir yapılandırmayı nasıl gerçekleştireceğinizi adım adım anlatacağız. Her ne kadar Ubuntu 14.04 artık uzun süreli destek (LTS) süresi sona ermiş eski bir sürüm olsa da, bu rehber, Puppet’ın temel prensiplerini ve kurulum adımlarını anlamak için değerli bir kaynak olacaktır. Modern işletim sistemleri ve Puppet sürümleri için de benzer mantık ve adımlar geçerlidir, ancak paket isimleri veya dosya yollarında küçük farklılıklar olabilir.
Puppet, sunucularınızın istenen bir duruma gelmesini sağlayan bir araçtır. Bir Master (ana sunucu) ve Agent (istemci) mimarisiyle çalışır. Master sunucu, tüm yapılandırma bilgilerini (manifestler, modüller vb.) barındırır ve agent’lardan gelen yapılandırma isteklerini işler. Agent sunucular ise düzenli aralıklarla Master’a bağlanarak kendi yapılandırmalarını talep eder, Master’dan gelen katalogu alır ve bu katalogdaki tanımlamalara göre kendi sistemlerini günceller. Bu sayede, tüm sunucularınızın tutarlı ve belirlenmiş bir durumda kalması sağlanır.
Giriş
Puppet Nedir?
Puppet, sunucuların, cihazların ve yazılımların yaşam döngüsünü yönetmek için tasarlanmış, açık kaynaklı bir yapılandırma yönetimi aracıdır. Ruby tabanlı bir dil olan Puppet DSL (Domain Specific Language) kullanarak altyapınızın istenen durumunu (desired state) tanımlamanıza olanak tanır. Bu tanımlar, Puppet Master tarafından derlenir ve Agent’lar tarafından uygulanır. Puppet, özellikle büyük ve dinamik altyapılarda tutarlılık, ölçeklenebilirlik ve otomasyon sağlamak için vazgeçilmez bir araçtır.
Neden Puppet Kullanılmalı?
- Otomasyon: Manuel görevleri ortadan kaldırır ve sunucu yapılandırmasını otomatikleştirir.
- Tutarlılık: Tüm sunucuların belirli bir yapılandırma standardına uymasını sağlar, “yapılandırma kayması” (configuration drift) sorununu engeller.
- Hız ve Güvenilirlik: Yeni sunucuların hızlı bir şekilde devreye alınmasını sağlar ve insan hatası riskini azaltır.
- Altyapı Kod Olarak (IaC): Altyapı yapılandırmasını versiyon kontrol sistemleriyle (Git gibi) yönetmenize olanak tanır.
- Ölçeklenebilirlik: Onlarca veya yüzlerce sunucuyu kolayca yönetmenize olanak tanır.
Master-Agent Mimarisi
Puppet’ın Master-Agent mimarisi şu temel bileşenlerden oluşur:
- Puppet Master: Yapılandırma dosyalarını (manifestler ve modüller), sertifika yetkilisini (CA) ve Puppet kodunu barındıran merkezi sunucudur. Agent’lardan gelen yapılandırma isteklerini işler, her agent için bir “katalog” derler ve bu katalogu agent’lara gönderir.
- Puppet Agent: Yönetilecek sunuculara kurulan istemci yazılımıdır. Düzenli aralıklarla (genellikle 30 dakikada bir) Master’a bağlanır, kendi kimliğini kanıtlar, Master’dan kendisi için derlenmiş katalogu alır ve bu katalogdaki talimatları kendi sistemine uygular.
- Sertifika Yetkilisi (CA): Puppet Master, aynı zamanda bir sertifika yetkilisi görevi görür. Master ve Agent arasındaki tüm iletişim, SSL/TLS sertifikaları kullanılarak şifrelenir ve kimlik doğrulaması yapılır. Bu, iletişimin güvenli olmasını sağlar.
Önkoşullar
Kuruluma başlamadan önce aşağıdaki önkoşulların sağlandığından emin olun:
- İki Adet Ubuntu 14.04 Sunucusu: Bir tanesi Puppet Master, diğeri Puppet Agent olarak kullanılacak. Minimum 2 GB RAM ve 2 CPU çekirdeği önerilir, özellikle Master için.
- Root/Sudo Erişimi: Her iki sunucuda da komutları çalıştırmak için yönetici yetkilerine sahip olmalısınız.
- Ağ Bağlantısı: Her iki sunucu arasında ağ bağlantısı olmalı ve birbirleriyle iletişim kurabilmelidir.
- Hostname ve DNS Çözümlemesi: Sunucuların benzersiz ve anlamlı ana bilgisayar adları (hostnames) olmalı ve birbirlerini bu adlarla çözümleyebilmelidir. Üretim ortamlarında DNS sunucusu kullanılması önerilirken, bu rehberde basitlik adına
/etc/hostsdosyasını kullanacağız. - Zaman Senkronizasyonu: Master ve Agent sunucuları arasında zaman senkronizasyonu önemlidir (NTP). Sertifika sorunlarını önlemek için bu gereklidir.
Sistem Hazırlığı
Hostname ve DNS Yapılandırması
Puppet’ın doğru çalışabilmesi için Master ve Agent sunucularının birbirlerini isimleriyle tanıyabilmesi kritik öneme sahiptir. Bu adımda, her iki sunucunun ana bilgisayar adını ayarlayacak ve basit bir DNS çözümlemesi için /etc/hosts dosyasını düzenleyeceğiz.
Puppet Master Sunucusunda:
Öncelikle Master sunucusunun ana bilgisayar adını ayarlayın (örneğin, puppetmaster.example.com).
sudo hostname puppetmaster.example.com
echo "puppetmaster.example.com" | sudo tee /etc/hostname
sudo sed -i 's/127.0.0.1\tlocalhost/127.0.0.1\tlocalhost\npriv_ip_master\tpuppetmaster.example.com puppetmaster/' /etc/hosts
Örneğin: sudo sed -i 's/127.0.0.1\tlocalhost/127.0.0.1\tlocalhost\n192.168.1.10\tpuppetmaster.example.com puppetmaster/' /etc/hosts
Ardından, Agent sunucusunun IP adresini ve ana bilgisayar adını /etc/hosts dosyasına ekleyin.
sudo sed -i '$ a\priv_ip_agent\tagent.example.com agent' /etc/hosts
Örneğin: sudo sed -i '$ a\192.168.1.20\tagent.example.com agent' /etc/hosts
Puppet Agent Sunucusunda:
Benzer şekilde, Agent sunucusunun ana bilgisayar adını ayarlayın (örneğin, agent.example.com).
sudo hostname agent.example.com
echo "agent.example.com" | sudo tee /etc/hostname
sudo sed -i 's/127.0.0.1\tlocalhost/127.0.0.1\tlocalhost\npriv_ip_agent\tagent.example.com agent/' /etc/hosts
Örneğin: sudo sed -i 's/127.0.0.1\tlocalhost/127.0.0.1\tlocalhost\n192.168.1.20\tagent.example.com agent/' /etc/hosts
Ve Master sunucusunun IP adresini ve ana bilgisayar adını /etc/hosts dosyasına ekleyin.
sudo sed -i '$ a\priv_ip_master\tpuppetmaster.example.com puppetmaster' /etc/hosts
Örneğin: sudo sed -i '$ a\192.168.1.10\tpuppetmaster.example.com puppetmaster/' /etc/hosts
Değişikliklerin etkili olması için sunucuları yeniden başlatmanız veya ağ hizmetlerini yeniden yüklemeniz gerekebilir.
