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.

Sistem Yöneticisinin Sunucularda Manuel Olarak Çalışması
Sistem Yöneticisi sunucularda manuel olarak çalışıyor

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.

Puppet Sunucu Yönetimini Otomatikleştiriyor
Puppet Sunucu Yönetimini otomatikleştiriyor

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.

Bildirimsel Paradigmalar

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.

Bildirimsel Paradigmalar

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.

Kukla Ustası Ajan İletişimi
Kukla Ustası Ajan İletişimi

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.

Kaptan ve Acente arasındaki iletişim
Temsilci Gerçekleri Ustaya Gönderir

) 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.

Kaptan ve Acente arasındaki iletişim
Master, Agent'a bir katalog gönderir

) 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.

Kaptan ve Acente arasındaki iletişim
Aracı yapılandırmayı uygular

) 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

  1. Kaynaklar
  2. Sınıflar
  3. Apaçık
  4. 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 Modülleri
Kukla Modülleri

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:

  1. Kukla çekirdeği veya yerleşik kaynak türleri.
  2. Kukla tanımlı kaynak türleri.
  3. 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

Kukla Özel Kaynak Türleri

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		

Kukla Özel Kaynak Türleri

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

Kukla Özel Kaynak Türleri

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

Kukla Özel Kaynak Türleri

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

Demo NTP'yi yükleyin

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

Demo NTP'yi yükleyin

Aşağıdaki komutu çalıştırarak ntp hizmetinin mevcut olmadığını doğrulayın:

systemctl status ntp

Demo NTP'yi yükleyin

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ş.

Demo NTP'yi yükleyin

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

Demo NTP'yi yükleyin