Yeni Başlayanlar İçin Kukla Eğitimi: Kukla Nedir ve Nasıl Kullanılır?
Kuklayı öğrenmeden önce şunu anlayalım:
Yapılandırma Yönetimi nedir?
Konfigürasyon yönetimi, yazılım ve bilgisayar sistemlerinin (örneğin sunucular, depolama, ağlar) bilinen, istenen ve tutarlı bir durumda tutulması 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 sunucuları kurmak, bu sunucuları yapılandırmak vb. gibi tekrarlayan görevleri yerine getirir. Bu profesyoneller, komut dosyaları yazarak bu görevi otomatikleştirebilirler.
Ancak devasa bir altyapı üzerinde çalıştıkları için bu zor bir iş. Bu tür sorunları çözmek için Puppet gibi Yapılandırma Yönetimi aracı tanıtıldı.
Kukla nedir?
Kukla konfigürasyon yönetimi sürecini merkezileştirmek ve otomatikleştirmek için bir sistem yönetim aracıdır. Puppet aynı zamanda bir yazılım dağıtım aracı olarak da kullanılır. Bir kuruluşun tüm altyapısında çeşitli uygulama ve hizmetlerin sunucu yapılandırması, yönetimi, dağıtımı ve orkestrasyonu için yaygın olarak kullanılan açık kaynaklı bir yapılandırma yönetimi 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ı: Açık Kaynak Puppet olarak da bilinen Puppet yapılandırma yönetimi aracının temel sürümüdür. Doğrudan Puppet'in web sitesinden edinilebilir ve Apache 2.0 sistemi altında lisanslanmıştır.
- Kukla İşletmesi: Düğümlerin etkin yönetimi için uyumluluk raporlaması, orkestrasyon, rol tabanlı erişim kontrolü, GUI, API ve komut satırı araçları gibi özellikler sunan ticari sürüm.
Kukla ne yapabilir?
Mesela 100’e yakın sunuculu bir altyapınız var. Bir sistem yöneticisi olarak, tüm bu sunucuların her zaman güncel olmasını ve tam işlevsellikle çalışmasını sağlamak sizin görevinizdir.

Bunu yapmak için, bu sunuculara otomatik olarak dağıtılabilen basit bir kod yazmanıza olanak tanıyan Puppet'ı kullanabilirsiniz. Bu, insan çabasını 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.
- Araç, gerekli yapılandırmanın mevcut olup olmadığını ve değiştirilmediğini doğrulamak için sunucuları sürekli olarak izlemenize olanak tanır. Yapılandırma değiştirilirse Puppet aracı, ana bilgisayardaki önceden tanımlanmış yapılandırmaya geri döner.
- Ayrıca tüm yapılandırılmış sistem üzerinde kontrol sağlar, böylece merkezi bir değişiklik otomatik olarak gerçekleştirilir.
- Yazılımı sisteme otomatik olarak dağıttığı için dağıtım aracı olarak da kullanılır. Aşağıdakileri uygular: Politikalar ve yapılandırmalar kod olarak yazıldığından altyapıyı kod olarak kullanırız.
Kukla DSL ve Programlama Paradigmaları
Puppet DSL'i öğ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 (bu bildirimsel paradigmanın bir alt kümesi olarak kabul edilir)
- Nesne odaklı.
Emir ve Bildirgeye odaklanacağız.
Zorunlu Paradigmalar
Bu programlama paradigması, bir hesaplamanın mantığını (Ne yapılmalı) ifade eder ve kontrol akışını (Nasıl yapılır) açıklar.
Örnek:
Farz edin ki ofisinize gideceksiniz, bir taksi rezervasyonu yapıyorsunuz ve ofise ulaşana kadar şoföre adım adım yol tarifi vermeye başlıyorsunuz. Ne yapılacağını ve nasıl yapılacağını belirtmek zorunlu bir üsluptur.
Bildirimsel Paradigmalar
Bu programlama paradigması, bir hesaplamanın mantığını (Ne yapmalı), kontrol akışını (Nasıl yapmalı) tanımlamadan ifade eder.
Örnek:
Farz edin ki ofisinize gideceksiniz, Uber taksi rezervasyonu yapıyorsunuz ve son varış noktanızı (Ofis) belirliyorsunuz. Ne yapılacağını, nasıl yapılacağını belirtmek bildirimsel bir stildir.
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, bir kabuk betiği ile Zorunlu programlama modeli kullanılarak yapılabilir: Burada kullanıcının nasıl oluşturulacağını ve ekranda hangi komutların kullanılacağını belirtiriz. işletim sistemi.
Bununla birlikte, yalnızca birkaç satırlık kukla kodu ve Puppet alanına özgü dil (DSL) ile Bildirime dayalı programlama modeli kullanılarak yapılabilir ve yine de aynı sonuca ulaşılabilir.
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ımı bireysel aracılara iletir. Güvenli bir bağlantı doğrulandıktan sonra ana, aracılar üzerinde komutları uzaktan ç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şim kurar, güvenli bir bağlantıyı doğrulayıp 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, aracı düğümlerin her işlemden sonra düzenli olarak kontrol ettiği bir Çekme dağıtım modelini temel alır. 1800 Aracıda herhangi bir şeyin güncellenmesi gerekip gerekmediğini görmek için ana düğümle birkaç saniye. Herhangi bir şeyin güncellenmesi gerekiyorsa, temsilci gerekli kukla kodları ustadan alır ve gerekli eylemleri gerçekleştirir.
Bunu bir örnekle açıklayalım:
Örnek: Master – Temsilci Kurulumu:
Usta
Üzerinde Puppet master yazılımının kurulu olduğu Linux tabanlı bir makine. Kukla kodlar biçimindeki yapılandırmaların sürdürülmesinden sorumludur. Ana düğüm yalnızca Linux olabilir.
Ajanlar
Hedef makineler, üzerlerinde kukla aracı yazılımı yüklü olan bir kukla tarafından yönetilir.
Aracı, Linux gibi desteklenen herhangi bir işletim sisteminde yapılandırılabilir veya Windows or Solaris veya Mac OS'ta.
Master ve acente arasındaki iletişim güvenli sertifikalar aracılığıyla kurulur.

Kaptan ve Acente arasındaki iletişim
) 1 Adım Ajan ve ana sunucu arasında bağlantı sağlandıktan sonra, Puppet ajanı durumuyla ilgili verileri Puppet ana sunucusuna gönderir. Bunlara Gerçekler denir: Bu bilgiler ana bilgisayar adını, çekirdek ayrıntılarını, IP adresini, dosya adı ayrıntılarını vb. içerir.

) 2 Adım Puppet Master bu verileri kullanır ve aracıya uygulanacak konfigürasyonu içeren bir liste derler. Bir aracı üzerinde gerçekleştirilecek konfigürasyonun bu listesine, katalog. Bu, paket kurulumu, yükseltmeler veya kaldırmalar, Dosya Sistemi oluşturma, kullanıcı oluşturma veya silme, sunucunun yeniden başlatılması, IP yapılandırma değişiklikleri vb. gibi değiştirilebilir.

) 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.
Konfigürasyonda herhangi bir sapma olmaması durumunda Agent herhangi bir konfigürasyon değişikliği yapmaz ve düğümü aynı konfigürasyonla çalışmaya bırakır.

) 4 Adım Bu işlem tamamlandıktan sonra düğüm, kukla ustasına konfigürasyonun uygulandığını ve tamamlandığını bildiren bir rapor verir.
Kukla Blokları
Puppet, Puppet API'lerini kullanarak Raporları üçüncü taraf araçlarla entegre etme esnekliği sağlar.
Dört tür Puppet yapı taşı vardır
- Kaynaklar
- Sınıflar
- Apaçık
- Modüller
Kukla Kaynakları
Puppet Kaynakları Puppet'ın yapı taşlarıdır.
Kaynaklar dahili işlevler kuklada gerekli işlemleri gerçekleştirmek için arka uçta çalışır.
Kukla Dersleri
Farklı kaynakların birleşimi, sınıf adı verilen tek bir birimde gruplandırılabilir.
Kukla Manifestosu
Manifest, kukla DSL dosyalarını içeren bir dizindir. Bu dosyalar .pp uzantısına sahiptir. .pp uzantısı kukla programı anlamına gelir. Kukla kodu, Kukla Sınıflarının tanımlarından veya bildirimlerinden oluşur.
Kukla Modülleri
Modüller, Manifest'ler, Sınıf tanımları gibi dosya ve dizinlerin bir koleksiyonudur. Puppet'taki yeniden kullanılabilir ve paylaşılabilir birimlerdir.
Örneğin, MySQL Kurulum ve yapılandırma modülü MySQL veya Jenkins'i yönetmek için Jenkins modülü vb.

Kukla kaynağı türleri
Genel olarak bir sistem dosyalardan, kullanıcılardan, hizmetlerden, işlemlerden, paketlerden vb. oluşur. Puppet'ta bunlara kaynak denir. Kaynaklar temel yapı taşlarıdır
Kukla. Kukla ajanlara yönelik tüm operasyonlar kukla kaynaklarının 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 bazı karmaşık uygulama yapılandırmaları 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 ve 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, kukla yazılımıyla birlikte gönderilen önceden oluşturulmuş kukla kaynak türleridir. Tüm çekirdek veya yerleşik Puppet kaynak türleri Puppet ekibi tarafından yazılır ve korunur.
Kukla tanımlı kaynak türleri
Tanımlanan kaynak türleri, mevcut kaynak türlerinin bir kombinasyonu kullanılarak Puppet bildirim dilinde yazılan hafif kaynak türleridir.
Kukla özel kaynak türleri
Özel kaynak türleri Ruby'de yazılmış tamamen özelleştirilmiş kaynak türleridir.
Kukla kaynak türlerini keşfedelim…
Terminalde, Puppet ile ilgili alt komutların listesini görüntülemek için aşağıdaki komutu yazın:
Puppet --help
Bizim durumumuzda “ alt komutuyla ilgileniyoruz.kaynak” dahili kukla 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 kukla alt komutuyla ilişkili “kaynak":
Puppet help resource Puppet resource --help
Bu durumda, kaynak alt komut olarak ve –tipler eylem olarak.
Puppet'ın 49 dahili çekirdek kaynak türü vardır.
Terminalde, kullanılabilir yerleşik kukla 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.
Kukla kaynak türüyle ilişkili tüm öznitelikleri bulmak 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 bir kişinin birçok yönetilmeyen kukla kod dosyasını anlaması ve ilişkilendirmesi zordur. Operasyonları birbirine bağlamak için bazı gruplandırmaya ihtiyaç duyduğumuz yer burasıdır. Amaç, bir sunucu veya ntp hizmeti veya komple bir web sunucusu veya veritabanı sunucusu üzerinde ssh'yi yapılandırmak için gereken tüm işlemler gibi tek bir sorunu sıfırdan çözmektir.
Kukla Dersleri Nelerdir?
Kukla sınıfları, tek bir birim olarak bir araya getirilen kukla kaynaklarının koleksiyonudur.
Puppet, yapıyı yeniden kullanılabilir ve düzenli hale getirmek için sınıfları tanıttı.
Öncelikle sınıf tanımı sözdizimini kullanarak bir sınıf tanımlamamız gerekir; sınıflar benzersiz olmalı ve aynı adla yalnızca bir kez bildirilebilir:
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 ama hiçbir yerde kullanmadık. Yani yazdığımız bu kod, bu sınıfı başka bir yerde ilan etmediğimiz sürece asla çalıştırılmayacaktır.
Sınıf Beyanı
Tanımlanmış bir sınıfı kodda 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 bir durum senaryosu ile anlayalım.
Demo yükleme NTP
Öncelikle NTP paketinin sunucuda mevcut olmadığından emin olun, eğer sunucuda telnet yoksa aşağıdaki komut hiçbir şey 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 mevcut olmadığından emin olun:
ls -lrt /etc/ntp.conf
Aşağıdaki komutu çalıştırarak ntp hizmetinin 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
Klavyeden 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şlemi bittikten sonra: esc tuşuna basın
Dosyayı kaydetmek için :wq!
Bir sonraki adım 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
geçiş yaptığınızdan emin olun. kök komutu çalıştırarak testi hatasız tamamlayabilmek için:
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 ise koşmak kuklayı gerçek modda çalıştırın ve çıktıyı doğrulayın.
puppet apply demontp.pp
Puppet hiçbir şey yapmadı çünkü demo dersi sadece tanımlı Ama değil deklare.
Yani kukla sınıfını ilan edene kadar kod uygulanmayacaktır.
Haydi 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
Yeniden 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
geçiş yaptığınızdan emin olun. kök komutu çalıştırarak testi hatasız tamamlayabilmek için:
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 ise koşmak kuklayı gerçek 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ımlanmış ve daha sonra bildirilmiş.
Ntp.conf dosyasının artık mevcut olduğundan emin olun:
ls -lrt /etc/ntp.conf
Aşağıdaki komutu çalıştırarak ntp hizmetinin başlatıldığını doğrulayın:
systemctl status ntpd