Puppet 4’ü CentOS 7 Üzerinde Master-Agent Kurulumu: Adım Adım Rehber
Giriş
Günümüzün karmaşık IT altyapılarında, sunucuların ve diğer sistemlerin tutarlı bir şekilde yapılandırılması ve yönetilmesi hayati önem taşımaktadır. Yüzlerce veya binlerce sunucuyu manuel olarak yapılandırmak, hem zaman alıcı hem de hataya açık bir süreçtir. İşte bu noktada otomasyon araçları devreye girer. Konfigürasyon yönetimi araçları, altyapınızın durumunu tanımlamanıza, dağıtmanıza ve sürdürmenize olanak tanır. Bu araçlardan biri de açık kaynaklı bir yazılım olan Puppet’tir.
Puppet, sistem yöneticilerinin sunucu yapılandırmalarını kod olarak tanımlamasına olanak tanıyan, Ruby tabanlı bir konfigürasyon yönetim aracıdır. Bu sayede, “altyapı kod olarak” (Infrastructure as Code – IaC) prensibi benimsenir. Puppet, deklaratif bir dil kullanarak sistemlerin son durumunu tanımlar ve bu duruma ulaşmak için gerekli adımları otomatik olarak atar. Örneğin, belirli bir paketin yüklü olmasını, bir servisin çalışmasını veya bir dosyanın belirli bir içeriğe sahip olmasını sağlayabilirsiniz.
Puppet’in temel mimarisi “Master-Agent” (Ana-Aracı) modeline dayanır. Bu modelde, bir merkezi Puppet Master sunucusu bulunur ve bu sunucu, tüm konfigürasyon tanımlarını (manifestler, modüller) barındırır. Ağdaki diğer sunucular ise Puppet Agent olarak görev yapar. Agent’lar belirli aralıklarla Master ile iletişime geçerek kendi konfigürasyonlarını ister, Master’dan gelen komutları uygular ve konfigürasyon durumlarını Master’a raporlar.
Bu makalede, Puppet’in 4. sürümünü CentOS 7 işletim sistemi üzerinde bir Master-Agent mimarisinde nasıl kuracağınızı ve temel bir konfigürasyonu nasıl uygulayacağınızı adım adım anlatacağız. Puppet 4, önceki sürümlere göre performans iyileştirmeleri, daha modern bir kod tabanı ve bazı yeni özellikler sunmuştur. CentOS 7 ise kurumsal ortamlarda yaygın olarak kullanılan stabil ve güvenilir bir Linux dağıtımıdır. Bu rehber, Puppet ile otomasyon dünyasına adım atmak isteyen sistem yöneticileri ve DevOps mühendisleri için kapsamlı bir başlangıç noktası olacaktır.
Ön Gereksinimler
Puppet Master ve Agent kurulumuna başlamadan önce, ortamınızın belirli gereksinimleri karşıladığından emin olmanız gerekmektedir. Bu gereksinimler, kurulumun sorunsuz ilerlemesi ve sistemin düzgün çalışması için kritik öneme sahiptir.
İşletim Sistemi
- Her iki sunucu (Master ve Agent) için de CentOS 7 yüklü ve güncel olmalıdır. Güncellemeleri yapmak için aşağıdaki komutu kullanabilirsiniz:
sudo yum update -y
Ağ Yapılandırması
- Statik IP Adresleri: Hem Puppet Master hem de Puppet Agent sunucularının statik IP adreslerine sahip olması önerilir. Dinamik IP adresleri, sunucular yeniden başlatıldığında değişebilir ve bu da iletişimi bozabilir.
- Hostname Çözümlemesi: Sunucular arasında hostname ile iletişim kurulabilmesi için isim çözümlemesinin düzgün çalışması gerekir.
- Her iki sunucunun da kendi hostname’i doğru bir şekilde ayarlanmalıdır. Örneğin:
sudo hostnamectl set-hostname puppetmaster.example.comsudo hostnamectl set-hostname puppetagent.example.com - DNS Kayıtları: Eğer bir DNS sunucunuz varsa, Master ve Agent sunucularının A kayıtlarını ve PTR kayıtlarını (isteğe bağlı) eklemeniz en iyi yöntemdir.
/etc/hostsDosyası: DNS sunucusu olmayan ortamlarda veya küçük kurulumlarda, her iki sunucunun/etc/hostsdosyasına diğer sunucunun IP adresi ve hostname’i eklenmelidir.Puppet Master’ın
/etc/hostsdosyasına ekleyin:192.168.1.100 puppetmaster.example.com puppetmaster 192.168.1.101 puppetagent.example.com puppetagentPuppet Agent’ın
/etc/hostsdosyasına ekleyin:192.168.1.100 puppetmaster.example.com puppetmaster 192.168.1.101 puppetagent.example.com puppetagentNot: IP adreslerini ve hostname’leri kendi ortamınıza göre düzenlemeyi unutmayın.
- Bağlantı Testi: Sunucular arasında ping veya SSH ile bağlantı kurabildiğinizden emin olun.
ping puppetmaster.example.comping puppetagent.example.com
- Her iki sunucunun da kendi hostname’i doğru bir şekilde ayarlanmalıdır. Örneğin:
SELinux ve Firewall Durumu
- SELinux: CentOS 7’de SELinux varsayılan olarak etkindir ve bazı durumlarda Puppet’in düzgün çalışmasını engelleyebilir. Kurulum sırasında sorun yaşamamak için geçici olarak devre dışı bırakabilir veya uygun kuralları ekleyebilirsiniz. Güvenlik nedeniyle kalıcı olarak devre dışı bırakmak yerine, gerekli izinleri tanımlamak daha doğru bir yaklaşımdır.
Geçici olarak devre dışı bırakmak için:
sudo setenforce 0Kalıcı olarak devre dışı bırakmak için
/etc/selinux/configdosyasını düzenleyin:SELINUX=enforcing # Bunu enforcing yerine disabled yapın sudo rebootMakalenin ilerleyen bölümlerinde SELinux’u etkin tutmak için gerekli ayarlamalardan bahsedeceğiz.
- Firewall (firewalld): CentOS 7’de varsayılan olarak
firewalldetkindir. Puppet Master sunucusunun, Agent’lardan gelen bağlantıları kabul edebilmesi için 8140 TCP portunun açılması gerekmektedir.Puppet Master’da 8140 portunu açmak için:
sudo firewall-cmd --add-port=8140/tcp --permanent sudo firewall-cmd --reloadPuppet Agent sunucusunda dışarıdan gelen bir bağlantı olacağı için özel bir firewall ayarı yapmaya gerek yoktur. Ancak Agent’ın Master’a 8140 portundan erişebildiğinden emin olun.
Sistem Kaynakları
- Puppet Master: Puppet Master, Agent’lardan gelen istekleri işlediği ve konfigürasyonları derlediği için daha fazla kaynağa ihtiyaç duyar.
- RAM: En az 2 GB RAM (küçük ortamlar için), daha büyük ortamlar için 4 GB veya daha fazlası önerilir. Puppet Server Java tabanlı olduğu için bellek tüketimi yüksek olabilir.
- CPU: En az 2 CPU çekirdeği.
- Puppet Agent: Agent’lar daha az kaynağa ihtiyaç duyar.
- RAM: En az 512 MB RAM.
- CPU: En az 1 CPU çekirdeği.
Bu ön gereksinimleri tamamladıktan sonra, Puppet Master ve Agent kurulum adımlarına geçmeye hazırız.
Master Sunucu Kurulumu
Puppet Master sunucusu, tüm konfigürasyon yönetiminin merkezidir. Bu sunucu, Puppet manifestlerini, modüllerini ve Agent’ların konfigürasyonunu derlemek için gereken tüm araçları barındırır.
Puppet Labs Deposu Ekleme
Puppet paketleri CentOS’un varsayılan depolarında bulunmaz. Bu nedenle, Puppet Labs’ın kendi deposunu sisteme eklememiz gerekmektedir. Bu depo, Puppet Server ve Agent paketlerini içerir.
sudo rpm -Uvh https://yum.puppet.com/puppet4/puppet4-release-el-7.noarch.rpm
Bu komut, Puppet 4 için gerekli olan RPM deposunu sisteminize ekleyecektir. yum komutları artık bu depodan Puppet paketlerini bulabilir.
Puppet Server Kurulumu
Depoyu ekledikten sonra, puppetserver paketini yükleyebiliriz:
sudo yum install -y puppetserver
Bu komut, Puppet Master sunucusunun çalışması için gerekli olan tüm bağımlılıkları ve puppetserver uygulamasını yükleyecektir.
Java Bellek Ayarları
Puppet Server, Java Sanal Makinesi (JVM) üzerinde çalışır ve varsayılan olarak belirli bir bellek miktarı ile yapılandırılır. Küçük ortamlar için varsayılan ayarlar yeterli olabilirken, daha büyük ortamlar veya yüksek yük altında çalışan sunucular için JVM’e ayrılan belleği artırmak gerekebilir. Bu ayar, /etc/sysconfig/puppetserver dosyasında yapılır.
sudo vi /etc/sysconfig/puppetserver
Dosyayı açtıktan sonra, JAVA_ARGS değişkenini bulun ve -Xms (başlangıç bellek boyutu) ve -Xmx (maksimum bellek boyutu) değerlerini ayarlayın. Örneğin, 2 GB bellek ayırmak için:
JAVA_ARGS="-Xms2g -Xmx2g -XX:MaxPermSize=256m"
Not: MaxPermSize Puppet 8’den itibaren kaldırılmıştır, ancak Puppet 4’te hala kullanılabilir. Ortamınızın RAM kapasitesine göre bu değerleri ayarlayın.
Firewall Ayarları
Puppet Master’ın Agent’lardan gelen bağlantıları kabul edebilmesi için 8140 TCP portunun açık olması gerekmektedir. Bu port, Puppet’in varsayılan iletişim portudur.
sudo firewall-cmd --add-port=8140/tcp --permanent
sudo firewall-cmd --reload
Bu komutlar, firewalld servisine 8140 portunu kalıcı olarak açmasını söyler ve ardından firewall kurallarını yeniden yükler.
SELinux Ayarları (Opsiyonel ama Önemli)
Eğer SELinux’u devre dışı bırakmak istemiyorsanız (ki bu güvenlik açısından önerilen bir yaklaşımdır), Puppet Server’ın düzgün çalışması için bazı SELinux politikalarının ayarlanması gerekebilir. Genellikle, Puppet’in varsayılan kurulumu için SELinux politikaları yeterlidir. Ancak özel modüller veya dosya erişim sorunları yaşarsanız, aşağıdaki gibi izinler eklemeniz gerekebilir:
sudo semanage fcontext -a -t puppet_var_lib_t "/opt/puppetlabs/server/data/puppetserver(/.*)?"
sudo restorecon -Rv /opt/puppetlabs/server/data/puppetserver
Bu, Puppet Server’ın veri dizinleri için doğru SELinux bağlamını ayarlar. Çoğu durumda, Puppet’in kendi politikaları zaten bu tür erişimleri yönetir. Eğer setenforce 0 ile geçici olarak devre dışı bıraktıysanız, kurulum sonrası testleri yapıp SELinux’u tekrar enforcing moduna alıp sorun olup olmadığını gözlemleyebilirsiniz. Sorun yaşarsanız, audit2allow aracıyla özel kurallar oluşturabilirsiniz.
Puppet Server Servisini Başlatma ve Etkinleştirme
Tüm ayarları yaptıktan sonra, Puppet Server servisini başlatabilir ve sistem başlangıcında otomatik olarak başlaması için etkinleştirebiliriz:
sudo systemctl start puppetserver
sudo systemctl enable puppetserver
Servisin durumunu kontrol etmek için:
sudo systemctl status puppetserver
Durumun “active (running)” olduğunu görmelisiniz. Herhangi bir hata durumunda, log dosyalarını (/var/log/puppetlabs/puppetserver/puppetserver.log) kontrol edin.
Path Ayarları
Puppet komutlarını (puppet, puppetserver vb.) doğrudan çalıştırabilmek için, bu komutların bulunduğu dizinlerin PATH ortam değişkeninde tanımlı olması faydalıdır. Puppet 4, komutları /opt/puppetlabs/bin dizinine yükler. Bu dizin genellikle varsayılan olarak PATH’e eklenir, ancak emin olmak için kontrol edebilirsiniz:
echo $PATH
Eğer /opt/puppetlabs/bin PATH’te yoksa, kullanıcı profilinize ekleyebilirsiniz:
echo 'export PATH=$PATH:/opt/puppetlabs/bin' >> ~/.bashrc
source ~/.bashrc
Bu adım, Puppet komutlarını her yerden kolayca çalıştırmanıza olanak tanır.
Agent Sunucu Kurulumu
Puppet Agent sunucuları, Puppet Master’dan konfigürasyonları alır ve kendi üzerlerinde uygular. Her Agent, Master ile belirli aralıklarla iletişime geçer ve konfigürasyon durumunu raporlar.
Paket Deposu Ekleme
Tıpkı Master sunucusunda olduğu gibi, Agent sunucularına da Puppet Labs deposunu eklememiz gerekiyor:
sudo rpm -Uvh https://yum.puppet.com/puppet4/puppet4-release-el-7.noarch.rpm
Puppet Agent Kurulumu
Depoyu ekledikten sonra, puppet-agent paketini yükleyebiliriz:
sudo yum install -y puppet-agent
Bu komut, Puppet Agent’ın çalışması için gerekli olan tüm bağımlılıkları ve uygulamayı yükleyecektir.
Puppet Agent Yapılandırması
Agent’ın Puppet Master’ı bulabilmesi için /etc/puppetlabs/puppet/puppet.conf dosyasında server ayarını yapmamız gerekir.
sudo vi /etc/puppetlabs/puppet/puppet.conf
[main] bölümünün altına veya bu bölüm yoksa oluşturarak aşağıdaki satırı ekleyin:
[main]
certname = puppetagent.example.com # Agent'ın hostname'i
server = puppetmaster.example.com # Puppet Master'ın hostname'i
certname değeri, Agent’ın Puppet Master’a kendini tanıtacağı isimdir. Bu genellikle Agent’ın tam nitelikli alan adı (FQDN) olmalıdır. server değeri ise Puppet Master sunucusunun FQDN’sidir.
Firewall Ayarları
Puppet Agent sunucusu, Master’a bağlantı başlattığı için gelen bağlantıları kabul etmesi gerekmez. Bu nedenle, Agent tarafında özel bir firewall kuralı eklemeye gerek yoktur. Ancak, Agent’ın Master’ın 8140 portuna erişebildiğinden emin olun.
SELinux Ayarları
Agent tarafında da SELinux’un etkin olması durumunda, Puppet’in düzgün çalışabilmesi için gerekli izinlerin sağlanması önemlidir. Genellikle puppet-agent paketi, kurulum sırasında gerekli SELinux bağlamlarını ayarlar. Ancak, özel durumlar veya dosya erişim sorunları yaşarsanız, hata mesajlarını kontrol ederek uygun SELinux kurallarını eklemeniz gerekebilir. Çoğu durumda, Puppet Agent varsayılan SELinux politikalarıyla sorunsuz çalışır.
Puppet Agent Servisini Başlatma ve Etkinleştirme
Yapılandırmayı tamamladıktan sonra, Puppet Agent servisini başlatabilir ve sistem başlangıcında otomatik olarak başlaması için etkinleştirebiliriz:
sudo systemctl start puppet
sudo systemctl enable puppet
Servisin durumunu kontrol etmek için:
sudo systemctl status puppet
Durumun “active (running)” olduğunu görmelisiniz. Agent varsayılan olarak 30 dakikada bir Master ile iletişime geçmeye çalışacaktır. Ancak biz bu işlemi manuel olarak tetikleyeceğiz.
Master-Agent Arası İletişim ve Sertifika İmzalama
Puppet, Master ve Agent arasındaki iletişimi güvenli hale getirmek için SSL sertifikalarını kullanır. Her Agent, ilk bağlantısında Master’dan bir sertifika ister ve Master bu isteği onaylayıp imzalamadan önce Agent’ın kimliğini doğrular. Bu, Master’ın yalnızca yetkili Agent’larla iletişim kurmasını sağlar.
Agent Tarafında Sertifika İsteği Gönderme
Agent sunucusunda, Master’a bir sertifika isteği göndermek için aşağıdaki komutu çalıştırın:
sudo /opt/puppetlabs/bin/puppet agent --test --server puppetmaster.example.com
Veya daha kısa haliyle:
sudo puppet agent -t --server puppetmaster.example.com
Bu komut, Agent’ın Master’a bağlanmasını ve bir sertifika isteği göndermesini sağlar. Komutun çıktısında, Agent’ın sertifika isteği gönderdiğini ve Master’ın imzalamasını beklediğini belirten bir mesaj görmelisiniz (örn. “Exiting; no certificate found and waitforcert is disabled”).
Master Tarafında Sertifika İmzalama
Puppet Master sunucusuna geçin. Agent’ın sertifika isteğini görmek için aşağıdaki komutu kullanın:
sudo /opt/puppetlabs/bin/puppet cert list
Bu komut, bekleyen sertifika isteklerinin bir listesini gösterecektir. Çıktıda puppetagent.example.com gibi Agent’ınızın hostname’ini görmelisiniz (örn. ” “puppetagent.example.com” (SHA256) …”).
Agent’ın sertifikasını imzalamak için:
sudo /opt/puppetlabs/bin/puppet cert sign puppetagent.example.com
Sertifika başarıyla imzalandığında, “Notice: Signed certificate for puppetagent.example.com” gibi bir mesaj görmelisiniz. Tüm sertifikaları listelemek için puppet cert list --all komutunu kullanabilirsiniz.
Agent Tarafında Sertifika Kontrolü
Sertifika imzalandıktan sonra, Agent sunucusuna geri dönün ve sertifikayı Master’dan almak ve konfigürasyonu uygulamak için puppet agent komutunu tekrar çalıştırın:
sudo puppet agent -t --server puppetmaster.example.com
Bu sefer, Agent Master ile güvenli bir şekilde iletişim kurabilmeli ve herhangi bir konfigürasyon değişikliği varsa bunları uygulayabilmelidir. Eğer henüz bir konfigürasyon tanımlamadıysak, “Notice: Applied catalog in …s” gibi bir mesaj görmelisiniz, bu da Agent’ın Master’dan bir katalog aldığını ve uyguladığını gösterir (şu an için boş bir katalog olsa bile).
Bu adımlarla Master ve Agent arasındaki güvenli iletişim kurulmuş ve sertifika değişimi tamamlanmıştır. Artık Agent’lar, Master’dan konfigürasyonları almaya hazırdır.
Basit Bir Puppet Manifest Oluşturma ve Uygulama
Puppet’in temel gücü, sistemlerin istenen durumunu tanımlayan manifestler aracılığıyla konfigürasyonları otomatikleştirmesidir. Bu bölümde, Agent sunucusunda basit bir dosya oluşturmak için bir Puppet modülü oluşturacak ve bunu uygulayacağız.
Puppet Manifest Yapısı
Puppet Master, konfigürasyonları /etc/puppetlabs/code/environments/production dizininde tutar. Bu dizinin altında iki ana bölüm vardır:
manifests: Ana site manifest dosyalarını (örn.site.pp) içerir.modules: Yeniden kullanılabilir konfigürasyon birimleri olan modülleri barındırır.
Master Üzerinde Modül Oluşturma
Agent’a bir karşılama mesajı (MOTD – Message of the Day) dosyası oluşturacak basit bir modül oluşturalım. Modülümüzün adı my_motd olsun.
sudo mkdir -p /etc/puppetlabs/code/environments/production/modules/my_motd/{manifests,files}
Şimdi modülün manifest dosyasını oluşturalım: /etc/puppetlabs/code/environments/production/modules/my_motd/manifests/init.pp
sudo vi /etc/puppetlabs/code/environments/production/modules/my_motd/manifests/init.pp
İçeriği aşağıdaki gibi yapın:
class my_motd {
file { '/etc/motd':
ensure => file,
content => "Bu sunucu Puppet tarafından yönetilmektedir. Hoş geldiniz!\n",
mode => '0644',
owner => 'root',
group => 'root',
}
}
Bu Puppet kodu, /etc/motd yolunda bir dosya (file kaynağı) oluşturur. ensure => file dosyanın var olmasını sağlar, content içeriğini belirler, mode dosya izinlerini ayarlar, owner ve group ise dosyanın sahibi ve grubunu belirler.
Site Manifest Düzenleme
Şimdi bu modülü Agent sunucumuza uygulamak için site.pp dosyasını düzenlememiz gerekiyor. Bu dosya, belirli Agent’lara veya tüm Agent’lara hangi modüllerin veya kaynakların uygulanacağını tanımlar.
sudo vi /etc/puppetlabs/code/environments/production/manifests/site.pp
Dosyanın içeriğini aşağıdaki gibi yapın:
node 'puppetagent.example.com' {
class { 'my_motd': }
}
Bu kod, puppetagent.example.com hostname’ine sahip olan Agent’a my_motd sınıfını uygulamasını söyler. Eğer tüm Agent’lara uygulamak isterseniz node default {} bloğunu kullanabilirsiniz.
Not: Puppet Master’da yaptığınız her değişiklikten sonra, Puppet Server’ı yeniden başlatmak genellikle gerekmez, çünkü Puppet Server değişiklikleri otomatik olarak algılar. Ancak bazen önbellek sorunları yaşarsanız yeniden başlatmak faydalı olabilir: sudo systemctl restart puppetserver
Agent Tarafında Uygulama
Agent sunucusuna geri dönün ve Master’dan yeni konfigürasyonu almak ve uygulamak için puppet agent komutunu çalıştırın:
sudo puppet agent -t --server puppetmaster.example.com
Komutun çıktısında, Puppet’in my_motd sınıfını uyguladığını ve /etc/motd dosyasını oluşturduğunu veya güncellediğini görmelisiniz. Örneğin, “Notice: /Stage[main]/My_motd/File[/etc/motd]/content: content changed ‘…’ to ‘…'” gibi bir satır görebilirsiniz.
Şimdi Agent sunucusunda /etc/motd dosyasının içeriğini kontrol edin:
cat /etc/motd
Çıktıda “Bu sunucu Puppet tarafından yönetilmektedir. Hoş geldiniz!” mesajını görmelisiniz.
Tebrikler! Puppet Master-Agent kurulumunu başarıyla tamamladınız ve ilk konfigürasyonunuzu uyguladınız. Puppet Agent varsayılan olarak 30 dakikada bir Master ile iletişime geçerek konfigürasyonu otomatik olarak kontrol edecek ve uygulayacaktır. Bu periyodu /etc/puppetlabs/puppet/puppet.conf dosyasında runinterval ayarıyla değiştirebilirsiniz.
Sık Karşılaşılan Sorunlar ve Çözümleri
Puppet kurulumu ve yapılandırması sırasında bazı yaygın sorunlarla karşılaşılabilir. İşte bunlardan bazıları ve olası çözümleri:
1. Sertifika Sorunları
- Sorun: Agent, Master’a bağlanamıyor ve “certificate verify failed” veya “hostname does not match the server certificate” gibi hatalar alıyor.
- Çözüm:
- Hostname Çözümlemesi: Master ve Agent’ın hostname’lerinin doğru bir şekilde çözümlendiğinden emin olun (DNS veya
/etc/hostsdosyası). - Zaman Senkronizasyonu: Master ve Agent sunucularının zamanlarının senkronize olduğundan emin olun (NTP kullanın). Zaman farkları sertifika hatalarına neden olabilir.
- Yanlış Sertifika: Agent daha önce başka bir Master ile iletişim kurduysa veya sertifikası bozulduysa, Agent’taki ve Master’daki eski sertifikaları temizlemeniz gerekebilir.
Agent’ta:
sudo rm -rf /etc/puppetlabs/puppet/sslMaster’da:
sudo puppet cert clean puppetagent.example.comDaha sonra Agent’ta tekrar sertifika isteği gönderin ve Master’da imzalayın.
- Hostname Çözümlemesi: Master ve Agent’ın hostname’lerinin doğru bir şekilde çözümlendiğinden emin olun (DNS veya
- Çözüm:
2. Firewall Engellemeleri
- Sorun: Agent, Master’a bağlanamıyor ve “Connection refused” veya “Connection timed out” hataları alıyor.
- Çözüm:
- Master Firewall: Puppet Master’da 8140 TCP portunun açık olduğundan emin olun (
sudo firewall-cmd --list-all). - Ağ Bağlantısı: Master ve Agent arasında ağ bağlantısı olduğundan emin olun (ping testi).
- Master Firewall: Puppet Master’da 8140 TCP portunun açık olduğundan emin olun (
- Çözüm:
3. Hostname Çözümleme Sorunları
- Sorun: Puppet Master veya Agent, diğer sunucuyu hostname ile bulamıyor.
- Çözüm:
/etc/hosts: Her iki sunucunun/etc/hostsdosyasının doğru IP ve hostname eşleşmelerini içerdiğinden emin olun.- DNS: DNS sunucusu kullanılıyorsa, A kayıtlarının doğru olduğundan emin olun.
puppet.conf: Agent’taki/etc/puppetlabs/puppet/puppet.confdosyasındakiserverayarının Master’ın doğru FQDN’sini gösterdiğinden emin olun.
- Çözüm:
4. Java Bellek Yetersizliği (Puppet Master)
- Sorun: Puppet Server başlamıyor veya sürekli çöküyor, loglarda “java.lang.OutOfMemoryError” hataları görünüyor.
- Çözüm:
/etc/sysconfig/puppetserverdosyasındakiJAVA_ARGSayarında-Xmxdeğerini artırın (örn.2g,4g). Yeterli RAM’e sahip olduğunuzdan emin olun.
- Çözüm:
5. Puppet Agent’ın Çalışmaması
- Sorun:
puppet agent -tkomutu çalışmıyor veya Agent servisi başlamıyor.- Çözüm:
- Servis Durumu:
sudo systemctl status puppetkomutuyla Agent servisinin durumunu kontrol edin. Hata mesajları için logları (/var/log/puppetlabs/puppet/puppet.log) inceleyin. puppet.conf: Agent’taki/etc/puppetlabs/puppet/puppet.confdosyasının doğru yapılandırıldığından emin olun.
- Servis Durumu:
- Çözüm:
6. SELinux Engellemeleri
- Sorun: Puppet, dosya oluşturma veya servislere erişim gibi işlemlerde hata veriyor ve loglarda “Permission denied” veya “SELinux is preventing…” gibi mesajlar görünüyor.
- Çözüm:
- Denetim Logları:
sudo ausearch -c 'puppet' --raw | audit2allow -M mypuppetkomutunu kullanarak özel SELinux kuralları oluşturmayı deneyin. - Geçici Devre Dışı Bırakma: Sorunu izole etmek için
sudo setenforce 0ile SELinux’u geçici olarak devre dışı bırakıp test edin. Eğer sorun çözülürse, kalıcı bir SELinux politikası oluşturmanız gerekecektir.
- Denetim Logları:
- Çözüm:
Sorun giderme sürecinde, Puppet Master’ın /var/log/puppetlabs/puppetserver/puppetserver.log ve Agent’ın /var/log/puppetlabs/puppet/puppet.log dosyalarını dikkatlice incelemek, hatanın kaynağını anlamak için en iyi başlangıç noktasıdır.
Sonuç
Bu makalede, Puppet 4’ü CentOS 7 üzerinde bir Master-Agent mimarisinde kurma ve temel bir konfigürasyonu uygulama sürecini adım adım ele aldık. Başlangıçta ön gereksinimleri hazırladık, ardından Puppet Master ve Puppet Agent sunucularını ayrı ayrı kurduk ve yapılandırdık. En kritik adımlardan biri olan Master-Agent arasındaki güvenli iletişimi SSL sertifikaları aracılığıyla kurduk ve Agent’ın sertifika isteğini Master üzerinde imzaladık. Son olarak, basit bir Puppet modülü oluşturarak Agent’ın /etc/motd dosyasını yapılandırmayı başardık ve konfigürasyonun başarıyla uygulandığını doğruladık.
Puppet, tekrarlayan görevleri otomatikleştirmek, sistem yapılandırmalarını standartlaştırmak ve altyapıyı kod olarak yönetmek için güçlü bir araçtır. Bu kurulum, Puppet ile otomasyon yolculuğunuzun sadece başlangıcıdır. Elde ettiğiniz bu temel bilgi birikimiyle, daha karmaşık konfigürasyonları yönetmeye başlayabilir ve Puppet’in sunduğu geniş özellik yelpazesini keşfedebilirsiniz.
İleri düzey Puppet kullanımı için keşfedebileceğiniz bazı konular şunlardır:
- Hiera: Konfigürasyon verilerini koddan ayırarak daha esnek ve yönetilebilir bir yapı sağlar. Farklı ortamlara veya düğümlere özgü değerleri kolayca yönetmenize olanak tanır.
- Roles & Profiles: Puppet kodunuzu daha modüler, okunabilir ve sürdürülebilir hale getiren yaygın olarak kullanılan bir tasarım modelidir.
- Control Repository: Tüm Puppet kodunuzu (modüller, manifestler, Hiera verileri) bir sürüm kontrol sisteminde (örn. Git) merkezi olarak yönetmenizi sağlar. Bu, ekip çalışmasını kolaylaştırır ve değişiklik takibini mümkün kılar.
- Puppet Forge: Topluluk tarafından oluşturulmuş binlerce hazır modülü içeren bir depodur. Bu modüller, yaygın yazılımların (Apache, Nginx, MySQL vb.) kurulumunu ve yapılandırmasını hızlandırır.
- Puppet Enterprise: Daha büyük ve kurumsal ortamlar için GUI, raporlama, orkestrasyon ve gelişmiş hata ayıklama özellikleri sunan ticari bir Puppet sürümüdür.
Puppet’i etkin bir şekilde kullanarak, IT altyapınızın yönetimini basitleştirebilir, hataları azaltabilir ve iş süreçlerinizi hızlandırabilirsiniz. Bu rehberin, Puppet dünyasına sağlam bir adım atmanıza yardımcı olduğunu umuyoruz. Unutmayın, pratik yapmak ve belgeleri incelemek, Puppet yeteneklerinizi geliştirmenin anahtarıdır.
