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
- Istilah kunci dalam Pemrograman Boneka
- Alur Kerja Program Wayang
- Demonstrasi: Mengotomatiskan Instalasi Apache & MySQL
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.pp
nyata,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.
Puppetlabs 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.pp
file 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.pp
file akan menentukan variabel yang dibutuhkan. Sementara kita bisa mendefinisikan variabel-variabel ini dalam fileinit.pp
file, karena lebih banyak variabel yang perlu digunakan di luar jenis sumber daya itu sendiri, menggunakanparams.pp
file memungkinkan variabel untuk didefinisikan dalamjikapernyataan dan digunakan di berbagai kelas.
Membuatparams.pp
file 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.pp
kelas, 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 merah
atauBerbasis 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.pp
yang 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.pp
untuk 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.conf
dalam 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 dalam
httpd.conf
mengajukan. 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.pp
file, 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.pp
mengajukan.
sort () di c ++
Kami mendefinisikan $ conffile
dan $ confsource
variabel 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.pp
file, 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.pp
kelas tetapi berisi sumber daya Boneka yang sebenarnya.
- Dari dalamapache / manifests /direktori, buat dan buka a
vhosts.pp
mengajukan. 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.pp
mengajukan.
- Kembali ke
vhosts.pp
mengajukan. 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$ namaserver
nilai. 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. Selesai
vhosts.conf
file 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 ke
apache / 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. Buat
init.pp
file dan menyertakan kelas yang dibuat. Ganti nilai untuk$ namaserver
dan$ adminemail
dengan 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.pp
mengajukan,dan menyertakan modul Apache untuk setiap node agen. Juga masukkan variabel untukadminemail
dan nama server
parameter. Andasite.pp
harus 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 / puppet
dan buat file konfigurasi Hierahiera.yaml
di 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 file
common.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.yaml
mengajukanketika 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 ke
site.pp
mengajukan. Namun, dalam contoh ini, Anda akan mengganti beberapa default modul untuk membuat database untuk setiap node Anda.
Editsite.pp
file 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.