Bagaimana cara menggunakan Modul Boneka untuk Automasi Infrastruktur IT?



Tutorial boneka langsung yang membincangkan tentang menulis modul boneka dan menggunakan manifes untuk mengautomasikan dan mengekalkan infrastruktur IT organisasi.

Sebelumnya, pentadbir sistem menggunakan skrip shell untuk menjalankan pelayannya, dan kaedah ini tidak mempunyai skalabiliti. Adalah tugas yang menakutkan untuk sentiasa mengubah skrip untuk beratus-ratus atau ribuan pelayan yang sentiasa berubah dan konfigurasi sistem mereka.

Dalam artikel ini di modul & manifes boneka mari kita lihat bagaimana kita dapat menggunakan modul boneka untuk mengautomasikan penyediaan pelayan, pemasangan program, dan pengurusan sistem.





Blog ini akan merangkumi topik berikut:

Pengenalan Pengaturcaraan Boneka

Boneka adalah salah satu alat DevOps yang popular digunakan secara meluas untuk pengurusan konfigurasi. Ia digunakan untuk mewujudkan ketekalan dalam Prasarana. Boneka dapat mendefinisikan infrastruktur sebagai kod, mengurus beberapa pelayan, dan menerapkan konfigurasi sistem, sehingga membantu dalam mengotomatisasi proses pengurusan infrastruktur.



Boneka mempunyaibahasa konfigurasinya sendiri, Boneka DSL . Seperti program DevOps lain, Puppet mengautomasikan perubahan, menghapuskan perubahan berdasarkan skrip manual. Namun, Puppet bukan sekadar bahasa shell, juga bukan bahasa pengaturcaraan yang murni, seperti PHP. Sebaliknya, Boneka menggunakanke pendekatan berasaskan model deklaratif ke automasi IT. Ini membolehkan Boneka untuk menentukan infrastruktur sebagai kod dan menerapkan konfigurasi sistem dengan program.

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

berapakah span tag dalam html

Istilah utama dalam Pengaturcaraan Boneka

Manifestasi

Program boneka dipanggil nyata dan mempunyai nama fail dengan .pp sambungan. Manifes utama lalai boneka adalah /etc/puppet/manifests/site.pp . (Ini mentakrifkankonfigurasi sistem global, seperti konfigurasi LDAP, pelayan DNS, atau konfigurasi lain yang berlaku untuk setiap nod).



Kelas

Di dalam manifestasi ini terdapat blok kod yang disebut kelas modul lain boleh memanggil. Kelas mengkonfigurasi fungsi besar atau sederhana, seperti semua pakej, fail konfigurasi, dan perkhidmatan yang diperlukan untuk menjalankan aplikasi. Kelas mempermudah penggunaan semula kod Boneka dan meningkatkan kebolehbacaan.

Sumber

Kod boneka terdiri daripada kebanyakan deklarasi sumber. A sumber menerangkan elemen tertentu mengenai keadaan sistem yang diinginkan. Sebagai contoh, ia boleh merangkumi bahawa fail tertentu harus ada atau pakej harus dipasang.

Modul Boneka

Kecuali yang utamalaman web.ppnyata,ia menyimpan manifestasidalam modul .

Semua kod Boneka kami disusun dalam modul yang merupakan asas asas boneka yang boleh kami gunakan semula dan kongsi. Setiap modul menguruskan tugas tertentu dalam infrastruktur, seperti memasang dan mengkonfigurasi perisian.

Modul mengandungi kelas Boneka, jenis yang ditentukan, tugas, rancangan tugas, kapasiti, jenis sumber, dan pemalam, misalnya, jenis atau fakta tersuai. Pasang modul di Bonekajalan modul. Boneka memuatkan semua kandungan dari setiap modul dalam jalur modul, menjadikan kod ini tersedia untuk digunakan.

Modul - Pengaturcaraan Boneka - EdurekaPuppetlabs mempunyai modul yang telah ditentukan yang boleh kita gunakan dengan serta-merta dengan memuat turunnya BonekaForge . Anda juga boleh membuat modul boneka khusus untuk memenuhi keperluan anda.

Aliran Kerja Program Boneka

Kami akan menggunakan bahasa deklaratif Puppet untuk menerangkan keadaan sistem yang diinginkan dalam fail yang disebut manifes. Manifest menerangkan bagaimana anda harus mengkonfigurasi sumber rangkaian dan sistem operasi anda, seperti fail, pakej, dan perkhidmatan.

Boneka menyusun manifestasi menjadi katalog dan ia menerapkan setiap katalog ke simpul yang sesuai untuk memastikan bahawa konfigurasi tdia simpul betuldi seluruh infrastruktur anda.

Demonstrasi: Mengautomasikan Pemasangan Apache & MySQL secara automatik

Artikel ini mengenai modul boneka adalah secara langsung yang akan menunjukkan dua cara menggunakan modul boneka dan juga mengajar anda bagaimana automatik pemasangan pelayan yang dikonfigurasi dengan dua modul ini.

Sebagai permulaan, pastikan anda telah menyediakan infrastruktur Boneka yang merangkumi pelayan induk boneka dan 2 ejen boneka.

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

Berikut adalah garis besar apa yang akan kita capai dalam tangan ini:


Oleh itu, mari kita mulakan dengan tangan:

Membuat modul dari awal

Dalam modul boneka ini, kita akan menangani tugas-tugas seperti memuat turun pakej Apache, mengkonfigurasi fail, dan menyiapkan hos maya.

  • Dari Puppet Master, arahkan ke direktori modul Puppet dan buat direktori Apache:
    cd / etc / boneka / modul sudo mkdir apache
  • Dari dalam direktori apache, buat subdirektori: manifes, templat, fail, dan contoh.
    cd apache sudo mkdir {manifes, templat, fail, contoh}
  • Navigasi ke direktori manifes:
    cd menjelma
  • Dari sini, kami akan memisahkan modul ke dalam kelas berdasarkan matlamat bahagian kod tersebut.

init.pp -> untuk memuat turun pakej Apache

params.pp -> untuk menentukan sebarang pemboleh ubah dan parameter

config.pp -> untuk menguruskan sebarang fail konfigurasi untuk perkhidmatan Apache.

vhosts.pp -> untuk menentukan hos maya.

Modul ini juga akan menggunakan Haiera (sistem carian data konfigurasi nilai kunci terbina dalam, digunakan untuk memisahkan data dari kod Boneka) data, untuk menyimpan pemboleh ubah bagi setiap nod.

Langkah 1: Memuat turun Pakej Apache

Buat kelas init.pp

Sekarang kita akan membuat ainit.ppfail di bawah direktori manifest untuk memegang pakej apache.
Oleh kerana kita mempunyai 2 OS yang berbeza (ubuntu dan CentOS7) yang menggunakan nama pakej yang berlainan untuk Apache, kita harus menggunakan pemboleh ubah$ nama panggilan.

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

kelas apache {pakej {'apache': name => $ apachename, pastikan => hadir,}}

pakej sumber membolehkan pengurusan pakej. Ini digunakan untuk menambah, membuang, atau memastikan pakej ada.

bagaimana mendapatkan panjang array dalam javascript

Dalam kebanyakan kes, nama sumber (apache, di atas) mestilah nama pakej yang diuruskan. Kerana konvensyen penamaan yang berbeza,kami memanggil nama sebenar pakejsetelah dengan nama rujukan. Jadi nama , memanggil pemboleh ubah yang belum ditentukan$ nama panggilan.

memastikan rujukan memastikan bahawa pakej ituhadir.

Buat fail params.pp

Theparams.ppfail akan menentukan pemboleh ubah yang diperlukan. Walaupun kita dapat menentukan pemboleh ubah ini dalaminit.ppfail, kerana lebih banyak pemboleh ubah perlu digunakan di luar jenis sumber itu sendiri, menggunakan aparams.ppfail membolehkan pemboleh ubah ditentukan dalamsekiranyapernyataan dan digunakan di pelbagai kelas.

Buat aparams.ppfail dan kod berikut.

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

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

Di luar yang asal init.ppkelas, setiap nama kelas perlu dicabutapache. Kami memanggil kelas ini sebagai apache :: params . Nama selepas titik dua mesti berkongsi nama dengan fail. Seorangsekiranyapernyataan digunakan untuk menentukan parameter, menarik dari maklumat yang diberikan oleh Faktor , Boneka mempunyai pemasangan facter sebagai bahagian pemasangannya sendiri. Di sini, Facter akan menurunkan keluarga sistem operasi (osfamily), untuk mengetahui sama adatopi merahatauBerasaskan Debian.

Dengan parameter yang akhirnya ditentukan, kita perlu memanggil params.pp fail dan parameter keinit.pp. Untuk melakukan ini, kita perlu menambahkan parameter selepas nama kelas, tetapi sebelum kurungan keriting pembukaan({).

Jadiinit.ppyang kita buat sebelumnya harus kelihatan seperti ini:

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

Rentetan nilai $ :: apache :: params :: nilai menyuruh Boneka menarik nilai dari apache modul, param kelas, diikuti dengan nama parameter. Serpihan mewarisi :: apache :: params membenarkan untukinit.ppuntuk mewarisi nilai-nilai ini.

Langkah 2: Urus Fail Konfigurasi

Fail konfigurasi Apache akan berbeza bergantung pada sama ada anda mengusahakan sistem berasaskan Red Hat- atau Debian.

Anda boleh menemui fail kebergantungan berikut di akhir demo ini:httpd.conf(Topi merah),apache2.conf(Debian).

  • Salin kandungan httpd.conf danapache2.confdalam fail berasingan dan simpan di fail fail direktoridi / etc / puppetlabs / kod / persekitaran / pengeluaran / modul / apache / fail .
  • Edit kedua-dua fail ke nyahdayakan menjaga. Anda perlu menambah baris Tetap Hidup di dalamhttpd.conffail. Sekiranya anda tidak mahu mengubah tetapan ini, kami harus menambahkan komen di bahagian atas setiapfail:
    /etc/puppetlabs/code/environments/production/modules/apache/files/httpd.conf
#Fail ini diuruskan oleh boneka

Tambahkan fail ini keinit.ppfail, jadi Boneka akan mengetahui lokasi fail-fail ini di kedua-dua pelayan induk dan nod ejen. Untuk melakukan ini, kami menggunakan fail sumber.

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

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

Oleh kerana kami mempunyai fail konfigurasi di dua lokasi yang berbeza, kami memberikan nama generik sumber tersebut fail konfigurasi dengan fail jalan ditakrifkan sebagai parameter denganjalanatribut.

memastikan memastikan bahawa ia adalah fail.

sumber memberikan lokasi pada master Boneka fail yang dibuat di atas.

Bukaparams.ppfail.

Kami menentukan $ conffile dan $ rujukpemboleh ubah dalamsekiranyapenyataan:

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

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

Kita perlu menambahkan parameter pada awalapachepengisytiharan kelas diinit.ppfail, serupa dengan contoh sebelumnya.

Apabila fail konfigurasi berubah, Apache perlu dimulakan semula. Untuk mengautomasikan ini, kita boleh menggunakan sumber perkhidmatandalam kombinasi dengan memberitahu atribut, yang akan memanggil sumber untuk dijalankan setiap kali fail konfigurasi diubah:

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

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

perkhidmatan sumber menggunakan parameter yang sudah dibuat yang menentukan nama Apache pada sistem Red Hat dan Debian.
memulakan semula atribut digunakan untuk mencetuskan memulakan semula perkhidmatan yang ditentukan.

Langkah 3: Buat fail host maya

Bergantung pada pengedaran sistem anda, fail hos maya akan diuruskan secara berbeza. Oleh kerana itu, kami akan memasukkan kod untuk hos maya disekiranyapernyataan, serupa dengan yang digunakan dalamparams.ppkelas tetapi mengandungi sumber Boneka sebenar.

  • Dari dalamapache / manifestasi /direktori, buat dan buka avhosts.ppfail. Tambahkan kerangka darisekiranyapenyataan:

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

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

Lokasi fail host maya di pelayan CentOS 7 kami adalah/etc/httpd/conf.d/vhost.conf . Anda perlu membuat fail sebagai templat pada master Boneka. Lakukan perkara yang sama untuk fail hos maya Ubuntu, yang terletak di/etc/apache2/sites-available/example.com.conf, menggantikancontoh.comdengan FQDN pelayan.

  • Navigasi ke templat fail dalam apache modul dan kemudian buat dua fail untuk hos maya 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 digabungkanMemerlukan semua diberikan

Kami hanya menggunakan dua pemboleh ubah dalam fail ini: alamat pentadbir dan nama pelayan . Kami akan menentukannya secara node-by-node, dalamlaman web.ppfail.

  • Kembali kevhosts.ppfail. Templat yang dibuat sekarang dapat dirujuk dalam kod:

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

class apache :: vhosts {if $ :: osfamily == 'RedHat' {file {'/etc/httpd/conf.d/vhost.conf': memastikan => fail, kandungan => templat ('apache / vhosts-rh .conf.erb '),}} elsif $ :: osfamily ==' Debian '{file {' /etc/apache2/sites-available/$servername.conf ': memastikan => fail, kandungan => templat (' apache /vhosts-deb.conf.erb '),}} lain {gagal (' Ini bukan distro yang disokong. ')}}

Kedua-dua keluarga pengedaran memanggil kefailsumber dan ambil tajuk lokasi hos maya pada pengedaran masing-masing. Bagi Debian, ini sekali lagi bermaksud merujuk kepada$ nama pelayannilai. Thekandunganatribut memanggil templat masing-masing.

  • Kedua-dua fail hos maya merujuk kepada dua direktori. Secara lalai mereka tidak menggunakan sistem. Kita boleh membuatnya melalui penggunaanfailsumber, masing-masing dalamsekiranyapenyataan. Yang lengkapvhosts.conffail 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': memastikan => fail, kandungan => templat ('apache / vhosts-rh .conf.erb '),} fail {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / log ',]: pastikan => direktori,}} elsif $ :: osfamily == 'Debian' {file {'/etc/apache2/sites-available/$servername.conf': memastikan => fail, kandungan => templat ('apache / vhosts-deb. conf.erb '),} fail {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / log ',]: memastikan => direktori ,}} lain {gagal ('Ini bukan distro yang disokong.')}}

Langkah 4: Uji modul

  • Navigasi keapache / manifestasi /direktori, jalankan penghurai boneka pada semua fail untuk memastikan pengekodan Boneka tanpa kesalahan:

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

Ia mesti kembali kosong, tanpa masalah.

  • Navigasi ke contoh direktori dalamapachemodul. Buat sebuahinit.ppfail dan sertakan kelas yang dibuat. Gantikan nilai untuk$ nama pelayandan$ alamat e-meldengan anda sendiri:

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

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

Seharusnya tidak ada kesalahan dan output yang akan mencetuskan penyegaran dari peristiwa. Untuk memasang dan mengkonfigurasi apache pada boneka master, jalankan lagi tanpa- Tidak, jika dikehendaki.

  • Navigasi kembali ke direktori Boneka utama dan kemudian kemenjelmafolder (tidakyang hadir dalam modul Apache).

cd / etc / boneka / kod / persekitaran / pengeluaran / manifes

Buat alaman web.ppfail,dan sertakan modul Apache untuk setiap nod ejen. Masukkan juga pemboleh ubah untukalamat pentadbir dan nama pelayanparameter. Andalaman web.ppharus menyerupai yang berikut:

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

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

Secara lalai, perkhidmatan ejen Boneka pada nod terurus anda akan secara automatik memeriksa dengan master sekali setiap 30 minit dan menggunakan konfigurasi baru dari master. Anda juga boleh menjalankan proses ejen Boneka secara manual di antara proses ejen automatik. Untuk menjalankan modul baru secara manual pada nod ejen anda, log masuk ke nod dan jalankan:

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

Sekarang setelah kita belajar bagaimana membuat modul dari awal, mari belajar bagaimana menggunakan modul yang sudah ada dari boneka tempa dari boneka.

Gunakan modul dari PuppetForge

Boneka Tempa sudah mempunyai banyak modul untuk dijalankan oleh pelayan. Kami dapat mengkonfigurasinya secara menyeluruh seperti modul yang anda buat dan dapat menjimatkan masa kerana kami tidak perlu membuat modul dari awal.

Pastikan anda berada di / etc / boneka / kod / persekitaran / pengeluaran / modul direktori dan pasang Modul MySQL Puppet Forge oleh PuppetLabs. Ini juga akan memasang modul prasyarat.

cd / etc / boneka / kod / persekitaran / pengeluaran / modul

sudo / opt / puppetlabs / bin / puppet module install puppetlabs-mysql

Gunakan Hiera untuk Membuat Pangkalan Data

Sebelum anda membuat fail konfigurasi untuk modul MySQL, pertimbangkan bahawa anda mungkin tidak mahu menggunakan nilai yang sama di semua nod agen. Untuk membekalkan Boneka dengan data yang betul setiap nod, kami menggunakan Hiera. Anda akan menggunakan kata laluan root yang berbeza per node, sehingga membuat pangkalan data MySQL yang berbeza.

  • Navigasi ke/ dll / bonekadan buat fail konfigurasi Hierahiera.yamldi dalam utamabonekadirektori. Anda akan menggunakan nilai lalai Hiera:

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

perbezaan antara override dan overload
--- versi: hierarki 5: - nama: Laluan umum: lalai biasa.yaml: data_hash: yaml_data datadir: data
  • Buat failbiasa.yaml. Ia akan menentukan lalai akar kata laluan untuk MySQL:

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

mysql :: server :: root_password: 'kata laluan'

Kami menggunakanbiasa.yamlfailapabila pemboleh ubah tidak ditentukan di tempat lain. Ini bermaksud semua pelayan akan berkongsi kata laluan root MySQL yang sama. Kata laluan ini juga boleh dicincang untuk meningkatkan keselamatan.

  • Untuk menggunakan lalai modul MySQL, anda boleh menambahkannya sertakan ‘:: mysql :: server’ garis kelaman web.ppfail. Walau bagaimanapun, dalam contoh ini, anda akan mengatasi beberapa lalai modul untuk membuat pangkalan data untuk setiap nod anda.

Editlaman web.ppfail dengan nilai berikut:

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

Mengautomasikan pemasangan Modul Boneka dari master boneka ke ejen boneka

  • Anda boleh menjalankan kemas kini ini secara manual pada setiap nod dengan memasukkan SS ke setiap nod dan mengeluarkan arahan berikut:

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

  • Jika tidak, perkhidmatan ejen Boneka pada nod terurus anda akan secara automatik memeriksa dengan master sekali setiap 30 minit dan menggunakan konfigurasi baru dari master.

Katalog berjaya digunakan pada ejen Ubuntu

Katalog berjaya digunakan pada ejen CentOS

Oleh itu, keseluruhan pemasangan mendapat automatik pada nod ejen dengan hanya menggunakan katalog.Fail kod dan pergantungan yang digunakan untuk demo ini boleh didapati di sini .

Saya harap demo ini dapat membantu anda mendapatkan idea yang jelas tentang modul dan manifes boneka serta penggunaannya untuk mengautomasikan infrastruktur IT.Dalam kes ini, kerja anda menjadi sangat mudah, cukup tentukan konfigurasi di Puppet Master dan ejen Boneka akan secara automatik menilai manifes utama dan menerapkan modul yang menentukan persediaan Apache dan MySQL. Sekiranya anda mengalami pertanyaan, jangan ragu untuk menghantarnya .

Sekiranya anda menjumpai ini Tutorial Boneka berkaitan, lihat oleh Edureka, sebuah syarikat pembelajaran dalam talian yang dipercayai dengan rangkaian lebih daripada 250,000 pelajar berpuas hati yang tersebar di seluruh dunia. Kursus Latihan Persijilan Edureka DevOps membantu pelajar memperoleh kepakaran dalam pelbagai proses dan alat DevOps seperti Boneka, Jenkins, Nagios dan GIT untuk mengautomasikan beberapa langkah dalam SDLC.