Master of puppet'lar: Puppet uzaktan konfigürasyon yönetim sistemini kurma ve yapılandırma. Master of puppets: Puppet uzaktan konfigürasyon yönetim sistemini kurma ve yapılandırma

Puppet'ı daha etkili bir şekilde kullanmak için modüllerin ve bildirimlerin nasıl oluşturulduğunu anlamanız gerekir. Bu eğitimde, bir Ubuntu 14.04 sunucusunda bir LAMP yığını kurarak bu Puppet bileşenlerinin nasıl çalıştığı konusunda size yol gösterilecektir.

Gereksinimler

  • Puppet'ın Kurulumu (usta ve temsilci). Bu konuda daha fazla bilgi -.
  • Puppet aracı düğümüne hizmet vermek için en az bir Ubuntu 14.04 sanal sunucusu oluşturma yeteneği.

Kukla Kodunun Temelleri

Kaynaklar

Kukla kodu esas olarak kaynaklardan oluşur. Kaynak, sistemin durumunu tanımlayan ve ihtiyaç duyduğu değişiklikleri belirleyen bir kod parçasıdır. Örneğin:

kullanıcı("mitchell":
sağlamak => mevcut,
kullanıcı kimliği => "1000",
gid => "1000",
kabuk => "/bin/bash",
ev => "/ev/mitchell"
}

Kaynak bildirimi aşağıdaki formata sahiptir:

kaynak_tipi("kaynak_adı"
özellik => değer
...
}

Tüm Puppet kaynak türlerini görüntülemek için şu komutu verin:

kukla kaynak türleri

Bu kılavuzda kaynak türleri hakkında daha fazla bilgi edineceksiniz.

Manifestolar

Manifest bir düzenleme betiğidir. .pp uzantılı kukla programlara manifest adı verilir. Varsayılan Puppet bildirimi /etc/puppet/manifests/site.pp şeklindedir.

Sınıflar

Herhangi bir normal programlama dilinde olduğu gibi, orkestrasyonun bazı bölümlerinin düzenlenmesi ve yeniden kullanılmasından sınıflar sorumludur.

Bir sınıf tanımının içinde sınıfın nasıl çalıştığını açıklayan bir kod bloğu bulunur. Bir sınıfı tanımladıktan sonra onu manifestlerde kullanabilirsiniz.

Sınıf tanımı aşağıdaki formata sahiptir:

sınıf örnek_sınıf(
...
kod
...
}

Bu kod example_class sınıfını tanımlar. Kukla kodu küme parantezleri içinde olacaktır.

Sınıf bildirimi, kodda belirli bir sınıfın çağrıldığı yerdir. Puppet bir sınıf bildirimiyle kodunu işler.

Sınıf bildirimi sıradan ve kaynak türüne göre olabilir.

İnclude anahtar sözcüğü kullanılarak koda normal bir sınıf bildirimi eklenir.

örnek_sınıfı dahil et

Kaynak türü olarak bildirildiğinde sınıf, kaynak biçiminde bildirilir:

sınıf("örnek_sınıf":)

Bu bildirim, kodunuza, sınıf niteliklerinin varsayılan değerlerini geçersiz kılan sınıf parametreleri eklemenizi sağlar. Örneğin:

"ana bilgisayar2" düğümü (
class ("apache": ) # apache modülünü kullan
apache::vhost ("example.com": # sankon kaynağını tanımlayın
bağlantı noktası => "80",
docroot => "/var/www/html"
}
}

Modüller

Modül, orkestrasyonun ayrı ayrı bölümlerinin paylaşılmasını ve yeniden kullanılmasını kolaylaştıran, önceden tanımlanmış bir şekilde düzenlenen bir grup bildirim ve diğer dosyalardan oluşur. Modüller, kodu birden fazla bildirime ayırmak için kullanılabildiğinden Puppet kodunun düzenlenmesine yardımcı olur.

Kukla modülleri /etc/puppet/modules dizininde saklanır.

Bir manifesto yazmak

Bir Ubuntu sunucusuna bir LAMP yığını yükleme örneğini kullanarak Puppet bildirimlerini, modüllerini ve sınıflarını yazma alıştırması yapabilirsiniz (sonuç olacaktır).

Dolayısıyla, bir Ubuntu 14.04 sunucusunu düzenlemek ve üzerine bir LAMP yığını yüklemek için aşağıdaki eylemlere yönelik kaynaklara ihtiyacınız vardır:

  • apache2 paketini kuruyoruz.
  • apache2 hizmetini başlatıyorum.
  • paket kurulumu MySQL sunucusu, mysql sunucusu.
  • MySQL hizmetini başlatıyorum.
  • php5 paketini yükleme
  • bir PHP test betiği oluşturma, info.php.
  • her paketi kurmadan önce apt indeksini güncellemek.

Aşağıda böyle bir LAMP yığını kurulumunu gerçekleştirmek için kullanılabilecek üç Puppet kodu örneği bulacaksınız.

İlk örnek size temel bildirimlerin tek bir dosyaya nasıl yazılacağını öğretecektir. İkinci örnek, önceden yazılmış bildirimlere dayalı olarak bir sınıf ve modül oluşturmanıza ve kullanmanıza yardımcı olacaktır. Üçüncü örnek, bir LAMP yığınını kurmak için önceden oluşturulmuş genel modüllerin nasıl kullanılacağını gösterecektir.

Not: Test için yeni bir sanal sunucu kullanmak daha iyidir.

Örnek 1: LAMP'ı tek bildirimle yükleme

Puppet bildirimi aracı düğümüne yazılabilir ve ardından puppet application komutu kullanılarak yürütülebilir (bunu yapmak için bir ana ve aracı kurulumuna sahip olmanız gerekmez).

Bu bölümde, bu tür kaynak bildirimlerini kullanacak bildirimler yazmayı öğreneceksiniz:

  • exec: Komutları çalıştırır.
  • paket: paketleri yükleyin.
  • hizmet: hizmet yönetimi.
  • dosya: dosya yönetimi.

Bir manifest oluşturma

Yeni bir bildirim oluşturun:

sudo vi /etc/puppet/manifests/lamp.pp

Gerekli kaynakları bildirmek için aşağıdaki kodu ekleyin.

# "apt-get update" komutunu çalıştırın
exec("apt-update": # kaynak exec "apt-update"
command => "/usr/bin/apt-get update" # bu kaynağın çalıştırılacağı komut
}
# apache2 paketini yükle
paket("apache2":
require => Exec["apt-update"], # paketi kurmadan önce "apt-update" isteğinde bulunun
emin olun => yüklü,
}
# apache2 hizmetini başlat
hizmet("Apache2":
emin olun => çalışıyor,
}
# mysql sunucusunu kurun
package("mysql-sunucusu":
require => Exec["apt-update"], # yeniden yükleyerek "apt-update" isteğinde bulunun
emin olun => yüklü,
}
# mysql hizmetini başlat
hizmet("mysql":
emin olun => çalışıyor,
}
#php5 paketini yükle
paket("php5":
require => Exec["apt-update"], # kurulumdan önce "apt-update" isteğinde bulunun
emin olun => yüklü,
}
# info.php hizmetini başlat
dosya("/var/www/html/info.php":
emin olun => dosya,
içerik => "", # phpinfo kodu
require => Paket["Apache2"], # "Apache2" paketi için istek
}

Bir bildirimin uygulanması

Yeni bildirimi kullanmak için şu komutu girin:

sudo kukla uygulaması --test

Ortamın durumundaki tüm değişiklikleri görüntüleyen hacimli bir sonuç gösterecektir. Çıktıda herhangi bir hata yoksa harici IP adresinizi veya alan adınızı tarayıcınızda açabilmeniz gerekir. Ekranda bir test testi görünecektir. PHP sayfası yığın hakkında bilgi içerir. Bu Apache ve PHP'nin çalıştığı anlamına gelir.

Artık LAMP yığını Puppet kullanılarak sunucuya yüklendi.

Bu oldukça basit bir manifesttir çünkü bir aracı üzerinde yürütülebilir. Bir Puppet Master'ınız yoksa diğer aracı düğümler bu bildirimi kullanamaz.

Puppet ana sunucusu her 30 dakikada bir sunucu durumu değişikliklerini kontrol eder.

Örnek 2: Bir modül kullanarak LAMP yığınını kurma

Şimdi önceki bölümde yazdığınız LAMP bildirimine dayalı basit bir modül oluşturmayı deneyin.

Bir modül oluşturmak için modüller dizininde yeni bir dizin oluşturun (adı modülün adıyla eşleşmelidir). Bu dizin bir manifest dizini ve bir init.pp dosyası içermelidir. init.pp dosyası Puppet sınıfını belirtir (adı aynı zamanda modülün adıyla da eşleşmelidir).

Modül Oluşturma

Puppet ana sunucusuna gidin ve modül için bir dizin yapısı oluşturun:

cd /etc/puppet/modules
sudo mkdir -p lambası/bildirimleri

Editörde init.pp dosyasını oluşturun ve açın:

sudo vi lamp/manifests/init.pp

Lamba sınıfını dosyaya ekleyin:

sınıf lambası (
}

Bölüm 1'deki manifesto içeriğini kopyalayın ve lamba sınıfı bloğuna yapıştırın. Artık bir lamba sınıfı tanımınız var. Diğer bildirimler bu sınıfı modül olarak kullanabilecektir.

Dosyayı kaydedip kapatın.

Ana bildirimde bir modül kullanma

Artık ana bildirimi yapılandırabilir ve LAMP yığınını sunucuya kurmak için lamba modülünü kullanabilirsiniz.

Puppet ana sunucusunda aşağıdaki dosyayı düzenleyin:

sudo vi /etc/puppet/manifests/site.pp

Büyük ihtimalle açık şu an dosya boş. Aşağıdaki satırları buna ekleyin:

düğüm varsayılanı ( )
düğüm "lamba-1" (
}

Not: Lamp-1'i, yığının yükleneceği Puppet aracınızın ana bilgisayar adıyla değiştirin.

Düğüm bloğu, yalnızca bazı düğümlere uygulanacak Kukla kodunu belirtmenize olanak tanır.

Varsayılan blok, ayrı bir bloğu olmayan tüm aracı düğümler için geçerlidir (boş bırakın). Lamp-1 bloğu, lamp-1 aracı düğümüne uygulanacaktır.

Lamba modülünü kullanan bu bloğa aşağıdaki satırı ekleyin:

Dosyayı kaydedip kapatın.

Artık Puppet aracı düğümü ana sunucudan ayarları indirebilecek ve LAMP yığınını yükleyebilecek. Hemen değişiklik yapmak istiyorsanız aracıda şu komutu çalıştırın:

sudo kukla ajanı --test

Modüller Puppet kodunu yeniden kullanmanın en uygun yoludur. Ayrıca modüller kodunuzu mantıksal olarak düzenlemenize yardımcı olur.

Örnek 3: Genel modülleri kullanarak LAMP'ı yükleme

MySQL modülü de benzer şekilde kullanılır. Düğüm bloğuna aşağıdaki satırları ekleyin:

class("mysql::sunucu":
root_password => "şifre",
}

Ayrıca MySQL modül parametrelerini de iletebilirsiniz.

Info.php'yi istediğiniz konuma kopyalayacak bir kaynak ekleyin. Kaynak parametresini kullanın. Düğüm bloğuna aşağıdaki satırları ekleyin:

file("info.php": # kaynak dosya adı
yol => "/var/www/html/info.php", # hedef yol
emin olun => dosya,
require => Class["apache"], # kullanılacak apache sınıfı
source => "puppet:///modules/apache/info.php", # dosyanın kopyalanacağı konum
}

Bu sınıf bildirimi içerik yerine kaynak parametresini kullanır. Bu seçenek yalnızca dosyanın içeriğini kullanmakla kalmaz, aynı zamanda onu kopyalar.

Puppet, puppet:///modules/apache/info.php dosyasını /etc/puppet/modules/apache/files/info.php dosyasına kopyalayacaktır.

Dosyayı kaydedip kapatın.

Bir info.php dosyası oluşturun.

sudo sh -c "yankı""> /etc/puppet/modules/Apache/files/info.php"

Artık Puppet aracı düğümü ana sunucudan ayarları indirebilecek ve LAMP yığınını yükleyebilecek. Aracı ortamında hemen değişiklik yapmak istiyorsanız şu düğümde komutu çalıştırın:

sudo kukla ajanı --test

Bu komut, geçerli düğüm için tüm güncellemeleri indirecek ve yığını ona yükleyecektir. Apache ve PHP'nin çalıştığından emin olmak için düğümün IP adresini veya etki alanını bir tarayıcıda açın:

http://lamp_1_public_IP/info.php

Çözüm

Artık Puppet modülleri ve bildirimleriyle çalışma konusunda temel bilgiye sahipsiniz. Basit bir bildirim oluşturmayı ve kendiniz modül oluşturmayı deneyin.

Puppet, uygulama yapılandırma dosyalarını yönetmek için mükemmeldir.

Etiketler: ,
Biraz şiir. Görünüşe göre bu makale tüm serinin başlangıç ​​noktası olmalı, ancak hedef kitle hala Puppet Forge ile bireysel, kötü entegre edilmiş modüllerden memnun olmayan Açık Kaynak Puppet Labs ürünlerinin daha deneyimli kullanıcılarıdır. Herhangi bir "kütüphane ve çerçeve" durumunda olduğu gibi, ödenecek bedel, entegre çözümün yazarının dünya görüşünü takip etmektir.

Puppet'ın nasıl çalıştığı hakkında biraz

Kukla öncelikle sistemin son durumunu bildirimsel olarak belirtmek için kullanılan özel bir dildir. Karşılaştırma için, GNU Makefile son derece uygundur; burada bağımlılıkların doğrudan açıklamasına ek olarak, sonuna kadar tuhaflık da mümkündür.

Puppet'ın soyutlaması bunun gibi bir şeydir ( kalıpları kırmak - programlama terimleri hakkında bildiğiniz her şeyi unutun!).

  • Düğüm belirli bir hedef sistem için bir dizi konfigürasyondur. Aslında bu bir sınıfın özel bir durumudur.
  • Sınıf düğüm yapılandırmasına veya diğer sınıflara dahil edilen bir bildirimsel mantık kümesidir. Sınıfın ne örnekleri ne de yöntemleri vardır, ancak mantık içinde tanımlanmış parametreler ve değişkenler vardır. Aslında bu daha ziyade, basitçe kod ekleyerek ve o kadar da banal olmayan bir değişken kapsamına sahip olarak başka bir prosedürü devralabilen bir prosedürdür.
  • Tip- ama bu daha çok klasik bir sınıfa benziyor - bir isme sahip örnekleri varsayar ve kesinlikle verilen parametreler, ama daha fazlası değil. Bir türün belirli bir uygulaması, define aracılığıyla diğer türlerin örneklerini oluşturan bir Puppet betiği olarak veya biraz hayal ürünü bir Ruby uzantısı olarak yazılabilir.
  • Kaynak- bunlar aslında Türlerin adlandırılmış örnekleridir. Her kaynak adı, düğüm (dizin) yapılandırmasındaki belirli bir tür içinde benzersizdir.
  • Değişkenler- kısacası bunlar sabitler... Puppet 4'ten önce kapsamları açısından işler daha da kötüydü. Artık bu yeterlidir: Tanım konumunun dışından kullanım için, sınıf kalıtımı durumu dışında, tam nitelikli bir tanımlayıcının belirtilmesi gerekir.
Puppet, bir ağ veya ilgili altyapı olmadan yerel dağıtım için kullanılabilir. Bu, konteyner görüntüleri oluşturmak için kullanılabilir. Merkezi bir sunucunun terk edilmesini savunan bütün bir hareket bile var.

İdeolojik olarak doğru bir şekilde Puppet altyapısı, hedef sistemde ayrıcalıklı bir hizmet olan bir aracıdan ve aracılardan gelen talep üzerine bildirimsel kaynak dizinleri biçiminde değerli talimatlar dağıtan bir sunucudan oluşur. Güvenlik, özel genel anahtar altyapısı (X.509) düzeyinde uygulanır. Basitçe söylemek gerekirse, HTTPS'dekiyle aynı mekanizmalar, ancak kendi CA'sı ve zorunlu doğrulaması var istemci sertifikası.

Basitleştirilmiş bir biçimde dağıtım prosedürü şuna benzer:

  1. TLS ve X.509 üzerinden işlem yapılması (bağlantı kurulması, CRL güncellemesi, sertifika kısıtlamalarının kontrol edilmesi vb.)
  2. Aracı, önbelleğe alma ve diğer her şeyle birlikte sunucudan bilgi oluşturucuları alır (daha doğrusu, her şey modüllerdeki lib/ klasörlerinden alınır). İlgilendiğiniz bilgileri toplamak için kendi Ruby komut dosyanızı eklemek zor değildir.
  3. Aracı, hedef sistem hakkındaki gerçekleri toplar ve sunucuya gönderir. Tüm gerçekler kukla gerçekleri çağrısı aracılığıyla manuel olarak kolayca görüntülenebilir. Bu gerçekler küresel değişkenler olarak mevcuttur.
  4. Sunucu bir kaynak kataloğu derler ve bunu aracıya gönderir. Bunun altında farklı kavramlardan oluşan bir katman yatıyor.
  5. Agent gerekli olan her şeyi sunucudan çeker ve sistemi belirtilen forma getirir. Aracının kendisi kaynaklarla ne yapacağını bilmez; belirli kaynak türlerinin sağlayıcıların (anlamsal çevirisi tedarikçi değil "uygulayıcı" olacaktır) uygulanmasına güvenir. Bazı sağlayıcılar standarttır ve Puppet paketlerine dahildir, ancak geri kalanı modüllerden çekilir.
Tüm lezzetlerin tadını çıkarmak için şu şekilde ek çörekler vardır:
  • Modül- bildirimsel Puppet komut dosyaları, Puppet için Ruby uzantıları, dosyalar, dosya şablonları, Hiera verileri ve çok daha fazlasından oluşan bir koleksiyon. Daha doğru bir terim "paket" olacaktır.
  • Çevre- bir dizi komut dosyası, modül ve Hiera verisi. Altyapı daha karmaşık hale geldikçe, yapılandırmayı düğümlere göre standart bölmenin ötesine bölmek kaçınılmaz hale geldi. Temel olarak bu, pilot yenilikler ve banal erişim kontrolü için gereklidir (tüm yöneticilerin BT altyapısının tüm düğümlerine erişimi olmadığında).
  • Hiera- hiyerarşik veritabanı. Bu formülasyon çok korkutucu olabilir. Muhtemelen sonraki sürümlerin belgelerinde değiştirilmesinin nedeni budur. Aslında bu, YAML veya JSON dosyalarından yapılandırmayı çıkarmak için son derece basit ve kullanışlı bir mekanizmadır. Hiyerarşi, birden fazla yapılandırma dosyasının okuma sırasını belirleme yeteneğidir; bu dosyaların hiyerarşisi/önceliği.
    • Puppet, işlev çağrısıyla veri getirmenin yanı sıra, ana vurgu olan varsayılan sınıf parametrelerini de çeker.
    • Elbette Hiera, olgu enterpolasyonunu ve hatta özel işlevlerin çağrılmasını destekler.
    • Puppet 4.3'te, aynı işlevselliği yalnızca küresel veritabanını değil aynı zamanda Çevre ve Modül için yerel veritabanını desteklemek için yeniden uyguladık; ancak yazar bunların uygulanmasında zaten çeşitli sorunlar bulmuş (PUP-5983, PUP-5952 ve PUP) -5899), Puppet Labs tarafından anında düzeltildi.
    • Hiyerarşideki tüm dosyalardan değer çıkarmak için çeşitli stratejiler desteklenir:
      • ilk - önceliğe göre bulunan ilk değer döndürülür
      • benzersiz - tüm değerleri tek boyutlu bir dizide toplar ve kopyaları kaldırır
      • hash - bulunan tüm YAML Hash'leri birleştirir. Yinelenen anahtarlar önceliğe göre seçilir.
      • deep aslında karmanın özyinelemeli bir versiyonudur
    • İşin güzel yanı, örnekleme stratejisinin hem arama() işlevi çağrılırken belirlenebilmesidir, çünkü ve cfnetwork modülünde aktif olarak kullanılan özel seekup_options anahtarı aracılığıyla herhangi bir hiyerarşi dosyasında.
  • KuklaDB- esas olarak, gerçekler ve yapılan dağıtımlar hakkındaki raporları kaydetmenize ve daha sonra diğer düğümlerdeki veya seçimlerdeki dizinlere içe aktarmak için kaynakları dışa aktarmanıza olanak tanıyan, ilişkisel bir veritabanı (PostgreSQL) etrafındaki bir iş mantığı katmanı. özel fonksiyonlar. Ayrıca Puppet Dashboard şeklinde bir web arayüzü de bulunmaktadır.
  • X.509 PKI- Ayrı bir altyapıyı yönetmeye gerek kalmadan diğer hizmetler için kullanıma son derece uygun olan, daha önce bahsedilen sertifika altyapısı.
  • MKolektif- bir sunucu grubundaki görevlerin olaya dayalı olarak başlatılması için yararlı bir şey gibi görünüyor, ancak yazarın belirli bir çözümün güvenliği konusunda belirli bir güvensizliği var.
  • Kukla Ocağı- Modülleri yayınlamak ve indirmek için açık bir platform.
  • kontroller biçimindeki diğer bazı özellikler harici cihazlar Cisco ekipmanı türü ve yalın donanım üzerinde dağıtım, ancak bu farklı bir hikaye

Güvenlik ve erişilebilirliğe ilişkin notlar

Puppet Server'ın tüm BT altyapısında savunmasız bir nokta haline geldiğini anlamalısınız çünkü... tüm sistemlerin son konfigürasyonunu belirler. Özel durumlarda, son derece yüksek performansa sahip kritik altyapı öğeleri için ayrı bir sunucu şeklinde bir ayırma yapmak mantıklıdır. Sınırlı erişim ve manuel güncelleme ve ikincisi diğer her şey için.

Puppet Server'ın kullanılabilirliği, tüm altyapının yönetilme yeteneğini belirler. Puppet Server'ı kendi yeteneklerinizden daha güvenilir ve hızlı bir şekilde kurtarılabilir bir üçüncü taraf bulutta sanal bir makinede barındırmak mantıklıdır. Veya birden fazla sunucu kurmalısınız.

Her durumda, Puppet Server'ın konuşlandırılacağı sisteme başka hizmetler yüklememelisiniz. Sanallaştırma ve konteynerleştirme size yardımcı olabilir.

Çoklu yönetici (birkaç ayrı Kukla Sunucusu)

  • Bu durumda yalnızca bir sunucu CA (Sertifika Yetkilisi) görevi görür; bunun kullanılamaması, yeni düğüm eklemenin imkansız olduğu anlamına gelir.
    • Puppet, yerleşik olanın tatmin edici olmaması durumunda üçüncü taraf X.509 altyapısını kullanmanıza olanak tanır.
  • Yapılandırmanın tamamı (Ortam) bir sürüm kontrol sisteminde saklanmalı ve her sunucuya aynı anda dağıtılmalıdır.
  • Ortak olan tek şey, yüksek kullanılabilirlik organizasyonu bu makalenin kapsamı dışında olan PostgreSQL veritabanıdır.
  • Cfpuppetserver modülü, birincil (CA ile) ve ikincil sunucu olarak kurulumları destekler.

Eski sürümlerden bu yana önemli olan ne değişti?

Üreticinin tam bir açıklaması var.
  • Tüm hizmetler JVM, JRuby ve Jetty'ye taşındı. Entegrasyonun bariz avantajlarına rağmen bellek tüketimi açısından dezavantajları da vardır.
  • Koleksiyonların işlenmesi için Lambda işlevleri eklendi - artık Ruby'de koltuk değneklerini kesmeye veya create_resources() yoluyla sapıklığa gerek yok
  • EPP şablonlarını işlemek için bir araç ortaya çıktı - aslında aynı ERB, ancak Ruby yerine Puppet DSL ile,
  • Yapılandırma dosyalarının varsayılan dizin yapısı önemli ölçüde değişti
  • Ortamlar ve Modüller için Veri Sağlayıcılar için destek eklendi (hack'lere artık gerek yok).
  • Küresel Hiera'nın rolünü küçümsemek. Yeni ve ilgili komut kukla aramadır.

Kurulum

Bu süreç oldukça ilkeldir ancak belirli bir adım sırasının izlenmesini gerektirir. Bunu manuel olarak yapmak nankör bir görev olduğundan, yazar size kötü bir şey öğretecektir, yani internetten anlaşılmaz komut dosyaları indirip bunları sisteminizde root olarak çalıştıracaktır.

Üç ana sunucu bileşeni Puppet Server'ın kendisi, PuppetDB ve PostgreSQL'dir. Hepsi bir düğüme sıkıştırılabilir veya iki veya üç sisteme bölünebilir. Puppet Server ve Puppet DB birden çok kez çalıştırılabilir ancak PostgeSQL tek bir hata noktasıdır. PostgeSQL çoğaltma ve kümelemeye yönelik çeşitli yaklaşımlar vardır. Ana ve ikincil sunucular durumunda uygun bir yaklaşım, PuppetDB'nin kendisinde ana ve salt okunur veritabanı düğümü olarak desteklenen, ancak bu tür işlemleri otomatikleştiren Master + Salt Okunur Slave olacaktır. kurulum zaman alır ve bu nedenle cfpuppetserver modülünde henüz mevcut değildir.

Yapılandırmanın kendisi en azından dosya sistemi Puppet Server ile birlikte, ancak bu bir üretim web sunucusuna komut dosyaları yazmaya benzer. En uygun çözüm git deposudur. r10k yardımcı programı, havuzun tüm dallarını çekebilir ve bunları ayrı Ortamlar olarak Puppet Sunucusuna dağıtabilir. r10k bağımlılıkları çekmede oldukça kötü, bu yüzden kütüphaneci-kukla en üstte kullanılıyor. Ana kanonik Kukla Ortamının "üretim" olduğunu hemen belirtmekte fayda var. Bu nedenle konfigürasyon deposu "ana" yerine "üretim" adı verilen bir dal kullanmalıdır.

Sistem gereksinimleri

Donanım üreticinin kendisi tarafından açıklanmaktadır. cfpuppetserver modülü şu anda yalnızca Debian Jessie+ ve Ubuntu Trusty+'ı desteklemektedir.

Git'te yapılandırma

R10k'nin kendisi için deponun konumu pek önemli değil - asıl önemli olan onun kullanılabilirliğidir. Örneğin, test amacıyla, depo aynı sistemde barındırılabilir ve file:// üzerinden erişilebilir. Başlamak için iyi bir yer, codingfuture/puppet-exampleenv yapılandırma örneğidir.
  1. Depoyu klonlama: git clone https://github.com/codingfuture/puppet-exampleenv my-puppet-conf && cd my-puppet-conf
  2. Düzenlemek Genel Ayarlar Yorumlardaki ipuçlarını kullanarak yönetici erişimi:
    • $EDITOR data/common.yaml
  3. Bir düğüm konfigürasyonu oluşturalım:
    • $MY_DOMAIN - kök alan adı (örneğin, example.org)
    • $HOST_NAME - alan adı olmadan istemci ana bilgisayar adı
    • mkdir verileri/$MY_DOMAIN
    • cp data/example.com/puppet.yaml data/$(MY_DOMAIN)/puppet.yaml
    • $EDITOR nano -w data/$(MY_DOMAIN)/puppet.yaml - yorumlardaki önerilere göre Puppet Server ile bir düğüm kurma
    • cp data/example.com/host.yaml data/$(MY_DOMAIN)/$(HOST_NAME).yaml
    • $EDITOR nano -w data/$(MY_DOMAIN)/$(HOST_NAME).yaml - yorumlardaki önerilere göre isteğe bağlı bir düğüm kurma
  4. Kendi Git sunucumuzu çalıştırıyoruz veya rsync veya scp aracılığıyla Puppet Server'lı bir düğümde yerel olarak kullanılabilir hale getiriyoruz. Git sunucusu Puppet'ın kendisinden konuşlandırılana kadar bir ara adım olarak yerel bir depo uygundur. Bu bir bakıma derleyicinin birkaç aşamada toplanmasına benzer.

Temiz bir sisteme sıfırdan kurulum

Cfpuppetserver modülü, Puppet'in kendisini kullanarak her şeyi kurmanıza olanak tanır, ancak ilk kurulumda temel işlemler bir Bash betiği tarafından kopyalanır.

Hedef sistemde:

  1. Kurulum komut dosyasını indirin: wget https://raw.githubusercontent.com/codingfuture/puppet-cfpuppetserver/master/setup_puppetserver.sh
  2. Komut dosyasına bakıyoruz ve kaşlarımızı çatıyoruz: less setup_puppetserver.sh
  3. Çalıştır: bash setup_puppetserver.sh puppet.$(MY_DOMAIN) .
    • Uzak depoya örnek: bash setup_puppetserver.sh ssh:// [e-posta korumalı]/kukla-conf
    • Yerel örnek: bash setup_puppetserver.sh file:///root/puppetconf/
  4. Sistemin nasıl şiştiğini ve her şeyi çok hızlı kurmadığını görüyoruz.
  5. Depo uzaksa:
    • Kök için bir SSH anahtarı oluşturun: ssh-keygen -t rsa -b 2048
    • /root/.ssh/id_rsa.pub genel anahtarını uzak Git sunucusuna kaydediyoruz...
    • ... ve orada şu komutu çağırarak bir Git kancası oluşturduk: /usr/bin/ssh -T konuşlandırmapuppet@puppet.$(MY_DOMAIN) ./puppetdeploy.sh
  6. Yapılandırmayı manuel olarak dağıtmaya başlıyoruz: /etc/puppetlabs/deploy.sh
  7. Sunucunun kendisinde nasıl çalıştığını deneyelim: /opt/puppetlabs/bin/puppet Agent --test
  8. Ağ ayarlarınızı kontrol edin, dalgalanma koruyucusu ve SSH erişimi

Yönetilen düğümler ekleme

  1. Kukla Sunucusunun tam adının, yönetilen ana bilgisayardaki DNS aracılığıyla mevcut olması veya /etc/hosts dosyasına sabit kodlanmış olması gerekir.
    • Örnek: echo "128.1.1.1 kukla.example.com" >> /etc/hosts
  2. Puppet Server'ın bulunduğu düğümde aşağıdaki komut dosyasını /root/genclientinit.sh $(HOST_NAME).$(MY_DOMAIN) çalıştırın.
  3. Sonucun tamamını kopyalayıp yapıştırın Komut satırı hedef sistemde.
  4. Yürütmenin bitmesini bekliyoruz ve /opt/puppetlabs/bin/puppet Agent --test komutunu çalıştırıyoruz. İlk başlatmada bir sertifika imzalama isteği oluşturulacaktır.
  5. Sertifikayı imzalamak için Puppet Server düğümüne gidiyoruz.
    • kukla sertifika listesi - ekstra paranoya için sertifika imzasını kontrol ediyoruz.
    • kukla sertifika işareti $(HOST_NAME).$(MY_DOMAIN) - aslında sertifikayı imzalıyoruz.
  6. Yönetilen düğüme dönüyoruz ve tekrar /opt/puppetlabs/bin/puppet Agent --test` komutunu çalıştırıyoruz. Bu, dağıtım prosedürünü başlamaya zorlayacaktır.
  7. Dağıtımın Puppet Agent aracılığıyla tamamlanmasını bekliyoruz.
  8. İşte bu kadar, minimal bir Puppet altyapınız hazır!

/root/genclientinit.sh dosyasından örnek çıktı

darbe</etc/cflocation fi if test ! -z ""; sonra echo -n >/etc/cflocationpool fi if test ! -z "\$http_proxy"; ardından http_proxy'yi dışa aktarın dışa aktar https_proxy="\$http_proxy" dışa aktar HTTP_PROXY = "\$http_proxy" dışa aktar HTTPS_PROXY = "\$http_proxy" fi echo host.example.com > /etc/ana bilgisayar adı ana makine adı ana bilgisayar.example.com if ! hangi lsb sürümü | Okumak; sonra apt-get install lsb-release fi kod adı=\$(lsb_release -cs) if test -z "\$kod adı"; ardından echo "Doğru kod adı tespit edilemedi" çıkış 1 fi wget https://apt.puppetlabs.com/puppetlabs-release-pc1-\$(kod adı).deb dpkg -i puppetlabs-release-pc1-\$(kod adı) .deb mkdir -p /etc/puppetlabs/puppet cat > /etc/puppetlabs/puppet/puppet.conf<kukla sertifika işareti host.example.com" echo "Farklı nedenlerden dolayı başarısız olursa, döngüyü durdurmak için CTRL+C'yi kullanın" uyku 5 EOT tamamlandı

Modül açıklaması

İlk kurulum betiği için Bash parametrelerinin tam listesi

~# ./setup_puppetserver.sh Kullanım: ./setup_puppetserver.sh [ [ [ [] ] ] ]
  • r10k_repo_url - Git deposunun URI'si
  • certname - ana bilgisayarın tam nitelikli alan adı
  • cflocation - cf_location gerçeğinin başlatılması
  • cflocationpool - cf_location_pool gerçeğinin başlatılması
  • http_proxy - HTTP ve HTTPS istekleri için proxy sunucusu

Puppet istemcisi başlatma komut dosyası için Bash parametrelerinin tam listesi

~# /root/genclientinit.sh Kullanım: ./genclientinit.sh [ [ []]]
Parametrelerin anlamı önceki komut dosyasındakiyle aynıdır.

cfpuppetserver sınıfı

  • konuşlandırma kullanıcısı = "deploypuppet" - yapılandırma güncellemelerinin otomatik olarak dağıtılması için kullanıcı adı
  • Deployuser_auth_keys = undef - $deployuser için anahtarların listesi
  • repo_url = undef - depo URI'si (örnek: ssh://user@host/repo veya file:///some/path)
  • puppetserver = true - Puppet Server bileşeninin bu düğüme yüklenip yüklenmeyeceği
  • puppetdb = true - PuppetDB bileşeninin bu düğüme kurulup kurulmayacağı
  • puppetdb_port = 8081 - PuppetDB için bağlantı noktası
  • setup_postgresql = true - PostgreSQL bileşeninin bu düğüme kurulup kurulmayacağı (yalnızca PuppetDB kurulumu etkinse)
  • service_face = "herhangi biri" - gelen bağlantıları kabul etmek için cfnetwork::iface kaynağının adı
  • puppetserver_mem = auto - Kukla Sunucusu için megabayt cinsinden RAM (minimum 192 MB)
  • puppetdb_mem = auto - PuppetDB için megabayt cinsinden RAM (minimum 192 MB)
  • postgresql_mem = auto - PostgreSQL için megabayt cinsinden RAM (minimum 128 MB)

sınıf cfpuppetserver::puppetdb

  • postgresql_host = "localhost" - veritabanı adresi
  • postgresql_listen = $postgresql_host - değer doğrudan listen_addresses PostgreSQL yönergesine gider
  • postgresql_port = 5432 - veritabanı bağlantı noktası
  • postgresql_user = "puppetdb" - Veritabanındaki PuppetDB kullanıcısı
  • postgresql_pass = "puppetdb" - veritabanındaki PuppetDB kullanıcısının şifresi
  • postgresql_ssl = false - Puppet PKI sertifikalarına dayalı bağlantı şifrelemesini etkinleştir

sınıf cfpuppetserver::puppetserver

  • autosign = false - DMZ dışında bir savaş ortamında KULLANILMAMALIDIR. Yalnızca test otomasyonu için mevcuttur.
  • global_hiera_config = "cfpuppetserver/hiera.yaml" - Puppet kurallarına göre varsayılan Hiera yapılandırma dosyasının yolu (ilk bileşen modülün adıdır, geri kalanı modüldeki dosyalar/klasörün altındaki yoldur)

Sitenin geliştirilmesi için yardım edebilir ve bazı fonları aktarabilirsiniz.



Çok sayıda Unix sistemini yönetmek uygun denemez. Bir parametreyi değiştirmek için yöneticinin her makineyle iletişime geçmesi gerekir; komut dosyaları yalnızca kısmen yardımcı olabilir ve her durumda değil.

Windows ağ yöneticilerinin halen daha avantajlı bir konumda olduklarını kabul etmek gerekir. Grup ilkesi ayarlarını değiştirmek yeterlidir ve bir süre sonra, yakın zamanda kurulmuş bir işletim sistemine sahip olanlar da dahil olmak üzere ağdaki tüm bilgisayarlar, elbette kendilerini ilgilendiriyorsa, yenilik hakkında "öğrenecektir". Unix'in uzun geliştirme sürecine dönüp baktığınızda, bunun gibi hiçbir şeyin şimdiye kadar tutulmadığını fark edeceksiniz. İlk kuruluma yardımcı olan kickstart gibi çözümler var işletim sistemi, ancak daha fazla ayrıntılandırmak önemli çaba gerektirecektir. BladeLogic ve OpsWare gibi ticari çözümler, ayarların otomatikleştirilmesi sorununu yalnızca kısmen çözmektedir; ana avantajları kullanılabilirliktir GUI ve yalnızca büyük kuruluşlardan satın alınabilirler. Elbette ücretsiz çözümler sunan projeler var, ancak varoluşları boyunca hiçbir zaman büyük bir topluluk oluşturamadılar. Örneğin, Cfengine yöneticiler arasında pek popüler değildir, ancak Linux'a ek olarak *BSD, Windows ve Mac OS X'te de kullanılabilir. Bunun nedeni, yapılandırma oluşturmanın göreceli karmaşıklığı olabilir. Görevleri açıklarken, her bir sistemin özelliklerini dikkate almanız ve komutları yürütürken eylem sırasını manuel olarak kontrol etmeniz gerekir. Yani, yönetici bazı sistemler için adduser yazmanız gerektiğini, diğerleri için useradd yazmanız gerektiğini, farklı sistemlerdeki dosyaların konumunu dikkate almanız gerektiğini hatırlamalıdır. Bu, komut yazma sürecini büyüklük sırasına göre karmaşıklaştırır, anında doğru konfigürasyonu oluşturmak çok zordur ve oluşturulan konfigürasyonları bir süre sonra okumak neredeyse imkansızdır. GPL lisansına rağmen Cfengine aslında tüm değişiklikleri kontrol eden ve açık bir toplum inşa etmekle pek ilgilenmeyen tek kişilik bir projedir. Sonuç olarak, cfengine'in yetenekleri geliştirici için oldukça tatmin edicidir, ancak diğer yöneticiler için bu ekstra bir baş ağrısıdır. Cfengine'i iyileştirmek için üçüncü taraf geliştiriciler tarafından çeşitli eklentiler oluşturuldu ve bu genellikle durumu daha da kötüleştirdi. Cfengine için bu tür birkaç modülün yazarı Luke Kanies, sonunda benzer bir araç geliştirmeye karar verdi, ancak cfengine'in pek çok kusuru yoktu.

Kukla Özellikleri

Puppet, cfengine gibi, uygulamalarına yönelik görevleri ve kütüphaneleri tanımlamak için bildirimsel, yani zorunlu bir dil kullanan bir istemci-sunucu sistemidir. İstemciler periyodik olarak (varsayılan olarak 30 dakika) merkezi sunucuya bağlanır ve en son yapılandırmayı alırlar. Alınan ayarlar sistem durumuyla eşleşmiyorsa yürütülecek ve gerekirse gerçekleştirilen işlemlere ilişkin bir rapor sunucuya gönderilecektir. Sunucu, mesajları sistem günlüğüne veya bir dosyaya kaydedebilir, bir RRD grafiği oluşturabilir ve bunları belirtilen bir e-postaya gönderebilir. Ek İşlem ve Kaynak soyutlama katmanları, mevcut ayarlar ve uygulamalarla maksimum uyumluluk sağlayarak, ayrıntılı komutların ve dosya formatlarının uygulanması ve açıklamasındaki farklılıklar konusunda endişelenmeden sistem nesnelerine odaklanmanıza olanak tanır. Yönetici yalnızca nesne türüyle çalışır, gerisini Puppet halleder. Böylece, paket türü yaklaşık 17 paket sistemini bilir; gerekli olan, dağıtım veya sistemin sürümü hakkındaki bilgilere göre otomatik olarak tanınacaktır, ancak gerekirse paket yöneticisi zorlanabilir.

Diğer sistemlerde kullanılması çoğu zaman mümkün olmayan komut dosyalarının aksine, üçüncü taraf yöneticiler tarafından yazılan Puppet yapılandırmaları çoğunlukla diğer ağlarda sorunsuz çalışacaktır. Kukla Yemek Kitabı'nda [ http://www.reductivelabs.com/trac/puppet/tags/puppet%2Crecipe] zaten üç düzine hazır tarif var. Puppet şu anda aşağıdaki işletim sistemlerini ve hizmetlerini resmi olarak desteklemektedir: Debian, RedHat/Fedora, Solaris, SUSE, CentOS, Mac OS X, OpenBSD, Gentoo ve MySQL, LDAP.

Kukla dili

İlerlemek için öncelikle dilin temel unsurlarını ve yeteneklerini anlamalısınız. Dil bunlardan biridir güçlü Kukla. Onun yardımıyla yöneticinin yönetmeyi planladığı kaynaklar ve eylemler açıklanır. Çoğu benzer çözümün aksine Puppet, dilin heterojen bir ortamdaki herhangi bir sistemdeki tüm benzer kaynaklara erişimi basitleştirmesine olanak tanır. Bir kaynak açıklaması genellikle bir ad, tür ve özniteliklerden oluşur. Örneğin, /etc/passwd dosyasına işaret edelim ve onun niteliklerini ayarlayalım:

dosya("/etc/passwd":

sahip => kök,

grup => kök,

Artık sunucuya bağlanan istemciler /etc/passwd dosyasını kopyalayacak ve belirtilen nitelikleri yükleyecektir. Tek bir kuralda birden fazla kaynağı noktalı virgül kullanarak ayırarak tanımlayabilirsiniz. Sunucuda kullanılan konfigürasyon dosyası istemcidekilerden farklıysa veya hiç kullanılmıyorsa ne yapmalısınız? Örneğin bu durum şu durumlarda ortaya çıkabilir: VPN ayarları bağlantılar. Bu durumda dosyaya kaynak yönergesi kullanılarak işaret edilebilir. Başka bir dosyanın yolunu belirtmek için her zamanki gibi burada iki seçenek vardır; iki URI protokolü de desteklenir: dosya ve kukla. İlk durumda, harici bir bağlantı NFS sunucusu, ikinci seçenekte Puppet sunucusunda kaynakları dışa aktaran NFS benzeri bir hizmet başlatılır. İkinci durumda, varsayılan yol kukla kök dizinine göredir - /etc/puppet. Yani, puppet://server.domain.com/config/sshd_config bağlantısı /etc/puppet/config/sshd_config dosyasına karşılık gelecektir. Filebucket direktifini kullanarak bu dizini geçersiz kılabilirsiniz, ancak /etc/puppet/fileserver.conf dosyasında aynı adı taşıyan bölümü kullanmak daha doğrudur. Bu durumda hizmete erişimi yalnızca belirli adreslerden kısıtlayabilirsiniz. Örnek olarak config kısmını anlatalım.

yol /var/puppet/config

*.domain.com'a izin ver

192.168.0'a izin ver.*

192.168.1.0/24'e izin ver

*.wireless.domain.com adresini reddet

Daha sonra kaynağı anlatırken bu bölüme dönüyoruz.

kaynak => "kukla://sunucu.alanadi.com/config/sshd_config"

İki nokta üst üsteden önce kaynağın adı gelir. En basit durumlarda, bir takma adı veya değişkenleri ad olarak belirtebilirsiniz. Takma ad, takma ad yönergesi kullanılarak ayarlanır. dosyanın tam yolu. Daha karmaşık konfigürasyonlarda

dosya("/etc/passwd":

takma ad => şifre

Takma ad oluşturmanın başka bir seçeneği de, farklı işletim sistemleriyle uğraşmanız gerektiğinde iyidir. Örneğin sshd_config dosyasını açıklayan bir kaynak oluşturalım:

dosya(sshdconfig:

isim => $işletim sistemi ? (

solaris => "/usr/local/etc/ssh/sshd_config",

varsayılan => "/etc/ssh/sshd_config"

Bu örnekte bir seçimle karşı karşıyayız. Solaris dosyası ayrı olarak belirtilir, diğerleri için /etc/ssh/sshd_config dosyası seçilecektir. Artık bu kaynağa sshdconfig olarak erişilebilir, işletim sistemine bağlı olarak istenen yol seçilecektir. Örneğin, sshd arka plan programının çalışıp çalışmadığını belirtiriz. yeni dosya hizmeti yeniden başlatmalısınız.

emin olun => doğru,

abone ol => Dosya

Değişkenler genellikle kullanıcı verileriyle çalışırken kullanılır. Örneğin, kullanıcı ana dizinlerinin konumunu açıklıyoruz:

$homeroot = "/home"

Artık belirli bir kullanıcının dosyalarına şu şekilde erişilebilir:

$(homeroot)/$isim

$name parametresi kullanıcının hesap adı ile doldurulacaktır. Bazı durumlarda, bazı türler için varsayılan bir değer tanımlamak uygundur. Örneğin, exec türü için genellikle yürütülebilir dosyayı araması gereken dizinleri belirtirler:

Exec (yol => "/usr/bin:/bin:/usr/sbin:/sbin")

İç içe geçmiş birkaç dosya ve dizine işaret etmeniz gerekiyorsa recurse parametresini kullanabilirsiniz.

dosya("/etc/apache2/conf.d":

kaynak => “kukla:// kukla://sunucu.alanadi.com/config/apache/conf.d”,

yineleme => "doğru"

Birden fazla kaynak, sınıflar veya tanımlar halinde birleştirilebilir. Sınıflar bir sistemin veya hizmetin tam açıklamasıdır ve ayrı olarak kullanılır.

"/etc/passwd": sahip => kök, grup => kök, mod => 644;

"/etc/shadow": sahip => kök, grup => kök, mod => 440

Nesneye yönelik dillerde olduğu gibi sınıflar geçersiz kılınabilir. Örneğin FreeBSD'de bu dosyaların grup sahibi wheel'dir. Bu nedenle, kaynağı tamamen yeniden yazmamak için, linux sınıfını miras alacak yeni bir freebsd sınıfı oluşturalım:

freebsd sınıfı linux'u devralır (

Dosya[“/etc/passwd”] ( grup => tekerlek );

Dosya[“/etc/shadow”] ( grup => tekerlek )

Kolaylık sağlamak için, tüm sınıflar, include yönergesi kullanılarak bağlanabilen ayrı bir dosyaya yerleştirilebilir. Tanımlar bağımsız değişken olarak birden fazla parametre alabilir ancak kalıtımı desteklemez ve yeniden kullanılabilir nesneleri tanımlamanız gerektiğinde kullanılır. Örneğin kullanıcıların ana dizinini ve yeni hesap oluşturmak için gerekli komutları tanımlayalım.

user_homedir'i tanımla ($grup, $tam ad, $gruplar) (

kullanıcı("$isim":

sağlamak => mevcut,

yorum => "$tam ad",

gid => "$grup",

gruplar => $gruplar arası,

üyelik => minimum,

kabuk => "/bin/bash",

ev => "/ev/$isim",

gerektirir => Grup[$grup],

exec("$isim ana dizin":

komut => “/bin/cp -R /etc/skel /home/$isim; /bin/chown -R $isim:$grup /ev/$isim",

oluşturur => "/home/$isim",

gerektirir => Kullanıcı[$isim],

Şimdi yeni bir tane oluşturmak için hesap user_homedir ile iletişime geçmeniz yeterli.

user_homedir("sergej":

grup => "sergej",

tam ad => “Sergej Jaremchuk”,

grup içi => ["medya", "yönetici]

Sınıflar gibi kalıtımı destekleyen düğümlerin ayrı açıklamaları vardır. Bir client Puppet sunucusuna bağlandığında ilgili node bölümü aranacak ve sadece bu bilgisayara özel ayarlar sağlanacaktır. Diğer tüm sistemleri tanımlamak için düğüm varsayılanını kullanabilirsiniz. En azından Kukla dilinin tüm yeteneklerini anlamak için her durumda okunması gereken "Tip Referansı" belgesinde tüm türlerin bir açıklaması verilmiştir. Çeşitli türler belirli koşulların karşılanması (örneğin, bir yapılandırma dosyasının değiştirilmesi), cron ile çalışma, kullanıcı kimlik bilgileri ve gruplar, bilgisayarlar, kaynakları bağlama, hizmetleri başlatma ve durdurma, paketleri yükleme, güncelleme ve kaldırma, çalışma dahil olmak üzere belirli komutları yürütmenize olanak tanır ile SSH anahtarları, Solaris bölgeleri vb. Apt kullanarak dağıtımlardaki paketlerin listesini her gün 2 ila 4 saat arasında güncellenmeye zorlamak işte bu kadar kolaydır.

program (günlük:

dönem => günlük,

aralık =>

exec("/usr/bin/apt-get update":

program => günlük

Bu süreye ilişkin güncelleme her sistem tarafından yalnızca bir kez gerçekleştirilecek, ardından görev tamamlanmış sayılacak ve istemci bilgisayardan silinecektir. Puppet dili diğer tanıdık yapıları destekler: koşullar, işlevler, diziler, yorumlar ve benzerleri.

Kuklanın Kurulumu

Puppet, Faster kütüphanesinin yanı sıra OpenSSL desteği ve XMLRPC kütüphanelerine sahip Ruby (>= 1.8.1) gerektirir. http://reductivelabs.com/projects/facter] Test kurulumu için kullanılan Ubuntu 7.04 deposu zaten yavru paketini içeriyordu.

$ sudo apt-cache arama kuklası

kukla — ağlar için merkezi konfigürasyon yönetimi

puppetmaster - merkezi konfigürasyon yönetimi kontrol arka plan programı

Kurulum sırasında gerekli tüm bağımlılık paketleri kurulacaktır: facter libopenssl-Ruby libxmlrpc-Ruby.

$ sudo apt-get puppet puppetmaster'ı yükle

Ruby kütüphanelerinin kullanılabilirliğini komutla kontrol edebilirsiniz.

$ ruby ​​-ropenssl -e "koyar:evet"

~$ ruby ​​​​-rxmlrpc/client -e "koyar:evet"

Herhangi bir hata alınmazsa, ihtiyacınız olan her şey zaten dahil edilmiştir. Sistemlerin istenen konfigürasyonunu tanımlayan dosyalara Puppet terminolojisinde manifestolar adı verilir. Başlatıldığında, arka plan programı /etc/puppet/manifests/site.pp dosyasını okumaya çalışır; eksikse bir uyarı mesajı görüntüler. Test sırasında arka plan programının çevrimdışı modda çalışmasını söyleyebilirsiniz; bu durumda bildirime gerek kalmaz

$ sudo /usr/bin/puppetmasterd --nonodes

Gerekirse, örneğin sınıf açıklamalarıyla birlikte diğer dosyaları site.pp'ye bağlayabilirsiniz. Bir test çalıştırması için en basit talimatları bu dosyaya girebilirsiniz.

dosya("/etc/sudoers":

sahip => kök,

grup => kök,

Hem sunucu hem de istemciler için tüm yapılandırma dosyaları /etc/puppet dizininde bulunur. Yukarıda bahsettiğimiz fileserver.conf dosyası isteğe bağlıdır ve yalnızca Puppet'ın dosya sunucusu olarak da çalışacak olması durumunda kullanılır. Ubuntu'da bu dosya /etc/puppet/files alt dizinini dışa aktarır. SSL alt dizini, istemcilere bağlanırken şifreleme için kullanılacak sertifikaları ve anahtarları içerir. Anahtarlar, puppetmasterd'ı ilk başlattığınızda otomatik olarak oluşturulur; bunları komutla manuel olarak oluşturabilirsiniz.

$ sudo /usr/bin/ puppetmasterd --mkusers.

puppetd.conf ve puppetmasterd.conf dosyaları benzerdir. İstemci sistemi ve sunucudaki daemonların çalışması için bazı parametreleri belirtirler. İstemci dosyası yalnızca puppetmasterd'ın çalıştığı bilgisayarı işaret eden sunucu parametresinin varlığında farklılık gösterir.

sunucu = öğütücü.com

logdir = /var/log/kukla

vardir = /var/lib/kukla

rundir = /var/run

# sunucuya bir rapor gönder

Her şeyi manuel olarak yazmaktan kaçınmak için puppetd'in kendisini kullanarak bir şablon oluşturabilirsiniz.

$ puppetd --genconfig > /etc/puppet/puppetd.conf

Benzer şekilde sunucuda site.pp oluşturabilirsiniz.

$ puppetd --genmanifest > /etc/puppet/manifests/site.pp

Başka bir dosya olan tagmail.conf, raporların gönderileceği e-posta adreslerini belirtmenize olanak tanır. En basit durumda tek satır kullanabilirsiniz.

Tümü: [e-posta korumalı]

Yapılandırma dosyaları istemcinin sunucuya bağlanması için yeterli değil. Bunu yapmak için sertifikaları da imzalamanız gerekir. İlk olarak, sunucunun istemci sistemindeki yeni bilgisayar hakkında bilgi sahibi olmasını sağlamak için şu komutu girin:

$ sudo puppetd --sunucu öğütücü.com --waitforcert 60 --test

bilgi: Sertifika isteniyor

uyarı: eş sertifika bu SSL oturumunda doğrulanmayacak

uyarı: Sertifika alınmadı

Farklı bir satır döndürülürse sunucunun çalışmasını kontrol etmelisiniz.

$ ps yardımcı | grep kuklası

kukla 5779 0,0 1,4 27764 15404 ? SSL 21:49 0:00 ruby ​​​​/usr/sbin/puppetmasterd

Güvenlik duvarı 8140 numaralı bağlantı noktasındaki bağlantılara izin vermelidir.

Sunucuda imzalanması gereken sertifikaların bir listesini alıyoruz.

$ sudo kukla --list

nomad.grinder.com

Ve müşteri sertifikasını imzalıyoruz.

$ sudo puppetca –sign nomad.grinder.com

Artık istemci sunucuya serbestçe bağlanabilir ve ayarları alabilir.

Yazıda Puppet'ın tüm yeteneklerini göstermek ne yazık ki mümkün değil. Ancak görebileceğiniz gibi bu, çok sayıda sistemin eşzamanlı yönetimiyle ilgili sorunların çoğunu çözmenize olanak tanıyan işlevsel ve esnek bir araçtır. İş alanınız birden fazla sistem kurmanızı gerektiriyorsa. Ve en önemlisi, proje küçük ama sürekli büyüyen bir topluluğu bir araya getirmeyi başardı. Bu nedenle, iyi bir fikrin ölmesine veya bir kenara atılmasına izin verilmeyeceğini umalım.

Kukla sağlayan çapraz platformlu bir yapıdır. sistem yöneticileri Kodu kullanarak ortak görevleri gerçekleştirin. Kod, yeni programlar yüklemekten dosya izinlerini kontrol etmeye veya kullanıcı hesaplarını güncellemeye kadar çeşitli görevleri gerçekleştirmenize olanak tanır. Kukla yalnızca sistemin ilk kurulumu sırasında değil, sistemin tüm yaşam döngüsü boyunca üstündür. Çoğu durumda kukla istemci/sunucu yapılandırmasında kullanılır.

Bu bölümde kurulum ve yapılandırma gösterilmektedir Kukla istemci/sunucu yapılandırmasında. Bu basit örnek nasıl kurulacağını gösterir Apaçi kullanarak Kukla.

Kurulum

Kurulum için Kukla terminale girin:

Sudo apt-get install puppetmaster

İstemci makine(ler)inde şunu girin:

Sudo apt-get kurulum kuklası

Ayarlar

Kuklayı kurmadan önce bir giriş eklemek isteyebilirsiniz DNS CNAMEİçin kukla.example.com, Nerede example.com- bu sizin alanınız. Varsayılan istemciler Kukla kukla sunucu adı olarak kukla.example.com DNS'sini kontrol edin ( Kukla ustası). DNS kullanımına ilişkin ek ayrıntılar için Etki Alanı Adı Hizmeti'ne bakın.

DNS kullanmayı düşünmüyorsanız, sunucu ve istemcideki /etc/hosts dosyasına girişler ekleyebilirsiniz. Örneğin, /etc/hosts dosyasında Kukla sunucu ekleme:

127.0.0.1 localhost.localdomain localhost kuklası 192.168.1.17 meercat02.example.com meercat02

Her birinde Kuklaİstemcide sunucu için bir giriş ekleyin:

192.168.1.16 meercat.example.com meercat kuklası

IP adreslerini değiştirin ve alan isimleriörnekten mevcut adreslerinize ve sunucu ve istemci adlarına kadar.

Şimdi bunun için bazı kaynaklar ayarlayalım. apache2. Dosya oluştur /etc/puppet/manifests/site.pp aşağıdakileri içeren:

Paket ("Apache2": sağlayın => kurulu ) hizmeti ( "Apache2": sağlayın => doğru, etkinleştirin => doğru, gerektirir => Paket["apache2"] )

"meercat02.example.com" düğümü (apache2 dahil)

Yer değiştirmek meercat02.example.comşimdiki adınıza Kukla müşteri.

Bu basit işlemin son adımı Kukla sunucu hizmeti yeniden başlatacak:

Sudo /etc/init.d/puppetmaster yeniden başlat

Şu andan itibaren Kukla sunucuda her şey yapılandırılmıştır ve istemciyi yapılandırmanın zamanı gelmiştir.

Öncelikle servisi yapılandıralım Kukla başlatmak için ajan. Değeri değiştirerek /etc/default/puppet'i düzenleyin BAŞLANGIÇ Açık Evet:

Sudo /etc/init.d/puppet start

Hadi geri dönelim Kukla Sunucunun istemci sertifikasını şu komutu kullanarak imzalaması gerekir:

Sudo puppetca --meercat02.example.com adresini imzala

Kontrol etmek /var/log/syslog herhangi bir yapılandırma hatası için. Her şey yolunda giderse paket apache2 ve bağımlılıkları şuraya kurulacak: Kukla müşteri.

Bu örnek çok basittir ve pek çok özellik ve faydayı göstermez. Kukla. İçin Ek Bilgiler Bakmak

Sergey Yaremçuk

UNIX sistemlerinin Puppet kullanılarak merkezi yapılandırılması

Çok sayıda UNIX sistemini yönetmeye uygun denemez. Bir parametreyi değiştirmek için yöneticinin her makineyle iletişime geçmesi gerekir; komut dosyaları yalnızca kısmen yardımcı olabilir ve her durumda değil.

Windows ağ yöneticilerinin halen daha avantajlı bir konumda olduklarını kabul etmek gerekir. Grup ilkesi ayarlarını değiştirmek yeterlidir ve bir süre sonra, yakın zamanda kurulmuş bir işletim sistemine sahip olanlar da dahil olmak üzere ağdaki tüm bilgisayarlar, elbette kendilerini ilgilendiriyorsa, yenilik hakkında "öğrenecektir". UNIX'in uzun gelişim dönemine dönüp baktığınızda, buna benzer hiçbir şeyin şimdiye kadar tutulmadığını görebilirsiniz. İşletim sisteminin ilk kurulumuna yardımcı olan hızlı başlatma gibi çözümler vardır, ancak daha fazla geliştirme önemli çaba gerektirecektir. BladeLogic ve OpsWare gibi ticari çözümler, ayarların otomatikleştirilmesi sorununu yalnızca kısmen çözmektedir; ana avantajları grafiksel bir arayüzün varlığıdır ve yalnızca büyük kuruluşlar bunları satın almaya gücü yetebilir. Ücretsiz çözümler sunan projeler de var elbette ama var oldukları süre boyunca geniş bir topluluk oluşturamadılar. Örneğin, Cfengine yöneticiler arasında pek popüler değildir, ancak Linux'a ek olarak *BSD, Windows ve Mac OS X'te de kullanılabilir. Bunun nedeni, yapılandırma oluşturmanın göreceli karmaşıklığı olabilir. Görevleri açıklarken, her bir sistemin özelliklerini hesaba katmak ve komutları yürütürken eylem sırasını manuel olarak kontrol etmek gerekir. Yani yönetici, bazı sistemler için adduser yazmanız gerektiğini, diğerleri için ise useradd yazmanız gerektiğini, farklı sistemlerdeki dosyaların konumunu dikkate almanız gerektiğini hatırlamalıdır. Bu, komut yazma sürecini büyüklük sırasına göre karmaşıklaştırır, anında doğru konfigürasyonu oluşturmak çok zordur ve oluşturulan konfigürasyonları bir süre sonra okumak neredeyse imkansızdır. GPL lisansına rağmen Cfengine aslında tüm değişiklikleri kontrol eden ve açık bir toplum inşa etmekle pek ilgilenmeyen tek kişilik bir projedir. Sonuç olarak, Cfengine'in yetenekleri geliştirici için oldukça tatmin edicidir, ancak diğer yöneticiler için ekstra bir baş ağrısıdır. Cfengine'i geliştirmek için üçüncü taraf geliştiriciler tarafından çeşitli eklentiler oluşturuldu ve bu genellikle durumu daha da kötüleştirdi. Cfengine için bu tür birkaç modülün yazarı Luke Kanies, sonunda benzer bir araç geliştirmeye karar verdi, ancak Cfengine'in birçok eksikliğini ortadan kaldırdı.

Kukla Özellikleri

Puppet, Cfengine gibi, görevleri ve bunları uygulayacak kütüphaneleri tanımlamak için bildirimsel bir dil kullanan bir istemci-sunucu sistemidir. İstemciler periyodik olarak (varsayılan olarak her 30 dakikada bir) merkezi sunucuya bağlanır ve en son yapılandırmayı alır. Alınan ayarlar sistem durumuyla eşleşmiyorsa yürütülecek ve gerekirse gerçekleştirilen işlemlere ilişkin bir rapor sunucuya gönderilecektir. Mesaj sunucusu bunu sistem günlüğüne veya bir dosyaya kaydedebilir, bir RRD grafiği oluşturabilir ve bunu belirtilen e-postaya gönderebilir. Ek İşlemsel ve Kaynak soyutlama katmanları, mevcut ayarlar ve uygulamalarla maksimum uyumluluk sağlayarak, ayrıntılı komutların ve dosya formatlarının uygulanması ve açıklamasındaki farklılıklar konusunda endişelenmeden sistem nesnelerine odaklanmanıza olanak tanır. Yönetici yalnızca nesne türüyle çalışır, gerisini Puppet halleder. Böylece, paket türü yaklaşık 17 paket sistemini bilir; gerekli olan, dağıtım veya sistemin sürümü hakkındaki bilgilere göre otomatik olarak tanınacaktır, ancak gerekirse paket yöneticisi zorla ayarlanabilir.

Diğer sistemlerde kullanılması genellikle imkansız olan komut dosyalarının aksine, üçüncü taraf yöneticiler tarafından yazılan Puppet yapılandırmaları diğer ağlarda çoğunlukla sorunsuz çalışır. Puppet CookBook'ta halihazırda üç düzine hazır tarif var. Puppet şu anda aşağıdaki işletim sistemlerini ve hizmetlerini resmi olarak desteklemektedir: Debian, RedHat/Fedora, Solaris, SUSE, CentOS, Mac OS X, OpenBSD, Gentoo ve MySQL, LDAP.

Kukla dili

İlerlemek için öncelikle dilin temel unsurlarını ve yeteneklerini anlamalısınız. Dil, Puppet'ın güçlü yönlerinden biridir. Yöneticinin yönetmeyi planladığı kaynakları ve gerçekleştirdiği eylemleri açıklar. Çoğu benzer çözümün aksine Puppet, dilin heterojen bir ortamdaki herhangi bir sistemdeki tüm benzer kaynaklara erişimi basitleştirmesine olanak tanır. Bir kaynak açıklaması genellikle bir ad, tür ve özniteliklerden oluşur. Örneğin, /etc/passwd dosyasına işaret edelim ve onun niteliklerini ayarlayalım:

dosya("/etc/passwd":

Sahip => kök,

Grup => kök,

Mod => 644,

Artık sunucuya bağlanan istemciler /etc/passwd dosyasını kopyalayacak ve belirtilen nitelikleri ayarlayacaktır. Tek bir kuralda birden fazla kaynağı noktalı virgül kullanarak ayırarak tanımlayabilirsiniz. Peki ya sunucuda kullanılan konfigürasyon dosyası istemcidekilerden farklıysa veya hiç kullanılmıyorsa? Örneğin VPN bağlantılarını kurarken bu durum ortaya çıkabilir. Bu durumda kaynak yönergesini kullanarak dosyayı işaret etmelisiniz. Burada iki seçenek vardır; her zamanki gibi başka bir dosyanın yolunu belirtebilir ve ayrıca desteklenen iki URI protokolünü de kullanabilirsiniz: dosya ve kukla. İlk durumda, harici bir NFS sunucusuna bağlantı kullanılır, ikinci seçenekte ise kaynakları dışa aktaran Puppet sunucusunda NFS benzeri bir hizmet başlatılır. İkinci durumda, varsayılan yol kukla kök dizinine göredir – /etc/puppet. Yani, puppet://server.domain.com/config/sshd_config bağlantısı /etc/puppet/config/sshd_config dosyasına karşılık gelecektir. Filebucket direktifini kullanarak bu dizini geçersiz kılabilirsiniz, ancak /etc/puppet/fileserver.conf dosyasında aynı adı taşıyan bölümü kullanmak daha doğrudur. Bu durumda hizmete erişimi yalnızca belirli adreslerle sınırlandırabilirsiniz. Örnek olarak config kısmını anlatalım:

Yol /var/puppet/config

*.domain.com'a izin ver

127.0.0.1'e izin ver

192.168.0.*'a izin ver

192.168.1.0/24'e izin ver

*.wireless.domain.com adresini reddet

Daha sonra kaynağı açıklarken bu bölüme başvuruyoruz:

kaynak => "kukla://sunucu.alanadi.com/config/sshd_config"

İki nokta üst üsteden önce kaynağın adı gelir. En basit durumlarda, dosyanın tam yolunu ad olarak belirtebilirsiniz. Daha karmaşık konfigürasyonlarda bir takma ad veya değişken kullanmak daha iyidir. Takma ad, takma ad yönergesi kullanılarak ayarlanır:

dosya("/etc/passwd":

Takma ad => şifre

Takma ad oluşturmanın başka bir seçeneği de, farklı işletim sistemleriyle uğraşmanız gerektiğinde iyidir. Örneğin sshd_config dosyasını açıklayan bir kaynak oluşturalım:

dosya(sshdconfig:

Ad => $işletim sistemi ? (

Solaris => "/usr/local/etc/ssh/sshd_config",

Varsayılan => "/etc/ssh/sshd_config"

Bu örnekte bir seçimle karşı karşıyayız. Solaris dosyası ayrı olarak belirtilir, diğerleri için /etc/ssh/sshd_config dosyası seçilecektir. Artık bu kaynağa sshdconfig olarak erişilebilir, işletim sistemine bağlı olarak istenen yol seçilecektir. Örneğin sshd arka plan programı çalışıyorsa ve yeni bir dosya alınırsa hizmetin yeniden başlatılması gerektiğini belirtiyoruz:

hizmet(sshd:

Emin olun => doğru,

Abone ol => Dosya

Değişkenler genellikle kullanıcı verileriyle çalışırken kullanılır. Örneğin, kullanıcı ana dizinlerinin konumunu açıklıyoruz:

$homeroot = "/home"

Artık belirli bir kullanıcının dosyalarına şu şekilde erişilebilir:

$(homeroot)/$isim

$name parametresi kullanıcının hesap adı ile doldurulacaktır. Bazı durumlarda, bazı türler için varsayılan bir değer tanımlamak uygundur. Örneğin, exec türü için yürütülebilir dosyayı araması gereken dizinleri belirtmek çok yaygındır:

Exec ( yol => "/usr/bin:/bin:/usr/sbin:/sbin" )

Birden fazla iç içe geçmiş dosya ve dizine işaret etmeniz gerekiyorsa recurse parametresini kullanabilirsiniz:

dosya("/etc/apache2/conf.d":

Kaynak => "kukla:// kukla://sunucu.alanadi.com/config/apache/conf.d",

Tekrar => "doğru"

Birden fazla kaynak, sınıflar veya tanımlar halinde birleştirilebilir. Sınıflar bir sistemin veya hizmetin tam açıklamasıdır ve ayrı olarak kullanılır:

Linux sınıfı (

Dosya(

"/etc/passwd": sahip => kök, grup => kök, mod => 644;

"/etc/shadow": sahip => kök, grup => kök, mod => 440

Nesneye yönelik dillerde olduğu gibi sınıflar geçersiz kılınabilir. Örneğin FreeBSD'de bu dosyaların grup sahibi wheel'dir. Bu nedenle, kaynağı tamamen yeniden yazmamak için, linux sınıfını miras alacak yeni bir freebsd sınıfı oluşturalım:

freebsd sınıfı linux'u devralır (

Dosya["/etc/passwd"] ( grup => tekerlek );

Dosya["/etc/shadow"] ( grup => tekerlek )

Kolaylık sağlamak için, tüm sınıflar, include yönergesi kullanılarak dahil edilmesi gereken ayrı bir dosyaya yerleştirilebilir. Tanımlar bağımsız değişken olarak birden fazla parametre alabilir ancak kalıtımı desteklemez ve yeniden kullanılabilir nesneleri tanımlamanız gerektiğinde kullanılır. Örneğin kullanıcının ana dizinini ve yeni bir hesap oluşturmak için gereken komutları tanımlayalım:

user_homedir'i tanımla ($grup, $tam ad, $gruplar) (

Kullanıcı("$isim":

Emin olun => mevcut,

Yorum => "$tam ad",

Gid => "$grup",

Gruplar => $gruplar arası,

Üyelik => minimum,

Kabuk => "/bin/bash",

Ana Sayfa => "/ev/$isim",

Gerekli => Grup[$grup],

Exec("$isim ana dizin":

Komut => "/bin/cp -R /etc/skel /home/$isim; /bin/chown -R $isim:$grup /ev/$isim",

=> "/home/$name" öğesini oluşturur,

Gerekli => Kullanıcı[$isim],

Şimdi yeni bir hesap oluşturmak için user_homedir ile iletişime geçmeniz yeterli:

user_homedir("sergej":

Grup => "sergej",

Soyadı => "Sergej Jaremchuk",

Grup içi => ["medya", " yönetici]

Sınıfların yanı sıra kalıtımı destekleyen düğümlerin ayrı açıklamaları vardır. Bir client Puppet sunucusuna bağlandığında ilgili node bölümü aranacak ve sadece bu bilgisayara özel ayarlar sağlanacaktır. Diğer tüm sistemleri tanımlamak için düğüm varsayılanını kullanabilirsiniz. En azından Kukla dilinin tüm yeteneklerini anlamak için her durumda okunması gereken "Tip Referansı" belgesinde tüm türlerin bir açıklaması verilmiştir. Çeşitli türler, belirli koşulların karşılanması (örneğin, bir yapılandırma dosyasının değiştirilmesi), cron ile çalışma, kullanıcı kimlik bilgileri ve gruplar, bilgisayarlar, kaynaklar bağlama, hizmetleri başlatma ve durdurma, paketleri yükleme, güncelleme ve kaldırma dahil olmak üzere belirtilen komutları yürütmenize olanak tanır , SSH anahtarlarıyla, Solaris bölgeleriyle vb. çalışma. Apt kullanarak dağıtımlardaki paketlerin listesini günlük olarak 2 ila 4 saat arasında güncellenmeye kolayca zorlayabilirsiniz:

program (günlük:

Süre => günlük,

Aralık =>

exec("/usr/bin/apt-get update":

Program => günlük

Bu süreye ilişkin güncelleme her sistem tarafından yalnızca bir kez gerçekleştirilecek, ardından görev tamamlanmış sayılacak ve istemci bilgisayardan silinecektir. Puppet dili diğer tanıdık yapıları destekler: koşullar, işlevler, diziler, yorumlar ve benzerleri.

Kuklanın Kurulumu

Puppet, Faster kütüphanesinin yanı sıra OpenSSL desteği ve XMLRPC kütüphanelerine sahip Ruby'yi (sürüm 1.8.1 ve üzeri) gerektirir. Test kurulumu için kullanılan Ubuntu 7.04 deposu halihazırda yavru paketini içermektedir:

$ sudo apt-cache arama kuklası

~$ ruby ​​​​-rxmlrpc/client -e "koyar:evet"

Evet

Herhangi bir hata alınmazsa, ihtiyacınız olan her şey zaten dahil edilmiştir. Sistemlerin istenen konfigürasyonunu tanımlayan dosyalara Puppet terminolojisinde manifestolar adı verilir. Başlatıldığında, arka plan programı /etc/puppet/manifests/site.pp dosyasını okumaya çalışır; eksikse bir uyarı mesajı görüntüler. Test sırasında arka plan programının bildirim gerektirmeyen bağımsız modda çalışmasını söyleyebilirsiniz:

$ sudo /usr/bin/puppetmasterd --nonodes

Gerekirse, örneğin sınıf açıklamalarıyla diğer dosyaları site.pp'ye bağlayabilirsiniz. Bir test çalıştırması için en basit talimatları bu dosyaya girebilirsiniz.

sınıf sudo(

Dosya("/etc/sudoers":

Sahip => kök,

Grup => kök,

Mod => 440,

düğüm varsayılanı (

Sudo'yu dahil et

Hem sunucu hem de istemci olmak üzere tüm yapılandırma dosyaları /etc/puppet dizininde bulunur. Daha önce bahsettiğimiz fileserver.conf dosyası isteğe bağlıdır ve yalnızca Puppet'ın dosya sunucusu olarak da çalışması durumunda kullanılır. Ubuntu'da bu dosya /etc/puppet/files alt dizinini dışa aktarır. SSL alt dizini, istemcilere bağlanırken şifreleme için kullanılacak sertifikaları ve anahtarları içerir. Anahtarlar, puppetmasterd'ı ilk başlattığınızda otomatik olarak oluşturulur; bunları şu komutla manuel olarak oluşturabilirsiniz:

$ sudo /usr/bin/puppetmasterd --mkusers

puppetd.conf ve puppetmasterd.conf dosyaları benzerdir. İstemci sistemi ve sunucudaki daemonların çalışması için bazı parametreleri belirtirler. İstemci dosyası yalnızca puppetmasterd'ın çalıştığı bilgisayarı işaret eden sunucu parametresinin varlığında farklılık gösterir:

sunucu = öğütücü.com

logdir = /var/log/kukla

vardir = /var/lib/kukla

rundir = /var/run

# sunucuya bir rapor gönder

rapor = doğru

Her şeyi manuel olarak yazmaktan kaçınmak için puppetd'in kendisini kullanarak bir şablon oluşturabilirsiniz:

$ puppetd --genconfig > /etc/puppet/puppetd.conf

Benzer şekilde, sunucuda site.pp oluşturabilirsiniz:

$ puppetd --genmanifest > /etc/puppet/manifests/site.pp

Başka bir dosya olan tagmail.conf, raporların gönderileceği e-posta adreslerini belirtmenize olanak tanır. En basit durumda bir satır kullanabilirsiniz:

Tümü: [e-posta korumalı]

Yapılandırma dosyaları istemcinin sunucuya bağlanması için yeterli değil. Bunu yapmak için sertifikaları da imzalamanız gerekir.

Öncelikle sunucuya yeni bilgisayar hakkında bilgi vermek için istemci sistemine şu komutu girin:

$ sudo puppetd --server öğütücü.com --waitforcert 60 –test

Güvenlik duvarı 8140 numaralı bağlantı noktasındaki bağlantılara izin vermelidir.

Sunucuda imzalanması gereken sertifikaların bir listesini alıyoruz:

$ sudo kukla –list

nomad.grinder.com

Ve istemci sertifikasını imzalayın:

$ sudo puppetca –sign nomad.grinder.com

Artık istemci sunucuya serbestçe bağlanabilir ve ayarları alabilir.

Puppet'ın tüm yeteneklerini yazı içerisinde göstermek ne yazık ki mümkün değil. Ancak gördüğünüz gibi bu, çok sayıda sistemin eşzamanlı yönetimiyle ilgili sorunların çoğunu çözmenize olanak tanıyan işlevsel ve esnek bir araçtır. Ve en önemlisi, proje küçük ama sürekli büyüyen bir topluluğu bir araya getirmeyi başardı. Bu nedenle, iyi bir fikrin ölmesine veya bir kenara atılmasına izin verilmeyeceğini umalım.

İyi şanlar!

  1. BladeLogic proje web sitesi – http://www.bladelogic.com.
  2. OpsWare projesinin web sitesi http://www.opsware.com'dur.
  3. Cfengine projesinin web sitesi http://www.cfengine.org'dur.
  4. Puppet projesinin web sitesi http://reductivelabs.com/projects/puppet'tir.
  5. Kukla Yemek Kitabı - http://www.reductivelabs.com/trac/puppet/tagspuppet%2Crecipe.
  6. Daha Hızlı Kütüphane –



Tepe