Puppet

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Puppet and the translation is 17% complete.

Outdated translations are marked like this.
Other languages:
English • ‎Türkçe • ‎français • ‎polski • ‎русский • ‎日本語 • ‎한국어
Resources

Puppet Ruby ile yazılmış bir konfigürasyon yönetimi sistemidir. Sistemlerinize uygulama yükleme/güncelleme işlemi sırasında yardımcı olur.

Puppet is provided by the app-admin/puppet package.

Currently, there is no distinction between server and client, so the basic installation procedure is the same for both.

Emerge

Öncelikle, Puppet'i emerge ile kuralım:

root #emerge --ask puppet
root #emerge --ask app-admin/puppet

Yapılandırma

Puppet genellikle /etc/puppet/puppet.conf dosyasından yapılandırılabilir ve yorum olan satırlar diyez (#) ile işaretlenmiş durumda kurulacaktır. Ayar dosyası birçok bölümden oluşmaktadır:

Puppet is mainly configured through /etc/puppet/puppet.conf in an INI-style format. Comments are marked with a hash sign (#).

The configuration file is separated into several sections, or blocks:

  • [main] bölümü Puppet'in aşağıdaki bölümlerde özel olarak belirtilmemiş yapılandırma ayarları yok ise geçerli olacak genel ayarları içerir:
    • [master] bölümündeki ayarlar Puppetmaster (puppet yönetim birimi), veya CA aracı (puppet sertifika yönetimi) içindir
    • [agent] bölümündeki ayarlar Puppet agent (puppet istemcisi) yönetimi içindir

Daha derin şekilde bilgiyi (diğer olası yapılandırma bölümleri ile birlikte) resmi Puppet dökümanlarında bulabilirsiniz. Ayrıca tüm geçerli değişkenleri de inceleyebilirsiniz. Tabi ki bazıları yalnızca sunucu veya yalnızca istemci için işe yaramakta.

Sunucu (Puppetmaster) Yapılandırması

Ebuild'den kurulumda öntanımlı olarak gelen puppet.conf dosyası olduğu gibi kullanılabilir. Puppet 2.7.3'de sunucu ile ilgili bölümler şöyle görülmekte:

FILE /etc/puppet/puppet.confÖntanımlı sunucu ayarları
[main]
    # The Puppet log directory. (Puppet log dizini)
    # The default value is '$vardir/log'. (öntanımlı değer '$vardir/log')
    logdir = /var/log/puppet
  
# Where Puppet PID files are kept. (Puppet PID dosyasının yeri)
    # The default value is '$vardir/run'. (öntanımlı değer '$vardir/run')
    rundir = /var/run/puppet
  
# Where SSL certificates are kept. (SSL sertifikalarının saklandığı yer)
    # The default value is '$confdir/ssl'. (öntanımlı değer '$vardir/ssl')
    ssldir = $vardir/ssl

Dosya sunucusunun ayarlanması

Dosyaları istemcilere gönderebilmek için dosya sunucusunu yapılandırmalıyız. Bu iş için yapıalndırma dosyası /etc/puppet/fileserver.conf'dur. Öntanımlı olarak herhangi bir dosya servis edilmez.

To be able to send files to the clients, the file server has to be configured. This is done in /etc/puppet/fileserver.conf. By default, there are no files being served.

FILE /etc/puppet/fileserver.conffiles paylaşımının ayarlanması
[files]
    path /var/lib/puppet/files
    allow 192.168.0.0/24

Yukardaki ayar parçası /var/lib/puppet/files dizininden dosyalarını alan ve yalnızca 192.168.0.0/24 ağına servis sunan files isminde (hatırlatma olarak atanmış bir isim) bir paylaşım ayarlamakta. Özel olarak bir adres/blok engellemek istiyorsanız deny komutunu kullanabilirsiniz.

Puppetmaster Servisini Başlatmak

Note
İstemcilerin Puppetmaster'a hostname olarak puppet kullanarak erişebilmesi tavsiye edilmektedir. Dilerseniz bu davranışı değiştirebilirsiniz ancak yapılandırma dosyalarında biraz değişiklik yapmanız gerekir.
Note
It is recommended that the Puppetmaster is reachable from the clients using the host name puppet. However, the name can be overridden, which of course causes configuration effort.
Important
Bu noktada istemciler tarafından görülen sunucu adının hostname -f komutunun çıktısı ile aynı olması gerekmektedir. Bunun için /etc/hosts dosyasını düzenlemeniz veya elle sertifika üretmeniz gerekebilir (aşağıda anlatılmakta).

Puppetmaster'ı başlatmak için kendi init scriptini kullanabiliriz:

root #/etc/init.d/puppetmaster start
root #/etc/init.d/puppetmaster start

İlk çalışması sırasında Puppet, Puppetmaster sunucusu için bir SSL sertifikası üretip ssldir ile tanımladığımız dizine yerleştirecektir.

8140/TCP portundan dinleme yapan servisin bu porttan istemciler ile iletişime geçmesini engelleyecek bir güvenlik duvarı/ağ filtresi olmadığına emin olun.

Örnek bir manifesto

Manifestolar Puppet'de istemci cihazlar için yapılandırma ayarlarıdır. Manifestoların yazım formatı ile ilgili bilgi için detaylı belgeyi inceleyebilirsiniz.

Manifests, in Puppet's terminology, are the files in which the client configuration is specified. The documentation contains a comprehensive guide about the manifest markup language.

Basit bir örnek olarak istemcide bir günün mesajı (motd) dosyası oluşturalım. Puppetmaster üzerinde önceden tanımladığımız files paylaşımının dizini içinde bir dosya oluşturalım:

FILE /var/lib/puppet/files/motdSunucudaki MOTD dosyası
Puppet ile yönetilen bu cihaza hoşgeldiniz!

Ardından manifests dizininde ana manifestoyu oluşturmalıyız. Dosyanın adı site.pp:

FILE /etc/puppet/manifests/site.ppSunucudaki ana manifesto dosyası
node default {
  file { '/etc/motd':
    source => 'puppet://puppet/files/motd'
  }
}

default tanımı, eğer host için farklı bir node tanımı yapılarak özel bir yapılandırma sağlanmadığında tüm nodelara (istemciler için kullanılan isimdir) uygulanır. file (dosya) kaynağını kullanarak puppet cihazında files paylaşımındaki motd dosyasının istemcinin /etc/motd konumunda bulunmasını istedik. Eğer sunucu (puppetmaster) farklı bir isimle anılıyorsa, source adresini buna göre ayarlamanız gerekmektedir.

İstemci Yapılandırması

Önemli
İstemciler Puppetmaster ile yakın sürümler kullanmak zorundadır. Puppet'in 2.7.1 sürümünü kullanan bir Puppetmaster ile 2.7.2 sürümünü kullanan istemciler problemsiz çalışacaktır. Ancak 2.6 kullanan bir sunucu ile 2.7 kullanan istemciler muhtemelen problem yaşayacaktır.
Important
The client must have the same major and minor version as the Puppetmaster. Using a 2.7.1 Puppetmaster with 2.7.2 clients is fine, but using 2.6 for the server and 2.7 for clients can cause unexpected issues at any time.
Not
Eğer puppetmaster puppet adresiyle erişilemiyorsa, /etc/puppet/puppet.conf dosyasındaki [main] bölümünde bulunan server= değişkenini gerçek hostname ile değiştirin.

Puppet agent'in (istemci) ilk çalıştırılması sırasında, puppetmaster tarafından cihazın sertifikasının imzalanmasını beklemelisiniz. Sertifika talep etmek ve ilk yapılandırmanızı tamamlamak için aşağıdaki kodu çalıştırın:

root@client #puppet agent --test --waitforcert 60
info: Creating a new certificate request for client
info: Creating a new SSL key at /var/lib/puppet/ssl/private_keys/client.pem
notice: Did not receive certificate

İstemcinin bağlanabilmesi için, öncelikle sunucuda sertifikayı onaylamanız gerekmekte. İstemciden talep gönderdikten sonra sunucuda sertifika bekleyen node'ların listesinde istemcimiz görülüyor olmalı:

root@server #puppet cert --list
client
root@server #puppet cert --list
client

İstemci (client) için sertifikayı imzalayalım:

root@server #puppet cert --sign client
root@server #puppet cert --sign client

İstemci sertifikanın onaylanıp onaylanmadığını her 60 saniyede bir kontrol edecektir. Onay alınmasının ardından yapılandırma devam eder:

info: Caching catalog for client
info: Applying configuration version '1317317379'
notice: /Stage[main]//Node[default]/File[/etc/motd]/ensure: defined content as '{md5}30ed97991ad6f591b9995ad749b20b00'
notice: Finished catalog run in 0.05 seconds
info: Caching catalog for client
info: Applying configuration version '1317317379'
notice: /Stage[main]//Node[default]/File[/etc/motd]/ensure: defined content as '{md5}30ed97991ad6f591b9995ad749b20b00'
notice: Finished catalog run in 0.05 seconds

Bu mesajı gördüyseniz, herşey yolunda demektir. Artık istemcideki /etc/motd dosyasını inceleyebilirsiniz:

user@client $cat /etc/motd
Puppet ile yönetilen bu cihaza hoşgeldiniz!
user@client $cat /etc/motd
Welcome to this Puppet-managed machine!

OpenRC

Artık puppet agent'ı servis olarak başlatabilir ve açılışta çalışması için ayarlayabilirsiniz:

root@client #/etc/init.d/puppet start
root@client #rc-update add puppet default
root@client #/etc/init.d/puppet start
root@client #rc-update add puppet default

Systemd

Conversely, when running systemd:

root@client #systemctl start puppet
root@client #systemctl enable puppet

Diğer Başlıklar

Elle Sertifika Üretimi

Sertifika üretmek için puppet cert aracını kullanabilirsiniz. Üretilen sertifikaları yerel Puppet Certificate Authority (CA - Puppet Sertifika Otoritesi) kimliğiniz ile imzalayarak puppet yapılandırmasında tanımladığımız ssldir dizinine kaydedecektir.

To manually generate a certificate, use the puppet cert utility. It will place all generated certificates into the ssldir defined directory as set in the puppet configuration and will sign them with the key of the local Puppet Certificate Authority (CA).

Basit bir örnek olarak yalnızca bir Common Name: (alan adı) kullanarak sertifika üretmek için:

root #puppet cert --generate host1
root #puppet cert --generate host1

Eğer birden fazla hostname için geçerli olacak bir sertifika gerekliyse --certdnsnames parametresini kullanıp, farklı alan adlarını iki nokta ile ayırın:

root #puppet cert --generate --certdnsnames puppet:puppet.domain.invalid host1.domain.invalid
root #puppet cert --generate --certdnsnames puppet:puppet.domain.invalid host1.domain.invalid

Bu şekilde üretilen bir sertifika belirtilen üç alan adı için de geçerli olacaktır.

Refreshing agent certificates

This is the process used to manually refresh agent certificates.

  1. (on master)
    root #puppet cert clean ${AGENT_HOSTNAME}
  2. (on agent)
    root #rm /etc/puppet/ssl/{certs,certificate_requests}/${AGENT_HOSTNAME}.pem
    • This will cause the Puppet agent to regenerate the CSR with the existing SSL key.
    • The old certificate is no longer valid, as it was nuked on the master.
    • When one of the above steps is forgotten, an error will pop up about the certificate mis-matching between agent and master.
    • To replace the SSL keys (optional):
      root #rm /etc/puppet/ssl/{public,private}_keys/${AGENT_HOSTNAME}.pem
  3. (on agent)
    root #puppet agent --onetime --no-daemonize --verbose --test --waitforcert 30
    • When using auto-signing, no further steps are needed.
  4. (on master)
    root #puppet cert list ${AGENT_HOSTNAME}
  5. Verify that the fingerprint listed in the previous two outputs matches
  6. (on master)
    root #puppet cert sign ${AGENT_HOSTNAME}
  7. (on agent)
    root #puppet agent --onetime --no-daemonize --verbose --test

Puppet ile slotları yönetmek

Puppet ile gelen öntanımlı portage besleyicisi paket slotlarını desteklemese de, 3. parti eklentiler sayesinde bu özelliği ekleyebilirsiniz.

While the default portage provider in puppet does support slots there are puppet modules available which also have this functionality.

For instance, with app-admin/puppet version 4.6.0 and higher, and/or app-admin/puppet-agent, the slot functionality is supported like to:

CODE Defining an absent slotted package
package { 'dev-lang/python:3.3': ensure => absent }

Additional modules are:

See also

Harici kaynaklar