Senin, 11 Agustus 2014

Puppet

Apa itu Puppet Server?

Puppet adalah open source configuration management tool, digunakan untuk mengatur konfigurasi pada sebuah host, baik berupa file, packages, maupun users secara sentralisasi. Saya menggunakan puppet untuk mengatur semua server yang saya tangani, yang jumlahnya begitu banyak, kalau hanya 1-10 mungkin bisa, tapi kalau sudah ratusan beda cerita, karena tidak mungkin saya mengkonfigurasi satu - persatu server tersebut, karena selain tidak efisien, besar peluang terjadinya human error.

sumber gambar: puppetlabs

Sebagai gambaran saja, jika saya menginginkan perubahan pada sebuah konfigurasi, tapi di semua server, misalkan saya 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 skala 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.

Cara kerja Puppet
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.
Demonstrasi
Di sini kita tidak membicarakan bagaiamana instalasi maupun penjelasan mengenai tools, tapi saya 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 saya lakukan adalah instalasi puppet saya menggunakan system operasi Centos (Linux), kemudian kita akan membuat puppet script, yang melakukan instalasi paket httpd, meng-enable-nya, mengecek proses httpd, jika mati, akan di hidupkan puppet. FYI: saya juga menambahkan epel repository.

Instalasi Puppet
##############

[root@sektor72 ~]# yum install puppet -y

Paket puppet yang terinstall :
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


Mengecek apakah sudah terinstall atau belum paket httpd, jika tidak ada output, berarti paket httpd belum terinstall.


[root@sektor72 ~]# rpm -qa | grep httpd


Sekarang mari kita membuat puppet script yang mudah, dengan extention (.pp)

[root@sektor72 ~]# 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@sektor72 ~]# 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@sektor72 ~]#

Tampaknya proses berjalan lancar, mari kita cek hasil dari puppet:

[root@sektor72 ~]# 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@sektor72 ~]# /etc/init.d/httpd status
httpd (pid  5119) is running...

[root@sektor72 ~]# /etc/init.d/httpd stop
Stopping httpd:                                            [  OK  ]

[root@sektor72 ~]# /etc/init.d/httpd status
httpd is stopped

[root@sektor72 ~]#

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@sektor72 ~]# puppet apply apply.pp

notice: /Stage[main]//Service[httpd]/ensure: ensure changed 'stopped' to 'running'

notice: Finished catalog run in 1.30 seconds


[root@sektor72 ~]#

Nampak output puppet, memberi kabar gembira, mari kita cek:


[root@sektor72 ~]# /etc/init.d/httpd status

httpd (pid 5586) is running...



[root@sektor72 ~]#

Yups terjalan berjalan dengan baik, puppet menghidupkan service httpd, sekarang mari kita me-disable httpd pada chkconfig:


[root@sektor72 ~]# chkconfig --list|grep httpd

httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off


[root@sektor72 ~]# chkconfig httpd off


[root@sektor72 ~]# chkconfig --list|grep httpd

httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off


[root@sektor72 ~]#

Mari kita jalankan kembali script puppet, dan kita lihat hasilnya:


[root@sektor72 ~]# puppet apply apply.pp

notice: /Stage[main]//Service[httpd]/enable: enable changed 'false' to 'true'

notice: Finished catalog run in 1.44 seconds


[root@sektor72 ~]# 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@sektor72 ~]# 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@sektor72 ~]# rpm -qa|grep httpd # kosong


[root@sektor72 ~]# 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@sektor72 ~]# rpm -qa | grep httpd

httpd-2.2.15-15.el6.centos.i686


[root@sektor72 ~]#


Yups, Alhamdulillah selesai sudah penjelasan puppet sebagai server automasi dan manajemen konfigurasi, saya 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.

Tidak ada komentar:

Posting Komentar