Bagaimana cara menggunakan Puppet Modules untuk IT Infrastructure Automation?



Tutorial boneka langsung yang membahas tentang menulis modul boneka dan menggunakan manifes untuk mengotomatiskan dan memelihara infrastruktur TI suatu organisasi.

Sebelumnya, administrator sistem menggunakan skrip shell untuk menjalankan server mereka, dan metode ini tidak memiliki skalabilitas. Merupakan tugas yang berat untuk terus-menerus memodifikasi skrip untuk ratusan atau ribuan server yang selalu berubah dan konfigurasi sistemnya.

Dalam artikel ini di modul boneka & manifes mari kita lihat bagaimana kita dapat menggunakan modul boneka untuk mengotomatiskan penyiapan server, penginstalan program, dan pengelolaan sistem.





Blog ini akan membahas topik-topik berikut:

Pengantar Pemrograman Wayang

Wayang adalah salah satu alat DevOps yang populer digunakan yang banyak digunakan untuk manajemen konfigurasi. Itu digunakan untuk mewujudkan konsistensi di Infrastruktur. Puppet dapat mendefinisikan infrastruktur sebagai kode, mengelola banyak server, dan memberlakukan konfigurasi sistem, sehingga membantu dalam mengotomatiskan proses manajemen infrastruktur.



Wayang memilikibahasa konfigurasinya sendiri, Wayang DSL . Seperti program DevOps lainnya, Puppet mengotomatiskan perubahan, menghilangkan perubahan yang didorong skrip manual. Namun, Puppet bukan hanya bahasa shell lainnya, juga bukan bahasa pemrograman murni, seperti PHP. Sebaliknya, Puppet menggunakanuntuk pendekatan berbasis model deklaratif untuk otomatisasi TI. Ini memungkinkan Puppet untuk mendefinisikan infrastruktur sebagai kode dan memberlakukan konfigurasi sistem dengan program.

Sebelum melanjutkan demo, mari kita lihat beberapa aspek inti dari program boneka.

cara membuat aplikasi tenaga penjualan

Istilah kunci dalam Pemrograman Boneka

Manifes

Program boneka disebut nyata dan memiliki nama file dengan .pp perpanjangan. Manifes utama default boneka adalah /etc/puppet/manifests/site.pp . (Ini mendefinisikankonfigurasi sistem global, seperti konfigurasi LDAP, server DNS, atau konfigurasi lain yang berlaku untuk setiap node).



Kelas

Di dalam manifes ini disebut blok kode kelas modul lain dapat memanggil. Kelas mengonfigurasi potongan fungsionalitas berukuran besar atau sedang, seperti semua paket, file konfigurasi, dan layanan yang diperlukan untuk menjalankan aplikasi. Kelas membuatnya lebih mudah untuk menggunakan kembali kode Boneka dan meningkatkan keterbacaan.

Sumber daya

Kode boneka sebagian besar terdiri dari deklarasi sumber daya. SEBUAH sumber menjelaskan elemen tertentu tentang status yang diinginkan sistem. Misalnya, dapat menyertakan file tertentu harus ada atau paket harus diinstal.

Modul Boneka

Kecuali yang utamasite.ppnyata,itu menyimpan manifesdi modul .

Semua kode Boneka kami diatur dalam modul yang merupakan blok bangunan dasar boneka yang dapat kami gunakan kembali dan dibagikan. Setiap modul mengelola tugas tertentu dalam infrastruktur, seperti menginstal dan mengkonfigurasi perangkat lunak.

Modul berisi kelas Boneka, jenis yang ditentukan, tugas, rencana tugas, kapasitas, jenis sumber daya, dan plugin, misalnya, jenis atau fakta khusus. Pasang modul di Wayangmodul-jalur. Puppet memuat semua konten dari setiap modul di jalur modul, membuat kode ini tersedia untuk digunakan.

Modul - Pemrograman Wayang - EdurekaPuppetlabs memiliki modul yang telah ditentukan sebelumnya yang dapat kita gunakan secara instan dengan mendownloadnya dari PuppetForge . Anda juga dapat membuat modul boneka khusus agar sesuai dengan kebutuhan Anda.

Alur Kerja Program Wayang

Kami akan menggunakan bahasa deklaratif Puppet untuk mendeskripsikan status yang diinginkan dari sistem dalam file yang disebut manifes. Manifes menjelaskan bagaimana Anda harus mengonfigurasi jaringan dan sumber daya sistem operasi, seperti file, paket, dan layanan.

Wayang menyusun manifes menjadi katalog dan menerapkan setiap katalog ke node yang sesuai untuk memastikan konfigurasi tsimpulnya benardi seluruh infrastruktur Anda.

Demonstrasi: Mengotomatiskan Instalasi Apache & MySQL

Artikel tentang modul boneka ini adalah panduan langsung yang akan menunjukkan dua cara menggunakan modul boneka dan juga mengajari Anda caranya mengotomatisasikan instalasi server yang dikonfigurasi dengan dua modul ini.

Untuk memulainya, pastikan Anda memiliki infrastruktur Wayang yang siap yang akan mencakup server master boneka dan 2 agen boneka.

  • Master Boneka: Ubuntu 18.04
  • Agen 1: Ubuntu 18.04
  • Agen 2:CentOS7

Berikut garis besar tentang apa yang akan kami capai dalam praktik langsung ini:


Jadi, mari kita mulai dengan praktik:

Membuat modul dari awal

Dalam modul boneka ini, kita akan menangani tugas-tugas seperti mengunduh paket Apache, mengkonfigurasi file, dan mengatur host virtual.

  • Dari Puppet Master, buka direktori modul Puppet dan buat direktori Apache:
    cd / etc / puppet / modules sudo mkdir apache
  • Dari dalam direktori apache, buat subdirektori: manifes, templat, file, dan contoh.
    cd apache sudo mkdir {manifes, template, file, contoh}
  • Arahkan ke direktori manifes:
    cd memanifestasikan
  • Dari sini, kita akan memisahkan modul menjadi kelas-kelas berdasarkan tujuan dari bagian kode tersebut.

init.pp -> untuk mengunduh paket Apache

params.pp -> untuk menentukan variabel dan parameter apa pun

config.pp -> untuk mengelola file konfigurasi apa pun untuk layanan Apache.

vhosts.pp -> untuk menentukan host virtual.

Modul ini juga akan memanfaatkan Hiera (sistem pencarian data konfigurasi nilai kunci bawaan, digunakan untuk memisahkan data dari kode Boneka) data, untuk menyimpan variabel untuk setiap node.

Langkah 1: Mengunduh Paket Apache

Buat kelas init.pp

Sekarang kita akan membuat fileinit.ppfile di bawah direktori manifests untuk menampung paket apache.
Karena kami memiliki 2 OS berbeda (ubuntu dan CentOS7) yang menggunakan nama paket berbeda untuk Apache, kami harus menggunakan variabel$ apachename.

/etc/puppetlabs/code/environments/production/modules/apache/manifests/init.pp

kelas apache {paket {'apache': name => $ apachename, pastikan => sekarang,}}

paket resource memungkinkan pengelolaan paket. Ini digunakan untuk menambah, menghapus, atau memastikan ada paket.

Dalam banyak kasus, file nama dari sumber daya (Apache, di atas) harus menjadi nama paket yang dikelola. Karena konvensi penamaan yang berbeda,kami menyebut nama paket yang sebenarnyaatas dengan nama referensi. Begitu nama , panggilan untuk variabel yet-undefined$ apachename.

memastikan referensi memastikan bahwa paket tersebutmenyajikan.

Buat file params.pp

Ituparams.ppfile akan menentukan variabel yang dibutuhkan. Sementara kita bisa mendefinisikan variabel-variabel ini dalam fileinit.ppfile, karena lebih banyak variabel yang perlu digunakan di luar jenis sumber daya itu sendiri, menggunakanparams.ppfile memungkinkan variabel untuk didefinisikan dalamjikapernyataan dan digunakan di berbagai kelas.

Membuatparams.ppfile dan kode berikut.

/etc/puppetlabs/code/environments/production/modules/apache/manifests/params.pp

class apache :: params {if $ :: osfamily == 'RedHat' {$ apachename = 'httpd'} elsif $ :: osfamily == 'Debian' {$ apachename = 'apache2'} else {gagal ('ini bukan distro yang didukung. ')}}

Di luar aslinya init.ppkelas, setiap nama kelas harus bercabangApache. Kami menyebut kelas ini sebagai apache :: params . Nama setelah titik dua ganda harus berbagi nama dengan file. Sebuahjikapernyataan digunakan untuk menentukan parameter, menarik dari informasi yang disediakan oleh Faktor , Wayang memiliki instalasi facter sebagai bagian dari instalasi itu sendiri. Di sini, Facter akan menurunkan keluarga sistem operasi (osfamily), untuk mengetahui apakah yatopi merahatauBerbasis Debian.

Dengan parameter yang akhirnya ditentukan, kita perlu memanggil params.pp file dan parameter menjadiinit.pp. Untuk melakukan ini, kita perlu menambahkan parameter setelah nama kelas, tetapi sebelum kurung kurawal buka({).

Sehinggainit.ppyang kita buat sebelumnya akan terlihat seperti ini:

class apache ($ apachename = $ :: apache :: params :: apachename,) mewarisi :: apache :: params {paket {'apache': name => $ apachename, sure => present,}}

String nilai $ :: apache :: params :: value memberitahu Puppet untuk menarik nilai dari Apache modul, params kelas, diikuti dengan nama parameter. Fragmen mewarisi :: apache :: params memungkinkan untukinit.ppuntuk mewarisi nilai-nilai ini.

Langkah 2: Kelola File Konfigurasi

File konfigurasi Apache akan berbeda tergantung pada apakah Anda bekerja pada sistem berbasis Red Hat atau Debian.

Anda dapat menemukan file dependensi berikut di akhir demo ini:httpd.conf(Topi merah),apache2.conf(Debian).

  • Salin konten httpd.conf danapache2.confdalam file terpisah dan simpan di file file direktoridi / etc / puppetlabs / code / environment / produksi / modules / apache / files .
  • Edit kedua file menjadi nonaktifkan berusaha agar hidup. Anda perlu menambahkan garis KeepAlive Off dalamhttpd.confmengajukan. Jika Anda tidak ingin mengubah pengaturan ini, kami harus menambahkan komentar di bagian atas masing-masingmengajukan:
    /etc/puppetlabs/code/environments/production/modules/apache/files/httpd.conf
# File ini dikelola oleh boneka

Tambahkan file-file ini keinit.ppfile, sehingga Puppet akan mengetahui lokasi file-file ini di server master dan node agen. Untuk melakukan ini, kami menggunakan mengajukan sumber.

/etc/puppetlabs/code/environments/production/modules/apache/manifests/init.pp

file {'configuration-file': path => $ conffile, pastikan => file, source => $ confsource,}

Karena kami memiliki file konfigurasi di dua lokasi berbeda, kami memberi sumber daya nama generik file konfigurasi dengan file tersebut jalan didefinisikan sebagai parameter denganjalanatribut.

memastikan memastikan bahwa itu adalah sebuah file.

sumber menyediakan lokasi pada Puppet master dari file yang dibuat di atas.

Bukaparams.ppmengajukan.

sort () di c ++

Kami mendefinisikan $ conffile dan $ confsourcevariabel dalamjikapernyataan:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/params.pp

jika $ :: osfamily == 'RedHat' {... $ conffile = '/etc/httpd/conf/httpd.conf' $ confsource = 'puppet: ///modules/apache/httpd.conf'} elsif $: : osfamily == 'Debian' {... $ conffile = '/etc/apache2/apache2.conf' $ confsource = 'puppet: ///modules/apache/apache2.conf'} lain {...

Kita perlu menambahkan parameter ke awalApachedeklarasi kelas diinit.ppfile, mirip dengan contoh sebelumnya.

Ketika file konfigurasi berubah, Apache perlu dimulai ulang. Untuk mengotomatiskan ini, kita dapat menggunakan sumber layanandalam kombinasi dengan memberitahu atribut, yang akan memanggil sumber daya untuk dijalankan setiap kali file konfigurasi diubah:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/init.pp

file {'configuration-file': path => $ conffile, sure => file, source => $ confsource, notify => Layanan ['apache-service'],} layanan {'apache-service': name => $ apachename, hasrestart => true,}

layanan resource menggunakan parameter yang sudah dibuat yang mendefinisikan nama Apache pada sistem Red Hat dan Debian.
hasrestart atribut digunakan untuk memicu restart layanan yang ditentukan.

Langkah 3: Buat file virtual host

Bergantung pada distribusi sistem Anda, file host virtual akan dikelola secara berbeda. Karena itu, kami akan membungkus kode untuk host virtual dalam filejikapernyataan, mirip dengan yang digunakan diparams.ppkelas tetapi berisi sumber daya Boneka yang sebenarnya.

  • Dari dalamapache / manifests /direktori, buat dan buka avhosts.ppmengajukan. Tambahkan kerangkajikapernyataan:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/vhosts.pp

kelas apache :: vhosts {if $ :: osfamily == 'RedHat' {} elsif $ :: osfamily == 'Debian' {} lain {}}

Lokasi file virtual host di server CentOS 7 kami adalah/etc/httpd/conf.d/vhost.conf . Anda perlu membuat file tersebut sebagai templat pada master Wayang. Lakukan hal yang sama untuk file host virtual Ubuntu, yang terletak di/etc/apache2/sites-available/example.com.conf, menggantiexample.comdengan FQDN server.

  • Arahkan ke template file di dalam Apache modul dan kemudian buat dua file untuk host virtual Anda:

Untuk sistem Red Hat:
/etc/puppetlabs/code/environments/production/modules/apache/templates/vhosts-rh.conf.erb

ServerAdmin ServerName ServerAlias ​​www. DocumentRoot / var / www // public_html / ErrorLog /var/www//logs/error.log CustomLog /var/www//logs/access.log digabungkan

Untuk sistem Debian:
/etc/puppet/modules/apache/templates/vhosts-deb.conf.erb

ServerAdmin ServerName ServerAlias ​​www. DocumentRoot / var / www / html // public_html / ErrorLog /var/www/html//logs/error.log CustomLog /var/www/html//logs/access.log digabungkanWajibkan semua diberikan

Kami hanya menggunakan dua variabel dalam file ini: adminemail dan nama server . Kami akan mendefinisikan ini pada basis node-by-node, dalam filesite.ppmengajukan.

  • Kembali kevhosts.ppmengajukan. Template yang dibuat sekarang dapat direferensikan dalam kode:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/vhosts.pp

cara mengkloning objek di java
class apache :: vhosts {if $ :: osfamily == 'RedHat' {file {'/etc/httpd/conf.d/vhost.conf': sure => file, content => template ('apache / vhosts-rh .conf.erb '),}} elsif $ :: osfamily ==' Debian '{file {' /etc/apache2/sites-available/$servername.conf ': memastikan => file, konten => template (' apache /vhosts-deb.conf.erb '),}} else {gagal (' Ini bukan distro yang didukung. ')}}

Kedua keluarga distribusi memanggilmengajukansumber daya dan mengambil judul lokasi host virtual pada distribusi masing-masing. Untuk Debian, ini sekali lagi berarti mereferensikan$ namaservernilai. Itukandunganatribut memanggil template masing-masing.

  • Kedua file virtual host mereferensikan dua direktori. Mereka tidak ada di sistem secara default. Kita dapat membuatnya melalui penggunaan filemengajukansumber daya, masing-masing dalamjikapernyataan. Selesaivhosts.conffile harus menyerupai:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/vhosts.pp

class apache :: vhosts {if $ :: osfamily == 'RedHat' {file {'/etc/httpd/conf.d/vhost.conf': sure => file, content => template ('apache / vhosts-rh .conf.erb '),} file {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / log ',]: sure => direktori,}} elsif $ :: osfamily == 'Debian' {file {'/etc/apache2/sites-available/$servername.conf': sure => file, content => template ('apache / vhosts-deb. conf.erb '),} file {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / logs ',]: memastikan => direktori ,}} lain {gagal ('Ini bukan distro yang didukung.')}}

Langkah 4: Uji modul

  • Arahkan keapache / manifests /direktori, jalankan parser boneka pada semua file untuk memastikan pengkodean Wayang tanpa kesalahan:

sudo / opt / puppetlabs / bin / puppet parser memvalidasi init.pp params.pp vhosts.pp

Ini harus kembali kosong, tanpa masalah.

  • Arahkan ke contoh direktori di dalamApachemodul. Buatinit.ppfile dan menyertakan kelas yang dibuat. Ganti nilai untuk$ namaserverdan$ adminemaildengan milik Anda sendiri:

/etc/puppetlabs/code/environments/production/modules/apache/examples/init.pp

serveremail = 'webmaster@example.com' $ servername = 'puppet.example.com' sertakan apache termasuk apache :: vhosts
  • Uji modul dengan menjalankan boneka berlaku dengan –Tidak menandai:
    sudo / opt / puppetlabs / bin / puppet apply --noop init.pp

Itu seharusnya tidak mengembalikan kesalahan dan keluaran yang akan memicu penyegaran dari acara. Untuk menginstal dan mengkonfigurasi apache pada Puppet master, jalankan lagi tanpa–Tidak, jika diinginkan.

  • Kembali ke direktori Puppet utama dan kemudian kememanifestasikanfolder (tidakyang ada di modul Apache).

cd / etc / puppetlabs / kode / lingkungan / produksi / manifests

Membuatsite.ppmengajukan,dan menyertakan modul Apache untuk setiap node agen. Juga masukkan variabel untukadminemail dan nama serverparameter. Andasite.ppharus menyerupai berikut ini:

/etc/puppetlabs/code/environments/production/manifests/site.pp

node 'puppet-agent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'puppet.example.com' include apache include apache :: vhosts} node 'puppet-agent-centos.example .com '{$ adminemail =' webmaster@example.com '$ servername =' puppet.example.com 'sertakan apache termasuk apache :: vhosts}

Secara default, layanan agen Puppet pada node yang Anda kelola akan secara otomatis memeriksa master setiap 30 menit sekali dan menerapkan konfigurasi baru dari master. Anda juga dapat menjalankan proses agen Boneka secara manual di antara proses agen otomatis. Untuk menjalankan modul baru secara manual di node agen Anda, login ke node tersebut dan jalankan:

sudo / opt / puppetlabs / bin / agen boneka -t

Sekarang kita telah belajar cara membuat modul dari awal, mari kita pelajari cara menggunakan modul yang sudah ada dari pembuatan boneka boneka.

Gunakan modul dari PuppetForge

Wayang Boneka sudah memiliki banyak modul untuk dijalankan oleh server. Kita dapat mengonfigurasinya sama luasnya dengan modul yang Anda buat dan dapat menghemat waktu karena kita tidak perlu membuat modul dari awal.

Pastikan Anda berada di / etc / puppetlabs / code / environment / produksi / modules direktori dan instal Modul MySQL Puppet Forge oleh PuppetLabs. Ini juga akan memasang modul prasyarat apa pun.

cd / etc / puppetlabs / kode / lingkungan / produksi / modul

sudo / opt / puppetlabs / bin / modul boneka menginstal puppetlabs-mysql

Gunakan Hiera untuk Membuat Database

Sebelum Anda membuat file konfigurasi untuk modul MySQL, pertimbangkan bahwa Anda mungkin tidak ingin menggunakan nilai yang sama di semua node agen. Untuk memasok Puppet dengan data yang benar per node, kami menggunakan Hiera. Anda akan menggunakan kata sandi root yang berbeda untuk setiap node, sehingga membuat database MySQL yang berbeda.

  • Navigasi ke/ etc / puppetdan buat file konfigurasi Hierahiera.yamldi bagian utamawayangdirektori. Anda akan menggunakan nilai default Hiera:

/etc/puppetlabs/code/environments/production/hiera.yaml

--- versi: 5 hierarki: - nama: Jalur umum: common.yaml defaults: data_hash: yaml_data datadir: data
  • Buat filecommon.yaml. Ini akan menentukan default akar kata sandi untuk MySQL:

/etc/puppetlabs/code/environments/production/common.yaml

mysql :: server :: root_password: 'kata sandi'

Kami menggunakancommon.yamlmengajukanketika variabel tidak didefinisikan di tempat lain. Ini berarti semua server akan menggunakan kata sandi root MySQL yang sama. Kata sandi ini juga dapat di-hash untuk meningkatkan keamanan.

  • Untuk menggunakan default modul MySQL, Anda dapat menambahkan sertakan ‘:: mysql :: server’ baris kesite.ppmengajukan. Namun, dalam contoh ini, Anda akan mengganti beberapa default modul untuk membuat database untuk setiap node Anda.

Editsite.ppfile dengan nilai-nilai berikut:

node 'Puppetagent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' include apache include apache :: vhosts include mysql :: server mysql :: db {'mydb_ $ {fqdn} ': user =>' myuser ', password =>' mypass ', dbname =>' mydb ', host => $ :: fqdn, grant => [' SELECT ',' UPDATE '], tag = > $ domain,}} simpul 'Puppetagent-centos.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' sertakan apache include apache :: vhosts include mysql :: server mysql :: db {'mydb _ $ {fqdn}': user => 'myuser', password => 'mypass', dbname => 'mydb', host => $ :: fqdn, grant => ['SELECT', ' UPDATE '], tag => $ domain,}}

Mengotomatiskan pemasangan Modul Boneka dari dalang ke agen boneka

  • Anda dapat menjalankan pembaruan ini secara manual di setiap node dengan SSH ke setiap node dan mengeluarkan perintah berikut:

sudo / opt / puppetlabs / bin / agen boneka -t

  • Jika tidak, layanan agen Puppet pada node yang Anda kelola akan secara otomatis memeriksa master setiap 30 menit sekali dan menerapkan konfigurasi baru apa pun dari master.

Katalog berhasil diterapkan pada agen Ubuntu

Katalog berhasil diterapkan pada agen CentOS

Dengan demikian, seluruh instalasi mendapat otomatis di node agen dengan hanya menerapkan katalog.File kode dan dependensi yang digunakan untuk demo ini dapat ditemukan sini .

Saya harap demo ini membantu Anda mendapatkan gambaran yang jelas tentang modul boneka dan manifes serta penggunaannya untuk mengotomatiskan infrastruktur TI.Dalam hal ini, pekerjaan Anda menjadi sangat mudah, cukup tentukan konfigurasi di Puppet Master dan agen Puppet akan secara otomatis mengevaluasi manifes utama dan menerapkan modul yang menentukan pengaturan Apache dan MySQL. Jika Anda terjebak dengan pertanyaan apa pun, silakan mempostingnya di .

Jika Anda menemukan ini Tutorial Wayang relevan, lihat oleh Edureka, perusahaan pembelajaran online tepercaya dengan jaringan lebih dari 250.000 pelajar yang puas dan tersebar di seluruh dunia. Kursus Pelatihan Sertifikasi DevOps Edureka membantu pelajar mendapatkan keahlian dalam berbagai proses dan alat DevOps seperti Puppet, Jenkins, Nagios, dan GIT untuk mengotomatiskan beberapa langkah di SDLC.