Puppet Merkezi İstemci Yönetimi
Bu yazıda Puppet ile istemcilerinizi merkezi olarak yönetebileceğiniz yöntemlerden bahsedilecektir. Öncesinde Puppet ortamınızı kurmuş olmanız gerekmektedir. Eğer halen kurmadıysanız Puppet kurulumu ile ilgili daha önce yayınlanan yazıya göz atabilirsiniz.
Puppet kullanımı ile ilgili daha yayınlanan Puppet’a Giriş ve Puppet ile Altyapı Otomasyonu yazılarına bakabilirsiniz.
İçindekiler
Puppet Merkezi İstemci Yönetimi
Puppet varsayılan durumda, master sunucu üzerinde Puppet ve Apache ile istemciler üzerinde agent’lar çalıştığı sürece her yarım saatte istemciler ile haberleşir. Eğer istemcilerde fact değişkenlerinde bir değişiklik olmuşsa bunlar güncel haliyle alınır. Ayrıca master sunucu üzerinde henüz uygulanmamış istemciye özel bir değişiklik yapılmışsa bunların istemci üzerinde uygulanması gerçekleşir. Yapılan bir değişiklik sonucu bu yarım saatlik periyodu beklemeden değişiklikleri uygulamak için önceki yazıda istemci tarafında “puppet agent –test” komutunu çalıştırılması gerektiğinden bahsedilmişti.
Ancak çok sayıda sunucuyu ilgilendiren değişikliklerde tek tek istemciler üzerinden agent çalıştırmak çok pratik olmamaktadır. Örneğin çok sayıda sunucunuz var ve hepsinde bir takım değişiklikler yapmak istiyorsunuz. Bu değişiklikler her birinde aynı veya gruplar halinde birbirinden farklı olabilir. Bu durum istemcilere atanacak manifest tanımlarında belirtilir. Tek tek sunuculara gidip “puppet agent –test” komutunu çalıştırmak veya yarım saatlik periyodu beklemek her zaman pratik ve mümkün olmayabilir. İşte bu durumda merkezi bir sunucudan tüm istemcilerde bu işlemi başlatmak ve izlemek oldukça pratik bir kullanım sağlamaktadır.
Bu yazıda bu değişiklikleri istemcilere tek bir merkezden uygulamak ve takip edebilmek için çeşitli yöntemlerden bahsedilecektir. Bunlardan birisi Puppet master sunucusu üzerinden “puppet kick” komutu kullanmaktır. Bir diğer yöntem Mcollective isimli araç ile süreci yönetmektir. Son bahsedilecek metod ise Foreman adı verilen grafik arayüze sahip çözümü kullanmaktır. Bu yöntemlerin detayları aşağıda tek tek açıklanmıştır.
Puppet Kick Kullanımı
Bu komutun amacı, özellikle birden fazla istemci için yapılan değişiklikleri uygularken tek tek istemcilerden “puppet agent –test” çalıştırmak yerine master sunucudan değişiklikleri “puppet kick {istemci_adı}” komutu ile istemcilere göndermektir. Bunun için istemci sunucularda bazı değişikliklerin yapılması gerekmektedir. Öncelikle Puppet agent “daemon” modunda çalışmalıdır. Bunun için puppet.conf içerisinde [main] bölümüne aşağıdaki satır eklenmelidir.
1 2 3 4 5 6 |
sudo vi /etc/puppet/puppet.conf [main] … listen = true ... |
Ayrıca auth.conf doyası içerisine aşağıdaki satırlar eklenmelidir.
1 2 3 4 5 6 |
sudo vi /etc/puppet/auth.conf path /run method save auth any allow puppet-master.vm1.huseyincotuk.com |
Buradaki allow satırı hangi sunucudan kick komutlarını kabul edeceğini göstermektedir.
Son olarak aşağıdaki komut çalıştırılmalıdır.
1 |
puppet agent --enable |
“puppet kick” komutunda faydalı iki parametre bulunmaktadır.
–debug: Komutu çalıştırırken aşamaları takip ederek varsa hataları bulmanıza yardımcı olur.
–parallel: Birden fazla sunucuya bağlanırken sunucuların paralel olarak aynı zamanda çalıştırmalarını sağlar.
Buradaki “parallel” parametresi tüm istemcilerde aynı anda işlem yapabilmeyi de sağladığı için zamandan önemli ölçüde kazanç sağlamaktadır. Oldukça pratik bir kullanım sağlayan bu komut Puppet 3 versiyonundan itibaren yerini MCollective aracına bırakmakla birlikte halen uyarı vererek çalışmaktadır. Aşağıdaki örnek master sunucudan sadece ns1 ve ns2 istemcilerinde bulunan agent’ların çalışmasını sağlamaktadır. Burada belirtilen sayı (2) paralel çalıştırılacak istemci sayısını göstermektedir. Bu komut belirtilen istemcilere gidip “puppet agent –test” komutunu çalıştırmakla birebir aynı işi yapmaktadır.
1 |
sudo puppet kick --debug --parallel 2 ns1.vm1.huseyincotuk.com ns2.vm1.huseyincotuk.com |
Komut çalıştığında önce kullanımdan kaldırıldığı uyarısını vermesine rağmen bu uyarı ile birlikte çalışarak aşağıdaki gibi bir çıktı oluşturmalıdır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
Warning: Puppet kick is deprecated. See http://links.puppetlabs.com/puppet-kick-deprecation Debug: Runtime environment: puppet_version=3.8.4, ruby_version=1.9.3, run_mode=user, default_encoding=UTF-8 Debug: Failed to load library 'ldap' for feature 'ldap' Warning: Failed to load ruby LDAP library. LDAP functionality will not be available Debug: Evicting cache entry for environment 'production'Debug: Evicting cache entry for environment 'production' Debug: Caching environment 'production' (ttl = 0 sec) Debug: Caching environment 'production' (ttl = 0 sec) Debug: Evicting cache entry for environment 'production' Debug: Evicting cache entry for environment 'production'Debug: Caching environment 'production' (ttl = 0 sec) Debug: Caching environment 'production' (ttl = 0 sec) Debug: Evicting cache entry for environment 'production' Debug: Evicting cache entry for environment 'production' Debug: Caching environment 'production' (ttl = 0 sec) Debug: Caching environment 'production' (ttl = 0 sec) Triggering ns2.vm1.huseyincotuk.com Triggering ns1.vm1.huseyincotuk.com Debug: Evicting cache entry for environment 'production' Debug: Caching environment 'production' (ttl = 0 sec) Debug: Evicting cache entry for environment 'production' Debug: Caching environment 'production' (ttl = 0 sec) Debug: Evicting cache entry for environment 'production' Debug: Caching environment 'production' (ttl = 0 sec) Debug: Evicting cache entry for environment 'production' Debug: Caching environment 'production' (ttl = 0 sec) Debug: Failed to load library 'msgpack' for feature 'msgpack' Debug: Puppet::Network::Format[msgpack]: feature msgpack is missing Debug: run supports formats: pson b64_zlib_yaml yaml raw Debug: Failed to load library 'msgpack' for feature 'msgpack' Debug: Puppet::Network::Format[msgpack]: feature msgpack is missing Debug: run supports formats: pson b64_zlib_yaml yaml rawDebug: Failed to load library 'msgpack' for feature 'msgpack' Debug: Puppet::Network::Format[msgpack]: feature msgpack is missing Debug: run supports formats: pson b64_zlib_yaml yaml raw Debug: Failed to load library 'msgpack' for feature 'msgpack' Debug: Failed to load library 'msgpack' for feature 'msgpack' Debug: Puppet::Network::Format[msgpack]: feature msgpack is missingDebug: Puppet::Network::Format[msgpack]: feature msgpack is missing Debug: run supports formats: pson b64_zlib_yaml yaml raw Debug: run supports formats: pson b64_zlib_yaml yaml raw Debug: Failed to load library 'msgpack' for feature 'msgpack' Debug: Puppet::Network::Format[msgpack]: feature msgpack is missing Debug: run supports formats: pson b64_zlib_yaml yaml raw Debug: Evicting cache entry for environment 'production' Debug: Caching environment 'production' (ttl = 0 sec) Debug: Evicting cache entry for environment 'production' Debug: Caching environment 'production' (ttl = 0 sec) Debug: Evicting cache entry for environment 'production' Debug: Caching environment 'production' (ttl = 0 sec) Debug: Evicting cache entry for environment 'production' Debug: Caching environment 'production' (ttl = 0 sec) Debug: Evicting cache entry for environment 'production' Debug: Caching environment 'production' (ttl = 0 sec) Debug: Evicting cache entry for environment 'production' Debug: Caching environment 'production' (ttl = 0 sec) Debug: Failed to load library 'selinux' for feature 'selinux' Debug: Failed to load library 'selinux' for feature 'selinux' Debug: Using settings: adding file resource 'confdir': 'File[/etc/puppet]{:path=>"/etc/puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'confdir': 'File[/etc/puppet]{:path=>"/etc/puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Evicting cache entry for environment 'production' Debug: Caching environment 'production' (ttl = 0 sec) Debug: Evicting cache entry for environment 'production' Debug: Caching environment 'production' (ttl = 0 sec) Debug: Evicting cache entry for environment 'production' Debug: Caching environment 'production' (ttl = 0 sec) Debug: Evicting cache entry for environment 'production' Debug: Caching environment 'production' (ttl = 0 sec) Debug: Puppet::Type::User::ProviderDirectoryservice: file /usr/bin/dsimport does not exist Debug: Puppet::Type::User::ProviderUser_role_add: file roleadd does not exist Debug: Failed to load library 'ldap' for feature 'ldap' Debug: Puppet::Type::User::ProviderDirectoryservice: file /usr/bin/dsimport does not existDebug: Puppet::Type::User::ProviderLdap: feature ldap is missing Debug: Puppet::Type::User::ProviderPw: file pw does not exist Debug: Puppet::Type::User::ProviderUser_role_add: file roleadd does not exist Debug: /User[puppet]: Provider useradd does not support features libuser; not managing attribute forcelocal Debug: Failed to load library 'ldap' for feature 'ldap' Debug: Puppet::Type::User::ProviderLdap: feature ldap is missing Debug: Puppet::Type::User::ProviderPw: file pw does not exist Debug: /User[puppet]: Provider useradd does not support features libuser; not managing attribute forcelocal Debug: Puppet::Type::Group::ProviderDirectoryservice: file /usr/bin/dscl does not exist Debug: Failed to load library 'ldap' for feature 'ldap' Debug: Puppet::Type::Group::ProviderLdap: feature ldap is missing Debug: Puppet::Type::Group::ProviderPw: file pw does not exist Debug: /Group[puppet]: Provider groupadd does not support features libuser; not managing attribute forcelocal Debug: Using settings: adding file resource 'vardir': 'File[/var/lib/puppet]{:path=>"/var/lib/puppet", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'logdir': 'File[/var/log/puppet]{:path=>"/var/log/puppet", :mode=>"750", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'statedir': 'File[/var/lib/puppet/state]{:path=>"/var/lib/puppet/state", :mode=>"1755", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'rundir': 'File[/var/run/puppet]{:path=>"/var/run/puppet", :mode=>"755", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'libdir': 'File[/var/lib/puppet/lib]{:path=>"/var/lib/puppet/lib", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'preview_outputdir': 'File[/var/lib/puppet/preview]{:path=>"/var/lib/puppet/preview", :mode=>"750", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'certdir': 'File[/var/lib/puppet/ssl/certs]{:path=>"/var/lib/puppet/ssl/certs", :mode=>"755", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'ssldir': 'File[/var/lib/puppet/ssl]{:path=>"/var/lib/puppet/ssl", :mode=>"771", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'publickeydir': 'File[/var/lib/puppet/ssl/public_keys]{:path=>"/var/lib/puppet/ssl/public_keys", :mode=>"755", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'requestdir': 'File[/var/lib/puppet/ssl/certificate_requests]{:path=>"/var/lib/puppet/ssl/certificate_requests", :mode=>"755", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'privatekeydir': 'File[/var/lib/puppet/ssl/private_keys]{:path=>"/var/lib/puppet/ssl/private_keys", :mode=>"750", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'privatedir': 'File[/var/lib/puppet/ssl/private]{:path=>"/var/lib/puppet/ssl/private", :mode=>"750", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'hostcert': 'File[/var/lib/puppet/ssl/certs/puppet-master.vm1.huseyincotuk.com.pem]{:path=>"/var/lib/puppet/ssl/certs/puppet-master.vm1.huseyincotuk.com.pem", :mode=>"644", :owner=>"puppet", :group=>"puppet", :ensure=>:file, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'hostprivkey': 'File[/var/lib/puppet/ssl/private_keys/puppet-master.vm1.huseyincotuk.com.pem]{:path=>"/var/lib/puppet/ssl/private_keys/puppet-master.vm1.huseyincotuk.com.pem", :mode=>"640", :owner=>"puppet", :group=>"puppet", :ensure=>:file, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'hostpubkey': 'File[/var/lib/puppet/ssl/public_keys/puppet-master.vm1.huseyincotuk.com.pem]{:path=>"/var/lib/puppet/ssl/public_keys/puppet-master.vm1.huseyincotuk.com.pem", :mode=>"644", :owner=>"puppet", :group=>"puppet", :ensure=>:file, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'localcacert': 'File[/var/lib/puppet/ssl/certs/ca.pem]{:path=>"/var/lib/puppet/ssl/certs/ca.pem", :mode=>"644", :owner=>"puppet", :group=>"puppet", :ensure=>:file, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'hostcrl': 'File[/var/lib/puppet/ssl/crl.pem]{:path=>"/var/lib/puppet/ssl/crl.pem", :mode=>"644", :owner=>"puppet", :group=>"puppet", :ensure=>:file, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'pluginfactdest': 'File[/var/lib/puppet/facts.d]{:path=>"/var/lib/puppet/facts.d", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Puppet::Type::Group::ProviderDirectoryservice: file /usr/bin/dscl does not exist Debug: Failed to load library 'ldap' for feature 'ldap' Debug: Puppet::Type::Group::ProviderLdap: feature ldap is missing Debug: Puppet::Type::Group::ProviderPw: file pw does not exist Debug: /Group[puppet]: Provider groupadd does not support features libuser; not managing attribute forcelocal Debug: Using settings: adding file resource 'vardir': 'File[/var/lib/puppet]{:path=>"/var/lib/puppet", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'logdir': 'File[/var/log/puppet]{:path=>"/var/log/puppet", :mode=>"750", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'statedir': 'File[/var/lib/puppet/state]{:path=>"/var/lib/puppet/state", :mode=>"1755", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'rundir': 'File[/var/run/puppet]{:path=>"/var/run/puppet", :mode=>"755", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'libdir': 'File[/var/lib/puppet/lib]{:path=>"/var/lib/puppet/lib", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'preview_outputdir': 'File[/var/lib/puppet/preview]{:path=>"/var/lib/puppet/preview", :mode=>"750", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'certdir': 'File[/var/lib/puppet/ssl/certs]{:path=>"/var/lib/puppet/ssl/certs", :mode=>"755", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'ssldir': 'File[/var/lib/puppet/ssl]{:path=>"/var/lib/puppet/ssl", :mode=>"771", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'publickeydir': 'File[/var/lib/puppet/ssl/public_keys]{:path=>"/var/lib/puppet/ssl/public_keys", :mode=>"755", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'requestdir': 'File[/var/lib/puppet/ssl/certificate_requests]{:path=>"/var/lib/puppet/ssl/certificate_requests", :mode=>"755", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'privatekeydir': 'File[/var/lib/puppet/ssl/private_keys]{:path=>"/var/lib/puppet/ssl/private_keys", :mode=>"750", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'privatedir': 'File[/var/lib/puppet/ssl/private]{:path=>"/var/lib/puppet/ssl/private", :mode=>"750", :owner=>"puppet", :group=>"puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'hostcert': 'File[/var/lib/puppet/ssl/certs/puppet-master.vm1.huseyincotuk.com.pem]{:path=>"/var/lib/puppet/ssl/certs/puppet-master.vm1.huseyincotuk.com.pem", :mode=>"644", :owner=>"puppet", :group=>"puppet", :ensure=>:file, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'hostprivkey': 'File[/var/lib/puppet/ssl/private_keys/puppet-master.vm1.huseyincotuk.com.pem]{:path=>"/var/lib/puppet/ssl/private_keys/puppet-master.vm1.huseyincotuk.com.pem", :mode=>"640", :owner=>"puppet", :group=>"puppet", :ensure=>:file, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'hostpubkey': 'File[/var/lib/puppet/ssl/public_keys/puppet-master.vm1.huseyincotuk.com.pem]{:path=>"/var/lib/puppet/ssl/public_keys/puppet-master.vm1.huseyincotuk.com.pem", :mode=>"644", :owner=>"puppet", :group=>"puppet", :ensure=>:file, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'localcacert': 'File[/var/lib/puppet/ssl/certs/ca.pem]{:path=>"/var/lib/puppet/ssl/certs/ca.pem", :mode=>"644", :owner=>"puppet", :group=>"puppet", :ensure=>:file, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'hostcrl': 'File[/var/lib/puppet/ssl/crl.pem]{:path=>"/var/lib/puppet/ssl/crl.pem", :mode=>"644", :owner=>"puppet", :group=>"puppet", :ensure=>:file, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: Using settings: adding file resource 'pluginfactdest': 'File[/var/lib/puppet/facts.d]{:path=>"/var/lib/puppet/facts.d", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}' Debug: /File[/var/lib/puppet/state]: Autorequiring File[/var/lib/puppet] Debug: /File[/var/lib/puppet/lib]: Autorequiring File[/var/lib/puppet] Debug: /File[/var/lib/puppet/preview]: Autorequiring File[/var/lib/puppet] Debug: /File[/var/lib/puppet/ssl/certs]: Autorequiring File[/var/lib/puppet/ssl] Debug: /File[/var/lib/puppet/ssl]: Autorequiring File[/var/lib/puppet] Debug: /File[/var/lib/puppet/ssl/public_keys]: Autorequiring File[/var/lib/puppet/ssl] Debug: /File[/var/lib/puppet/ssl/certificate_requests]: Autorequiring File[/var/lib/puppet/ssl] Debug: /File[/var/lib/puppet/state]: Autorequiring File[/var/lib/puppet] Debug: /File[/var/lib/puppet/ssl/private_keys]: Autorequiring File[/var/lib/puppet/ssl] Debug: /File[/var/lib/puppet/ssl/private]: Autorequiring File[/var/lib/puppet/ssl] Debug: /File[/var/lib/puppet/lib]: Autorequiring File[/var/lib/puppet]Debug: /File[/var/lib/puppet/ssl/certs/puppet-master.vm1.huseyincotuk.com.pem]: Autorequiring File[/var/lib/puppet/ssl/certs] Debug: /File[/var/lib/puppet/preview]: Autorequiring File[/var/lib/puppet] Debug: /File[/var/lib/puppet/ssl/private_keys/puppet-master.vm1.huseyincotuk.com.pem]: Autorequiring File[/var/lib/puppet/ssl/private_keys] Debug: /File[/var/lib/puppet/ssl/certs]: Autorequiring File[/var/lib/puppet/ssl]Debug: /File[/var/lib/puppet/ssl/public_keys/puppet-master.vm1.huseyincotuk.com.pem]: Autorequiring File[/var/lib/puppet/ssl/public_keys] Debug: /File[/var/lib/puppet/ssl/certs/ca.pem]: Autorequiring File[/var/lib/puppet/ssl/certs] Debug: /File[/var/lib/puppet/ssl]: Autorequiring File[/var/lib/puppet] Debug: /File[/var/lib/puppet/ssl/crl.pem]: Autorequiring File[/var/lib/puppet/ssl] Debug: /File[/var/lib/puppet/ssl/public_keys]: Autorequiring File[/var/lib/puppet/ssl] Debug: /File[/var/lib/puppet/facts.d]: Autorequiring File[/var/lib/puppet] Debug: /File[/var/lib/puppet/ssl/certificate_requests]: Autorequiring File[/var/lib/puppet/ssl] Debug: /File[/var/lib/puppet/ssl/private_keys]: Autorequiring File[/var/lib/puppet/ssl] Debug: /File[/var/lib/puppet/ssl/private]: Autorequiring File[/var/lib/puppet/ssl] Debug: /File[/var/lib/puppet/ssl/certs/puppet-master.vm1.huseyincotuk.com.pem]: Autorequiring File[/var/lib/puppet/ssl/certs] Debug: /File[/var/lib/puppet/ssl/private_keys/puppet-master.vm1.huseyincotuk.com.pem]: Autorequiring File[/var/lib/puppet/ssl/private_keys] Debug: /File[/var/lib/puppet/ssl/public_keys/puppet-master.vm1.huseyincotuk.com.pem]: Autorequiring File[/var/lib/puppet/ssl/public_keys] Debug: /File[/var/lib/puppet/ssl/certs/ca.pem]: Autorequiring File[/var/lib/puppet/ssl/certs] Debug: /File[/var/lib/puppet/ssl/crl.pem]: Autorequiring File[/var/lib/puppet/ssl] Debug: /File[/var/lib/puppet/facts.d]: Autorequiring File[/var/lib/puppet] Debug: Finishing transaction 20963820 Debug: Finishing transaction 20963820 Debug: Creating new connection for https://ns2.vm1.huseyincotuk.com:8139 Debug: Creating new connection for https://ns1.vm1.huseyincotuk.com:8139 Getting status status is success ns2.vm1.huseyincotuk.com finished with exit code 0 Getting status status is success ns1.vm1.huseyincotuk.com finished with exit code 0 Finished |
Çıktıda belirtilen “exit code 0” istemciye talebin başarılı şekilde iletildiğini ve istemcinin kendi kataloğunu okuyarak tanımlı işlemleri başlattığını göstermektedir. Bu işlemlerin başarılı olup olmadığı ancak istemci üzerindeki /var/log/syslog dosyasından takip edilebilir.
MCollective Kullanımı
mcollective kurulumu biraz karmaşık görünmekle birlikte ayrı bir yazıda ele alınmıştır. Aşağıdaki adımlara geçmeden önce kurulum detaylarına, kullanılabilen agent plugin’lerine gözatmak faydalı olacaktır.
İlgili yazıda da bahsedildiği gibi “mcollective” terminolojisinde kavramlar puppet’a göre biraz daha farklıdır. Bu bağlamda mcollective istemcisi olarak puppet-master, mcollective sunucuları olarak da Puppet istemcileri kullanılmıştır. Dolayısıyla mco komutları puppet-master üzerinden gönderilmekte ve bağlı tüm Puppet istemcilerinde çalıştırılabilmektedir. Bu yazının konusu olan merkezi yönetim bu şekilde çalışmaktadır.
mcollecitve kurulduktan ve gerekli temel plugin’ler (package, service, puppet) eklendikten sonra puppet-master sunucusundan aşağıdaki komutlar ile merkezi bir yönetim sağlanabilmektedir.
Tüm istemcilerde puppet agent’ı bir kez çalıştırmak üzere mco ile birlikte “puppet runonce” çalıştırılmalıdır. Sadece dry-run yapmak (değişiklikleri uygulamadan yapılacak değişiklikleri kontrol etmek) için “noop” parametresi kullanılabilir. Bu arada “puppet kick” komutundan farklı olarak “noop” gibi parametreler ile puppet agent kullanabilmek için tüm istemcilerde puppet servisini durdurmak gerekmektedir. Böylece merkezi olarak çalıştırılmadığı sürece belli aralıklar ile çalışmayacaktır.
1 2 3 4 5 |
ubuntu@puppet-master:~$ mco puppet runonce * [ ============================================================> ] 3 / 3 Finished processing 3 / 3 hosts in 96.40 ms |
Bağlı sunucularda Puppet durumunu görmek için aşağıdaki komutu çalıştırmak gerekmektedir. Agent’ların durumu, en son ne zaman çalıştığı, aktif olup olmadığı gibi bilgiler bu şekilde elde edilmektedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
ubuntu@puppet-master:~$ mco puppet status * [ ============================================================> ] 3 / 3 puppet-client.vm1.huseyincotuk.com: Currently stopped; last completed run 20 minutes 04 seconds ago ns1.vm1.huseyincotuk.com: Currently stopped; last completed run 14 minutes 57 seconds ago ns2.vm1.huseyincotuk.com: Currently stopped; last completed run 3 minutes 18 seconds ago Summary of Applying: false = 3 Summary of Daemon Running: stopped = 3 Summary of Enabled: enabled = 3 Summary of Idling: false = 3 Summary of Status: stopped = 3 Finished processing 3 / 3 hosts in 83.25 ms |
Puppet ile kontrol edilebilen sunucu sayısı ve ilgili istatistikler aşağıdaki gibi elde edilebilmektedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
ubuntu@puppet-master:~$ mco puppet count Total Puppet nodes: 3 Nodes currently enabled: 3 Nodes currently disabled: 0 Nodes currently doing puppet runs: 0 Nodes currently stopped: 3 Nodes with daemons started: 0 Nodes without daemons started: 3 Daemons started but idling: 0 |
Puppet üzerindeki durum özeti aşağıdaki komut ile alınabilmektedir.
1 2 3 4 5 6 7 8 9 |
ubuntu@puppet-master:~$ mco puppet summary Summary statistics for 3 nodes: Total resources: ▇▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▄▁ min: 12.0 max: 249.0 Out Of Sync resources: ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ min: 2.0 max: 2.0 Failed resources: ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ min: 0.0 max: 0.0 Changed resources: ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ min: 2.0 max: 2.0 Config Retrieval time (seconds): ▇▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ min: 0.1 max: 1.4 Total run-time (seconds): ▇▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ min: 2.6 max: 4.4 Time since last run (seconds): ▇▁▇▁▁▁▁▁▁▁▇▁▁▁▁▁▁▁▁▁ min: 30.0 max: 51.0 |
Yukarıdaki komutlar kısaca tek merkezden istemcilerin nasıl yönetileceğini göstermektedir. Daha fazla detayı yayınlanacak olan mcollective yazısında bulabilieceksiniz.
Foreman Kullanımı
Foreman sunucuların yönetimini sağlayan açık kaynak kodlu bir çözüm olup Puppet ve Chef gibi yönetim araçlarıyla kolayca entegre olabilmektedir. Foreman kullanışlı bir web arayüzüne sahip olmakla birlikte sunucuları yönetmek, konfigüre etmek, izlemek ve provizyonlamak üzere bir API arayüzü ve güçlü komut satırı alternatifleri de sunmaktadır.
Foreman kurulumu ayrı bir yazıda ele alınmış ve kullanımı açıklanmıştır. Detaylar için yayınlanacak olan ilgili yazıyı incelemek faydalı olacaktır.
Foreman ile Puppet altyapınızı yönetmek için Foreman kurulumunu tamamladıktan ve gerekli ayarları yaptıktan sonra Foreman ile yönetilen tüm sunucular “Hosts” menüsü altından “All hosts” bölümünden listelenebilir.
Buradan seçilen bir sunucuya tıklanarak açılan pencerede “Run Puppet” butonuna tıklanarak ilgili sunucuda puppet çalıştırılır ve kendi kataloğunu okuyarak işlemleri yapması sağlanmış olur.
Foreman ile ilgili oldukça detaylı şekilde bilgiyi bilahare yayınlanacak olan Foreman yazısında bulabileceksiniz.
Bu yazıda üç farklı yöntem ile istemcilerin nasıl merkezi olarak yönetilebilecekleri açıklanmış ve örneklerle gösterilmiştir. Burada bahsi geçen MCollective ve Foreman araçlarının kurulumu ve detaylı kullanımları ayrı yazılarda ele alınacaktır.