Puppet — server va tizim konfiguratsiyasini deklarativ kod orqali boshqaradigan configuration management platformasi. U hostlarning joriy holatini katalogdagi kerakli holat bilan solishtirib, farqlarni tuzatadi.
Puppet ayniqsa ko‘p sonli uzoq yashaydigan serverlarda package, service, file, user va boshqa resurslarni izchil boshqarish uchun ishlatiladi.
Deklarativ konfiguratsiya
Puppet konfiguratsiyasi “qaysi buyruqlar ketma-ket bajarilsin”dan ko‘ra “resurs qaysi holatda bo‘lsin”ni ifodalaydi.
Masalan:
package o‘rnatilgan
config fayl ma’lum mazmunda
service yoqilgan va ishlayapti
Puppet dependency asosida amallar tartibini aniqlaydi.
Resource
Puppet boshqaruvining asosiy birligi resource.
Keng tarqalgan resurslar:
Har resource type, title va attributlarga ega.
Catalog
Node uchun kerakli barcha resurslar va dependencylar catalogga birlashtiriladi.
- qaysi resource;
- qaysi holat;
- qaysi tartib;
- qaysi relationship
kerakligini ko‘rsatadi.
Agent catalogni qo‘llab, report qaytaradi.
Agent va server modeli
Klassik Puppet arxitekturasida:
- markaziy server configuration va catalogni boshqaradi;
- agent node’da davriy ishlaydi;
- agent factlarni yuboradi;
- server node uchun catalog compile qiladi;
- agent katalogni qo‘llaydi;
- report qaytaradi.
Agent belgilangan intervalda tizimni kerakli holatga qaytaradi.
Agentless yoki apply rejimi
Puppet konfiguratsiyasi local apply rejimida ham ishlatilishi mumkin.
Bu:
uchun qulay.
Biroq central reporting va policy boshqaruvi alohida tashkil qilinadi.
Manifest
Puppet tilida yozilgan konfiguratsiya manifest deb ataladi.
ni belgilaydi.
Manifestlar version control’da saqlanadi va code review’dan o‘tadi.
Class
Class bog‘liq resurslarni bir mantiqiy komponentga birlashtiradi.
Masalan, web server classi:
ni boshqarishi mumkin.
Parameterlar orqali port, worker soni va environment moslashtiriladi.
Module
Module manifest, template, file va boshqa metadata’ni standart tuzilishda jamlaydi.
- qayta ishlatish;
- test;
- versionlash;
- dependency
uchun package vazifasini bajaradi.
Tashqi module ishlatilganda source va versiya nazorat qilinadi.
Fact
Puppet target node haqida factlar yig‘adi.
Misollar:
- operating system;
- architecture;
- IP;
- hostname;
- memory;
- processor;
- cloud metadata.
Catalog factlar asosida node’ga moslashtiriladi.
Custom fact ham yozilishi mumkin.
Hiera
Hiera configuration data’ni Puppet code’dan ajratishga yordam beradi.
Ma’lumot hierarchy bo‘yicha qidiriladi:
Bu bir xil module’ni turli environmentda boshqa qiymatlar bilan ishlatishga imkon beradi.
Idempotency
Resource allaqachon kerakli holatda bo‘lsa Puppet uni o‘zgartirmaydi.
Masalan:
Agent qayta-qayta ishlasa ham keraksiz side effect kamayadi.
exec resource noto‘g‘ri yozilsa har safar command bajarilishi mumkin. Guard shartlari kerak.
Relationship
Resource’lar orasida tartib va notification belgilanadi.
Masalan:
config fayl o‘zgarsa service restart
package service’dan oldin o‘rnatilsin
Dependency graph cycle hosil qilsa catalog compile qilinmasligi mumkin.
Environment
Puppet environment alohida code va module versiyalarini ajratishi mumkin.
Masalan:
- development;
- staging;
- production.
Agent qaysi environment catalogini olishiga configuration orqali qaror qilinadi.
Report
Har agent run natijasi reportda saqlanadi.
Unda:
bo‘lishi mumkin.
Report compliance va driftni kuzatishga yordam beradi.
Drift
Administrator hostni qo‘lda o‘zgartirsa, keyingi agent run deklarativ holatni qayta tiklashi mumkin.
Bu driftni kamaytiradi.
Qo‘lda emergency o‘zgarish keyin Puppet code’ga kiritilmasa yo‘qolishi mumkin.
Certificate
Agent va server o‘zaro TLS certificate orqali autentifikatsiya qilishi mumkin.
Yangi node certificate request yuboradi va tasdiqlanadi.
Noto‘g‘ri certificate approval begona node’ga catalog yoki ma’lumot olish imkonini berishi mumkin.
Testing
Puppet code uchun:
ishlatiladi.
Faqat manifest parse bo‘lishi resource’lar real OSda to‘g‘ri ishlashini kafolatlamaydi.
Custom resource type
Standart resource yetarli bo‘lmasa custom type va provider yozilishi mumkin. Type kerakli state modelini, provider esa ma’lum platformadagi amallarni bajaradi. Bu oddiy exec buyruqlaridan ko‘ra idempotency va reportingni yaxshilaydi.
Noop rejimi
Noop agent qaysi resurslar o‘zgarishini ko‘rsatadi, ammo ularni amalda o‘zgartirmaydi. Yangi policy productionga chiqishidan oldin drift va kutilmagan restartlar baholanadi.
Code deployment
Puppet serverdagi environment code’i nazoratli pipeline orqali yangilanadi. Module dependencylari lock qilinadi, catalog compile testlari bajariladi va keyin agentlar yangi code versionini oladi.
Node classification
Qaysi class va parameter node’ga tegishli ekanini classifier belgilaydi. Classification hostnamega qattiq bog‘lanmasdan role, environment va trusted metadata asosida tuzilishi mumkin.
Compliance
Puppet reportlari kerakli package, file permission va service holatini ko‘rsatadi. Compliance nazorati faqat “agent ishladi”ga emas, muhim resource’larning desired state’ga mosligiga tayanadi.
Maintenance rejimi
Katta o‘zgarishda agent vaqtincha no-op holatga o‘tkazilishi mumkin. Bu davr aniq muddat, owner va keyingi convergence rejasi bilan boshqariladi.
Run interval
Agent intervali drift qanchalik tez tuzatilishini belgilaydi. Juda qisqa interval server va control plane yukini oshiradi, juda uzun interval esa qo‘lda o‘zgarishlarni uzoq vaqt qoldiradi.
Bog‘liq tushunchalar
Configuration management, Puppet agent, Catalog, Manifest, Resource, Module, Fact, Hiera, Idempotency, Drift