Puppet adalah open source configuration management tool, digunakan untuk mengatur konfigurasi pada sebuah host, baik berupa file, packages, maupun users secara sentralisasi. Penulis menggunakan puppet untuk mengatur semua server yang penulis tangani, yang jumlahnya begitu banyak, kalau hanya 1-10 mungkin bisa, tapi kalau sudah ratusan beda cerita, karena tidak mungkin penulis mengkonfigurasi satu-persatu server tersebut, karena selain tidak efisien, besar peluang terjadinya human error.
Sebagai gambaran saja, jika penulis
menginginkan perubahan pada sebuah konfigurasi, tapi di semua server,
misalkan penulis ingin menambahkan rules pada pf (packet filter),
tinggal merubah rules pada puppet server atau puppetmaster, maka semua
host yang terdaftar sebagai puppet client, rules pf akan dirubah oleh
puppet client.
Pengguna Puppet
Puppet biasa digunakan pada
environment bersekala dari kecil hingga besar berikut sebagian daftar
client yang mungkin tidak asing bagi kita menggunakan puppet:
- Oracle,
- Google,
- Wikimedia Foundation,
- Twitter,
- Dell,
- Rackspace,
- Zynga,
- New York Stock Exchange,
- Disney,
- Citrix Systems,
- Los Alamos National Laboratory,
- Stanford University,
- Nokia,
- dll.
Bisa bayangkan bagaimana system bisa
bekerja pada sekala sebesar perusahaan diatas, bahkan perusahaan
seperti VMware, Google Ventures, and Cisco rela Invest di Puppet Labs.
Puppet Platform
Puppet bisa bekerja pada lintas platform berikut daftar sistem operasi yang di dukung pada saat penulisan:
Linux:
- Red Hat Enterprise Linux,
- CentOS
- Scientific Linux,
- Oracle Linux,
- Debian,
- Ubuntu,
- Fedora,
- SUSE Linux Enterprise Server,
- Gentoo Linux,
- Mandriva Corporate Server,
- ArchLinux.
BSD:
- FreeBSD,
- OpenBSD.
Unix lainnya:
- Mac OS X,
- Oracle Solaris,
- AIX,
- HP-UX.
Windows:
- Windows Server 2003,
- Windows 2008.
Puppet bekerja menggunakan metode
client-server walaupun bisa stand-alone, semua konfigurasi
tersentralisasi pada puppet server, semua sistem operasi yang di dukung
puppet, bisa di jalankan sebagai puppet server, kecuali windows, hanya
bisa di jadikan sebagai puppet client. Jadi kita bisa jadikan OpenBSD
sebagai puppetmaster dan Solaris sebagai puppet clientnya.
Puppet bekerja dengan metode
client-server, ini berarti sebuah client (puppet client) atau lebih akan
menghubungi puppet server, bisa jadi lebih dari satu puppet server.
Secara priodik (defaultnya 30 menit) puppet client akan menghubungi
puppet server, untuk mendownload konfigurasi terbaru dari puppet server
disebut dengan catalog dan mensikronisasikan dengan konfigurasi yang
ada, apabila ditemukan perubahan, maka puppet akan merubahnya. Setelah
itu puppet client, mengirimkan laporan ke puppet server, mengenai ada
tidaknya perubahan, jika ada perubahan maka di laporkan pula bagian mana
yang berubah.
Berikut diagram yang menunjukan bagaimana alur data pada puppet:
sumber gambar: puppetlabs |
Fungisionalitas pada puppet dibangun
dengan lapisan-lapisan layer yang terpisah, setiap layer bertanggung
jawab terhadap sistem, masing-masing bertanggung jawab untuk aspek tetap
dari sistem, dengan kontrol ketat terhadap bagaimana informasi lewat di
antara lapisan:
sumber gambar: puppetlabs |
Resource yang bisa di manajemen puppet
Pada saat penulisan artikel ini puppet sudah bisa memanajemen resource dibawah ini:
- augeas
- computer
- cron
- exec
- file
- filebucket
- group
- host
- interface
- k5login
- macauthorization
- mailalias
- maillist
- mcx
- mount
- nagios_command
- nagios_contact
- nagios_contactgroup
- nagios_host
- nagios_hostdependency
- nagios_hostescalation
- nagios_hostextinfo
- nagios_hostgroup
- nagios_service
- nagios_servicedependency
- nagios_serviceescalation
- nagios_serviceextinfo
- nagios_servicegroup
- nagios_timeperiod
- notify
- package
- resources
- router
- schedule
- scheduled_task
- selboolean
- selmodule
- service
- ssh_authorized_key
- sshkey
- stage
- tidy
- user
- vlan
- yumrepo
- zfs
- zone
- zpool
Sebagai contoh, bila kita ingin
membuat cron, tinggal membuat kelasnya di puppet server, maka cron akan
terbentuk dengan sendirinya di semua host yang terdaftar sebagai puppet
client. Dan perlu diingat tidak sebatas list diatas puppet bisa di
manajemen, tergantung dari kreatifitas dan kebutuhan kita sendiri.
Di sini kita tidak membicarakan bagaiamana instalasi maupun penjelasan
mengenai tools, tapi penulis hanya ingin menunjukan bagaimana puppet
bekerja. Penjelasan seperti instalasi, konfigurasi, dan lain-lain bisa
di lihat setelah artikel ini. Tujuan dari demonstrasi ini adalah agar
pembaca melihat garis besarnya saja, dan demo ini di implementasikan di
localhost bukan dengan metode client-server.
Yang akan penulis lakukan adalah instalasi puppet, kemudian kita akan
membuat puppet script, yang melakukan instalasi paket httpd,
meng-enable-nya, mengecek proses httpd, jika mati, akan di hidupkan
puppet. FYI: penulis juga menambahkan epel repository.
Instalasi Puppet
##############
[root@labs01.unixhat ~]# yum install puppet -y
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: centos.biz.net.id
* epel: epel.idrepo.or.id
* extras: centos.biz.net.id
* updates: centos.biz.net.id
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package puppet.noarch 0:2.6.13-2.el6 will be installed
--> Processing Dependency: ruby(abi) = 1.8 for package: puppet-2.6.13-2.el6.noarch
--> Processing Dependency: ruby >= 1.8.1 for package: puppet-2.6.13-2.el6.noarch
--> Processing Dependency: facter >= 1.5 for package: puppet-2.6.13-2.el6.noarch
--> Processing Dependency: ruby-shadow for package: puppet-2.6.13-2.el6.noarch
--> Processing Dependency: ruby-augeas for package: puppet-2.6.13-2.el6.noarch
--> Processing Dependency: ruby(selinux) for package: puppet-2.6.13-2.el6.noarch
--> Processing Dependency: /usr/bin/ruby for package: puppet-2.6.13-2.el6.noarch
--> Running transaction check
---> Package facter.noarch 0:1.6.4-1.el6 will be installed
---> Package libselinux-ruby.i686 0:2.0.94-5.2.el6 will be installed
---> Package ruby.i686 0:1.8.7.352-4.el6_2 will be installed
---> Package ruby-augeas.i686 0:0.3.0-2.el6 will be installed
--> Processing Dependency: augeas-libs >= 0.5.1 for package: ruby-augeas-0.3.0-2.el6.i686
--> Processing Dependency: libaugeas.so.0(AUGEAS_0.8.0) for package: ruby-augeas-0.3.0-2.el6.i686
--> Processing Dependency: libaugeas.so.0(AUGEAS_0.1.0) for package: ruby-augeas-0.3.0-2.el6.i686
--> Processing Dependency: libaugeas.so.0 for package: ruby-augeas-0.3.0-2.el6.i686
--> Processing Dependency: libaugeas.so.0(AUGEAS_0.11.0) for package: ruby-augeas-0.3.0-2.el6.i686
---> Package ruby-libs.i686 0:1.8.7.352-4.el6_2 will be installed
--> Processing Dependency: libreadline.so.5 for package: ruby-libs-1.8.7.352-4.el6_2.i686
---> Package ruby-shadow.i686 0:1.4.1-13.el6 will be installed
--> Running transaction check
---> Package augeas-libs.i686 0:0.9.0-1.el6 will be installed
---> Package compat-readline5.i686 0:5.2-17.1.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================================================================================================
Package Arch Version Repository Size
=============================================================================================================================================================
Installing:
puppet noarch 2.6.13-2.el6 epel 811 k
Installing for dependencies:
augeas-libs i686 0.9.0-1.el6 base 311 k
compat-readline5 i686 5.2-17.1.el6 base 128 k
facter noarch 1.6.4-1.el6 epel 66 k
libselinux-ruby i686 2.0.94-5.2.el6 base 97 k
ruby i686 1.8.7.352-4.el6_2 updates 532 k
ruby-augeas i686 0.3.0-2.el6 epel 20 k
ruby-libs i686 1.8.7.352-4.el6_2 updates 1.6 M
ruby-shadow i686 1.4.1-13.el6 epel 11 k
Transaction Summary
=============================================================================================================================================================
Install 9 Package(s)
Total download size: 3.6 M
Installed size: 11 M
Downloading Packages:
(1/9): augeas-libs-0.9.0-1.el6.i686.rpm | 311 kB 00:00
(2/9): compat-readline5-5.2-17.1.el6.i686.rpm | 128 kB 00:00
(3/9): facter-1.6.4-1.el6.noarch.rpm | 66 kB 00:00
(4/9): libselinux-ruby-2.0.94-5.2.el6.i686.rpm | 97 kB 00:00
(5/9): puppet-2.6.13-2.el6.noarch.rpm | 811 kB 00:02
(6/9): ruby-1.8.7.352-4.el6_2.i686.rpm | 532 kB 00:01
(7/9): ruby-augeas-0.3.0-2.el6.i686.rpm | 20 kB 00:00
(8/9): ruby-libs-1.8.7.352-4.el6_2.i686.rpm | 1.6 MB 00:05
(9/9): ruby-shadow-1.4.1-13.el6.i686.rpm | 11 kB 00:00
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 296 kB/s | 3.6 MB 00:12
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Importing GPG key 0xC105B9DE:
Userid : CentOS-6 Key (CentOS 6 Official Signing Key)
Package: centos-release-6-2.el6.centos.7.i686 (@base/$releasever)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Importing GPG key 0x0608B895:
Userid : EPEL (6)
Package: epel-release-6-5.noarch (installed)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
Installing : compat-readline5-5.2-17.1.el6.i686 1/9
Installing : ruby-libs-1.8.7.352-4.el6_2.i686 2/9
Installing : ruby-1.8.7.352-4.el6_2.i686 3/9
Installing : facter-1.6.4-1.el6.noarch 4/9
Installing : ruby-shadow-1.4.1-13.el6.i686 5/9
Installing : libselinux-ruby-2.0.94-5.2.el6.i686 6/9
Installing : augeas-libs-0.9.0-1.el6.i686 7/9
Installing : ruby-augeas-0.3.0-2.el6.i686 8/9
Installing : puppet-2.6.13-2.el6.noarch 9/9
Installed:
puppet.noarch 0:2.6.13-2.el6
Dependency Installed:
augeas-libs.i686 0:0.9.0-1.el6 compat-readline5.i686 0:5.2-17.1.el6 facter.noarch 0:1.6.4-1.el6 libselinux-ruby.i686 0:2.0.94-5.2.el6
ruby.i686 0:1.8.7.352-4.el6_2 ruby-augeas.i686 0:0.3.0-2.el6 ruby-libs.i686 0:1.8.7.352-4.el6_2 ruby-shadow.i686 0:1.4.1-13.el6
Complete!
[root@labs01.unixhat ~]#
Mengecek apakah sudah terinstall atau belum paket httpd, jika tidak ada output, berarti paket httpd belum terinstall.
[root@labs01.unixhat ~]# rpm -qa|grep httpd
Sekarang mari kita membuat puppet script yang mudah
[root@labs01.unixhat ~]# vi apply.pp
dengan isi sebagai berikut:
package { "httpd":
ensure => present,
}
service { "httpd":
enable => true,
ensure => running,
}
Mari kita eksekusi script yang telah kita buat, jika tidak ada masalah
dalam tahap instalasi atau puppet script kita maka akan tampak seperti
berikut:
[root@labs01.unixhat ~]# puppet apply apply.pp
notice: /Stage[main]//Package[httpd]/ensure: created
notice: /Stage[main]//Service[httpd]/ensure: ensure changed 'stopped' to 'running'
notice: Finished catalog run in 111.43 seconds
[root@labs01.unixhat ~]#
Tampaknya proses berjalan lancar, mari kita cek hasil dari puppet:
[root@labs01.unixhat ~]# rpm -qa|grep httpd
httpd-2.2.15-15.el6.centos.i686
yups, paket httpd sudah terinstal, mari kita cek coba mematikan proses httpdnya
[root@labs01.unixhat ~]# /etc/init.d/httpd status
httpd (pid 5119) is running...
[root@labs01.unixhat ~]# /etc/init.d/httpd stop
Stopping httpd: [ OK ]
[root@labs01.unixhat ~]# /etc/init.d/httpd status
httpd is stopped
[root@labs01.unixhat ~]#
ok, service httpd sudah di matikan. Kita coba jalankan script puppet
yang telah kita buat tadi, jika memang benar, maka service akan di
hidupkan kembali oleh puppet.
[root@labs01.unixhat ~]# puppet apply apply.pp
notice: /Stage[main]//Service[httpd]/ensure: ensure changed 'stopped' to 'running'
notice: Finished catalog run in 1.30 seconds
[root@labs01.unixhat ~]#
Nampak output puppet, memberi kabar gembira, mari kita cek:
[root@labs01.unixhat ~]# /etc/init.d/httpd status
httpd (pid 5586) is running...
[root@labs01.unixhat ~]#
Yups terjalan berjalan dengan baik, puppet menghidupkan service httpd, sekarang mari kita me-disable httpd pada chkconfig:
[root@labs01.unixhat ~]# chkconfig --list|grep httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@labs01.unixhat ~]# chkconfig httpd off
[root@labs01.unixhat ~]# chkconfig --list|grep httpd
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@labs01.unixhat ~]#
Mari kita jalankan kembali script puppet, dan kita lihat hasilnya:
[root@labs01.unixhat ~]# puppet apply apply.pp
notice: /Stage[main]//Service[httpd]/enable: enable changed 'false' to 'true'
notice: Finished catalog run in 1.44 seconds
[root@labs01.unixhat ~]# chkconfig --list|grep httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
OK, puppet berhasil meng-enble runlevel untuk 2,3,4,5. yang tadi sebelumnya mati.
Bahkan bila kita menghapus paket httpd, maka puppet akan menginstallnya kembali, mari kita lihat:
[root@labs01.unixhat ~]# yum remove httpd -y
Loaded plugins: fastestmirror, priorities, refresh-packagekit, security, versionlock
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package httpd.i686 0:2.2.15-15.el6.centos will be erased
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================================================================================================
Package Arch
Version Repository
Size
=============================================================================================================================================================
Removing:
httpd i686
2.2.15-15.el6.centos @base
2.8 M
Transaction Summary
=============================================================================================================================================================
Remove 1 Package(s)
Installed size: 2.8 M
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Erasing : httpd-2.2.15-15.el6.centos.i686
1/1
Removed:
httpd.i686 0:2.2.15-15.el6.centos
Complete!
[root@labs01.unixhat ~]# rpm -qa|grep httpd # kosong
[root@labs01.unixhat ~]# puppet apply apply.pp
err: /Stage[main]//Service[httpd]/ensure: change from stopped to running
failed: Could not start Service[httpd]: Execution of '/sbin/service
httpd start' returned 1: at /root/apply.pp:7
notice: /Stage[main]//Package[httpd]/ensure: created
notice: Finished catalog run in 40.80 seconds
[root@labs01.unixhat ~]# rpm -qa|grep httpd
httpd-2.2.15-15.el6.centos.i686
[root@labs01.unixhat ~]#
Yups, Alhamdulillah selesai sudah penjelasan puppet sebagai server
automasi dan manajemen konfigurasi, penulis berharap pembaca sekarang
mengerti mengapa puppet menjadi server automasi di datacenter berbagai
belahan dunia. Untuk lebih dalam mengenai puppet, pembaca bisa mengikuti
terus artikel berikutnya.
Post a Comment