Yeni Başlayanlar İçin Puppet Eğitimi: Temel Bilgiler ve DSL
⚡ Akıllı Özet
Puppet, sunucuların nasıl tedarik edildiğini, yapılandırıldığını ve tutarlılığının nasıl sağlandığını otomatikleştiren açık kaynaklı bir yapılandırma yönetim platformudur. Bildirimsel, alana özgü bir dil aracılığıyla altyapıyı kod olarak uygular ve büyük sunucu filolarında tekrarlayan manuel yönetimi ortadan kaldırır.

Puppet, altyapıyı kod olarak tanımlamanıza ve büyük sunucu filolarını tutarlı, tekrarlanabilir bir durumda tutmanıza olanak tanıyan açık kaynaklı bir yapılandırma yönetim aracıdır. Puppet'ı öğrenmeden önce, öncelikle yapılandırma yönetimini anlayalım.
Yapılandırma Yönetimi nedir?
Yapılandırma yönetimi, sunucular, depolama birimleri ve ağlar gibi yazılım ve bilgisayar sistemlerini bilinen, istenen ve tutarlı bir durumda tutma sürecidir. Ayrıca, proje yönetimi ve denetim amaçları için sistem durumunun doğru bir geçmiş kaydına erişim sağlar.
Sistem yöneticileri çoğunlukla sunucu kurulumu ve yapılandırması gibi tekrarlayan görevler gerçekleştirir. Bu profesyoneller, komut dosyaları yazarak bu işleri otomatikleştirebilirler.
Ancak, devasa bir altyapı üzerinde çalışırken bu iş zorlaşıyor. Bu sorunları çözmek için Puppet gibi yapılandırma yönetimi araçları geliştirildi.
Kukla nedir?
Kukla Puppet, yapılandırma yönetim sürecini merkezileştirmek ve otomatikleştirmek için kullanılan bir sistem yönetim aracıdır. Puppet ayrıca bir yazılım dağıtım aracı olarak da kullanılır.
Bu, sunucu yapılandırması, yönetimi, dağıtımı ve bir kuruluşun tüm altyapısı genelinde çeşitli uygulamaların ve hizmetlerin düzenlenmesi için yaygın olarak kullanılan açık kaynaklı bir yapılandırma yönetim yazılımıdır.
Puppet, Linux yapılandırmasını yönetmek için özel olarak tasarlanmıştır ve Windows sistemler. Ruby'de yazılmıştır ve benzersiz özelliğini kullanır. DOmain Specific Lsistem yapılandırmasını tanımlamak için dil (DSL).
Kukla versiyonları nelerdir?
Kuklanın iki versiyonu mevcuttur:
- Açık Kaynak KuklasıBu, Puppet yapılandırma yönetim aracının temel bir sürümüdür ve Açık Kaynak Puppet olarak da bilinir. Doğrudan Puppet'in web sitesinden edinilebilir ve Apache 2.0 sistemi altında lisanslanmıştır.
- Puppet EnterpriseTicari sürüm, uyumluluk raporlaması, orkestrasyon, rol tabanlı erişim kontrolü, grafik kullanıcı arayüzü (GUI), API ve düğümlerin etkin yönetimi için komut satırı araçları gibi özellikler sunar.
Kukla ne yapabilir?
Örneğin, yaklaşık 100 sunucudan oluşan bir altyapınız olduğunu varsayalım. Sistem yöneticisi olarak, tüm bu sunucuların her zaman güncel ve tam işlevsellikle çalıştığından emin olmak sizin görevinizdir.

Bunu yapmak için, bu sunuculara otomatik olarak dağıtılabilecek basit kodlar yazmanıza olanak tanıyan Puppet'i kullanabilirsiniz. Bu, insan emeğini azaltır ve geliştirme sürecini hızlı ve etkili hale getirir.

Kukla aşağıdaki işlevleri yerine getirir:
- Puppet, her ana bilgisayar için farklı yapılandırmalar tanımlamanıza olanak tanır.
- Bu araç, gerekli yapılandırmanın mevcut olup olmadığını ve değiştirilmediğini doğrulamak için sunucuları sürekli olarak izlemenizi sağlar. Yapılandırma değiştirilirse, Puppet sunucudaki önceden tanımlanmış yapılandırmaya geri döner.
- Ayrıca, yapılandırılmış her sistem üzerinde kontrol sağlar, böylece merkezi bir değişiklik otomatik olarak her yerde uygulanır.
- Aynı zamanda bir dağıtım aracı olarak da kullanılır, çünkü yazılımı sisteme otomatik olarak dağıtır. Uygular Altyapı kod olarak tanımlanır, çünkü politikalar ve yapılandırmalar kod olarak yazılır.
Kukla DSL ve Programlama Paradigmaları
Puppet DSL'yi öğrenmeden önce, programlama paradigmalarını anlayalım. Programlama paradigması, bilgisayar programlamada kullandığınız bir stildir.
Dört tür paradigma şunlardır:
- Zorunlu.
- Bildirimsel.
- İşlevsel (ki bu, bildirimsel paradigmanın bir alt kümesi olarak kabul edilir).
- Nesne odaklı.
Emir kipi ve bildirim kipi paradigmalarına odaklanacağız.
Zorunlu Paradigmalar
Bu programlama paradigması, bir hesaplamanın mantığını (ne yapılacağını) ifade eder ve aynı zamanda kontrol akışını (nasıl yapılacağını) tanımlar.
Örnek:
Diyelim ki ofisinize gidiyorsunuz. Bir taksi çağırıyorsunuz ve şoföre ofise ulaşana kadar adım adım yol tarifi veriyorsunuz. Ne yapılması gerektiğini ve nasıl yapılması gerektiğini belirtmek emir kipidir.
Bildirimsel Paradigmalar
Bu programlama paradigması, bir hesaplamanın mantığını (ne yapılacağını) ifade ederken, kontrol akışını (nasıl yapılacağını) tanımlamaz.
Örnek:
Diyelim ki ofisinize gidiyorsunuz. Bir Uber taksi çağırıyorsunuz ve sadece varış noktasını (ofis) belirtiyorsunuz. Ne yapacağınızı belirtmek, ancak nasıl yapacağınızı belirtmemek, bildirimsel bir stil örneğidir.
| Kip | Ne yapalım | Nasıl yapılacak |
|---|---|---|
| zorunlu | Evet | Evet |
| bildiren | Evet | Yok hayır |
Puppet bildirimsel programlama paradigması kullanıyor
Puppet bildirimsel programlama yaklaşımını kullanır.
Örnek: Sistemde bir kullanıcı oluşturun.
Bu işlem, kabuk betiği içeren zorunlu programlama kalıbı kullanılarak yapılabilir. Burada, kullanıcının nasıl oluşturulacağını ve hangi komutların kullanılacağını belirtiyoruz. işletim sistemi.
Ancak, bu işlem yalnızca birkaç satır Puppet kodu ve Puppet alan özel dili (DSL) kullanılarak da bildirimsel bir programlama modeliyle yapılabilir ve yine de aynı sonuç elde edilebilir.
Yapılandırma yönetimi araçlarının dağıtım modelleri
Bunun için iki dağıtım modeli vardır konfigürasyon yönetimi araçları:
- İtme tabanlı dağıtım modeli: bir ana düğüm tarafından başlatılır.
- Çekme tabanlı dağıtım modeli: aracılar tarafından başlatılır.
Push tabanlı dağıtım modeli
Bu dağıtım modelinde, ana sunucu yapılandırmaları ve yazılımları ayrı ayrı aracı sunuculara gönderir. Güvenli bir bağlantı doğrulandıktan sonra, ana sunucu aracı sunucular üzerinde uzaktan komutlar çalıştırır. Örneğin, yanıtlayıcı ' ve Tuz Yığını.
Çekme tabanlı dağıtım modeli
Bu dağıtım modelinde, bireysel sunucular bir ana sunucuyla iletişime geçer, bağlantıyı doğrular ve güvenli bir şekilde kurar, yapılandırmalarını ve yazılımlarını indirir ve ardından kendilerini buna göre yapılandırır; örneğin, Puppet ve Chef.
Kukla nasıl çalışır?
Puppet, ajan düğümlerinin düzenli olarak (her işlemden sonra) kontrol ettiği bir çekme dağıtım modeline dayanmaktadır. 1800 Saniyeler içinde ana düğümle bağlantı kurarak aracıda güncellenmesi gereken bir şey olup olmadığını kontrol eder. Eğer bir güncelleme gerekiyorsa, aracı gerekli Puppet kodunu ana düğümden çeker ve gerekli işlemleri gerçekleştirir.
Bunu bir ana-temsilci kurulumu örneğiyle açıklayalım.
Usta
Bu, üzerine Puppet master yazılımının kurulu olduğu Linux tabanlı bir makinedir. Puppet kodu biçimindeki yapılandırmaları sürdürmekten sorumludur. Master düğümü yalnızca Linux olabilir.
Ajanlar
Bunlar, Puppet tarafından yönetilen ve üzerlerine Puppet ajan yazılımının kurulu olduğu hedef makinelerdir.
Bu ajan, Linux gibi desteklenen herhangi bir işletim sisteminde yapılandırılabilir. Windows, Solarisveya Mac OS.
Ana cihaz ile aracı cihaz arasındaki iletişim, güvenli sertifikalar aracılığıyla kurulur.

Kaptan ve Acente arasındaki iletişim
) 1 Adım Ajan ile ana sunucu arasında bağlantı kurulduktan sonra, Puppet ajanı durumuyla ilgili verileri Puppet ana sunucusuna gönderir. Bunlara "Gerçekler" denir ve bu bilgiler arasında ana bilgisayar adı, çekirdek ayrıntıları, IP adresi, dosya adı ayrıntıları vb. bulunur.

) 2 Adım Puppet master bu verileri kullanarak ajana uygulanacak yapılandırmaların bir listesini derler. Bir ajana uygulanacak bu yapılandırma listesi, "protokol" olarak bilinir. katalogBu, paket kurulumu, yükseltme veya kaldırma işlemleri, dosya sistemi oluşturma, kullanıcı oluşturma veya silme, sunucu yeniden başlatma, IP yapılandırma değişiklikleri ve benzerlerini içerebilir.
) 3 Adım Aracı, düğümde gerekli tüm yapılandırma değişikliklerini uygulamak için bu yapılandırma listesini kullanır.
Yapılandırmada herhangi bir sapma yoksa, aracı herhangi bir yapılandırma değişikliği yapmaz ve düğümü aynı yapılandırmayla çalışmaya devam ettirir.

) 4 Adım İşlem tamamlandığında, düğüm Puppet ana sunucusuna yapılandırmanın uygulandığını ve tamamlandığını bildirir.
Kukla Blokları
Puppet, Puppet API'lerini kullanarak raporları üçüncü taraf araçlarla entegre etme esnekliği sağlar.
Kukla yapımında kullanılan dört çeşit yapı taşı şunlardır:
- Kaynaklar
- Sınıflar
- Apaçık
- Modüller
Kukla Kaynakları
Puppet kaynakları, Puppet'in temel yapı taşlarıdır.
Kaynaklar dahili işlevler Puppet'te gerekli işlemleri gerçekleştirmek için arka planda çalışan kodlar.
Kukla Dersleri
Farklı kaynakların bir araya getirilmesiyle oluşturulan tek bir birime sınıf denir.
Kukla Manifestosu
Manifest dosyası, Puppet DSL dosyalarını içeren bir dizindir. Bu dosyalar, Puppet programı anlamına gelen .pp uzantısına sahiptir. Puppet kodu, Puppet sınıflarının tanımlarından veya bildirimlerinden oluşur.
Kukla Modülleri
Modüller, manifest dosyaları ve sınıf tanımları gibi dosya ve dizinlerden oluşan bir koleksiyondur. Puppet'te yeniden kullanılabilir ve paylaşılabilir birimlerdir.
Örneğin, MySQL modül kurulumu ve yapılandırması MySQL, Ve Jenkins modül yönetir Jenkins.

Kukla kaynağı türleri
Genel olarak, bir sistem dosyalardan, kullanıcılardan, servislerden, süreçlerden, paketlerden ve benzerlerinden oluşur. Puppet'te bunlara kaynak denir ve bunlar Puppet'in temel yapı taşlarıdır.
Puppet ajanları üzerindeki tüm işlemler Puppet kaynakları yardımıyla gerçekleştirilir.
Puppet kaynakları, desteklenen herhangi bir platformda çeşitli görevleri ve işlemleri gerçekleştirmek için kullanılan hazır araçlardır. Belirli bir görevi gerçekleştirmek için tek bir Puppet kaynağı kullanabiliriz veya karmaşık uygulama yapılandırma dağıtımlarını gerçekleştirmek için birden fazla Puppet kaynağını birlikte kullanabiliriz.
Kaynaklar farklı türlerde olabilir. Kukla kullanımları kaynaklar hem de kaynak türleri Bir sistemin konfigürasyonunu tanımlamak için.
Üç tür kaynak türü vardır:
- Kukla çekirdeği veya yerleşik kaynak türleri.
- Kukla tanımlı kaynak türleri.
- Kukla özel kaynak türleri.
Kukla çekirdeği veya yerleşik kaynak türleri
Çekirdek veya yerleşik kaynak türleri, Puppet yazılımıyla birlikte gelen önceden oluşturulmuş Puppet kaynak türleridir. Tüm çekirdek veya yerleşik Puppet kaynak türleri Puppet ekibi tarafından yazılır ve bakımı yapılır.
Kukla tanımlı kaynak türleri
Tanımlanmış kaynak türleri, mevcut kaynak türlerinin bir kombinasyonunu kullanarak Puppet bildirimsel dilinde yazılmış hafif kaynak türleridir.
Kukla özel kaynak türleri
Özel kaynak türleri Ruby'de yazılmış tamamen özelleştirilmiş kaynak türleridir.
Puppet kaynak türlerini daha yakından inceleyelim.
Terminalde aşağıdaki komutu yazarak Puppet ile ilgili alt komutların listesini görüntüleyebilirsiniz:
Puppet --help
Bizim durumumuzda “ alt komutuyla ilgileniyoruz.kaynak"Bu bilgiyi, Puppet'in yerleşik kaynak türleri hakkında bilgi bulmak için kullanacağız."
Terminalde, aşağıdaki komutlardan herhangi birini yazarak bir liste görüntüleyebilirsiniz: eylemler Puppet alt komutuyla ilişkilikaynak":
Puppet help resource Puppet resource --help
Bu durumda, biz kaynak alt komut olarak ve –tipler eylem olarak.
Puppet'ın 49 dahili çekirdek kaynak türü vardır.
Terminalde, mevcut Puppet yerleşik kaynak türlerinin listesini görüntülemek için aşağıdaki komutu yazın:
puppet resource –types
Her tür bir listeyi destekler öznitelikleri. Bu özellikler Puppet'ın kaynağı yönetmek için kullandığı ayrıntılı bir açıklama sağlar.
Bir Puppet kaynak türüyle ilişkili tüm öznitelikleri öğrenmek için aşağıdaki komutu kullanın:
puppet describe <resource type name>
Parametreler, söz konusu kaynak türü için mevcut tüm öznitelikleri listeleyecektir.
kukla açıklama paketi
Yeni başlayan birinin yönetilmeyen birçok Puppet kod dosyasını anlaması ve bunlarla ilişki kurması zordur. İşte bu noktada bazı gruplandırmalara ihtiyacımız var.ping İşlemleri birbirine bağlamak. Amaç, bir sunucuda SSH'yi, bir NTP hizmetini veya sıfırdan eksiksiz bir web sunucusunu veya veritabanı sunucusunu yapılandırmak için gereken tüm işlemler gibi tek bir sorunu çözmektir.
Kukla Dersleri Nelerdir?
Kukla dersleri, tek bir ünite halinde bir araya getirilmiş kukla kaynakları koleksiyonudur.
Puppet, yapıyı yeniden kullanılabilir ve düzenli hale getirmek için sınıfları tanıttı.
Öncelikle, sınıf tanımlama sözdizimini kullanarak bir sınıf tanımlamamız gerekiyor. Sınıflar benzersiz olmalı ve aynı isimle yalnızca bir kez tanımlanabilir:
class <class-name> {
<Resource declarations>
}
Örnek:
class ntpconfig {
file {
"/etc/ntp.conf":
ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n",
}
}
Şu ana kadar sadece sınıfı tanımladık; hiçbir yerde kullanmadık. Bu, yazdığımız kodun, bu sınıfı başka bir yerde tanımlamadığımız sürece asla çalıştırılmayacağı anlamına gelir.
Sınıf Beyanı
Kodunuzda tanımlanmış bir sınıfı kullanmak için şunu kullanın: dahil Anahtar kelime.
class ntpconfig {
file {
"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
}
include ntpconfig
Bunu gerçek hayattan bir örnekle anlayalım.
Demo yükleme NTP
Öncelikle, NTP paketinin sunucuda zaten mevcut olmadığından emin olun. NTP paketi sunucuda mevcut değilse, aşağıdaki komut hiçbir sonuç döndürmeyecektir:
rpm -qa | grep -i ntp
Gördüğümüz gibi, NTP paketi sunucuda zaten mevcut. Mevcut NTP paketini kaldıralım:
yum remove ntp
Paketi kaldırdıktan sonra, ntp.conf dosyasının artık mevcut olmadığından emin olun:
ls -lrt /etc/ntp.conf
Aşağıdaki komutu çalıştırarak ntp servisinin mevcut olmadığını doğrulayın:
systemctl status ntp
Kodu kaydetmek için yeni bir .pp dosyası oluşturun. Komut satırından:
vi demontp.pp
Klavyede "i" tuşuna basarak ekleme moduna geçin.
Yeni bir dosya oluşturmak için aşağıdaki kodu yazın:
# Class Definition
class ntpconfig {
# Installing NTP Package
package {"ntp":
ensure=> "present",
}
# Configuring NTP configuration file
file {"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
# Starting NTP services
service {"ntpd":
ensure=> "running",
}
}
Düzenleme işlemini bitirdikten sonra Esc tuşuna basın.
Dosyayı kaydetmek için :wq!
Bir sonraki adım için Kontrol kodda herhangi bir sözdizimi hatası olup olmadığını kontrol edin. Aşağıdaki komutu çalıştırın:
puppet parser validate demontp.pp
Lütfen geçiş işlemini tamamladığınızdan emin olun. kök Kullanıcının aşağıdaki komutu çalıştırarak testi hatasız bir şekilde tamamlayabilmesi sağlanır:
su root
test kod oluşturma sürecindeki bir sonraki adımdır. Duman testi gerçekleştirmek için aşağıdaki komutu çalıştırın:
Puppet applies demontp.pp --noop
Son adım, koşmak Puppet'ı gerçek zamanlı modda çalıştırın ve çıktıyı doğrulayın.
puppet apply demontp.pp
Kukla hiçbir şey yapmadı çünkü demo dersi sadece kısa bir süre içindi. tanımlı Ama değil deklare.
Dolayısıyla, Puppet sınıfını tanımlayana kadar kod uygulanmayacaktır.
Edelim bildirmek kullanarak aynı kodun içindeki demo sınıfını sınıf adını ekle kodun sonunda:
# Class Definition
class ntpconfig {
# Installing NTP Package
package {"ntp":
ensure=> "present",
}
# Configuring NTP configuration file
file {"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
# Starting NTP services
service {"ntpd":
ensure=> "running",
}
}
# Class Declaration
include ntpconfig
Yine, Kontrol kodda herhangi bir sözdizimi hatası olup olmadığını kontrol edin. Aşağıdaki komutu çalıştırın:
puppet parser validate demontp.pp
Lütfen geçiş işlemini tamamladığınızdan emin olun. kök Kullanıcının aşağıdaki komutu çalıştırarak testi hatasız bir şekilde tamamlayabilmesi sağlanır:
su root
Test yapmak kod oluşturma sürecindeki bir sonraki adımdır. Duman testi gerçekleştirmek için aşağıdaki komutu çalıştırın:
Puppet apply demontp.pp --noop
Son adım, koşmak Puppet'ı gerçek zamanlı modda çalıştırın ve çıktıyı doğrulayın.
puppet apply demontp.pp
Bu sefer kod uygulanıyor çünkü sınıf tanımlanıp ardından bildirildi.
ntp.conf dosyasının mevcut olduğundan emin olun:
ls -lrt /etc/ntp.conf
Aşağıdaki komutu çalıştırarak ntp servisinin başlatıldığını doğrulayın:
systemctl status ntpd











