Chef — server va infratuzilma konfiguratsiyasini kod orqali boshqarishga mo‘ljallangan configuration management vositasi. U node’larni kerakli holatga keltirish uchun recipe, resource va cookbook tushunchalaridan foydalanadi.
Chef konfiguratsiyasi Ruby tiliga yaqin ichki DSL orqali yoziladi. Bu deklarativ resource’lar bilan birga kerakli joyda dasturiy mantiqdan foydalanish imkonini beradi.
Asosiy model
Chef boshqaruvida:
- workstation — kod yoziladigan va yuboriladigan muhit;
- server — cookbook, policy va node ma’lumotini saqlaydigan markaziy qism;
- node — configuration qo‘llanadigan server;
- client — node’da Chef runni bajaradigan agent
bo‘lishi mumkin.
Local va serverless ishlash usullari ham mavjud.
Resource
Chef resource tizim obyektining kerakli holatini belgilaydi.
Misollar:
Resource nomi, action va propertylarga ega.
Recipe
Recipe resurslar ketma-ketligini va konfiguratsiya mantiqini saqlaydi.
Masalan, web server recipe:
Recipe odatda bir mantiqiy vazifaga ega bo‘ladi.
Cookbook
Cookbook recipe, template, file, attribute, custom resource va metadata’ni bir package’ga birlashtiradi.
Cookbook:
- version;
- dependency;
- supported platform;
- entry recipe
haqida ma’lumot saqlaydi.
Cookbooklar ichki yoki tashqi repositorydan olinishi mumkin.
Run list
Node uchun qaysi recipe yoki role qaysi tartibda bajarilishi run listda belgilanadi.
Masalan:
base
monitoring
web_server
application
Tartib muhim, chunki recipe’lar bir-birining resurslariga tayanishi mumkin.
Chef run
Chef client ishlaganda:
- node ma’lumotini yig‘adi;
- policy va cookbooklarni oladi;
- resource collection yaratadi;
- resurslarni kerakli holatga keltiradi;
- natijani report qiladi.
Bu jarayon davriy yoki manual ishga tushirilishi mumkin.
Compile va converge
Chef run odatda ikki bosqich bilan tushuntiriladi.
Compile
Recipe code bajarilib resource collection hosil qilinadi.
Converge
Resource’lar ketma-ket qo‘llanib, node kerakli holatga keltiriladi.
Compile vaqtida bajarilgan oddiy Ruby code bilan converge vaqtida ishlaydigan resource farqini tushunish muhim.
Idempotency
Chef resource joriy holatni tekshiradi.
Masalan, package o‘rnatilgan bo‘lsa qayta o‘rnatmaydi.
File mazmuni o‘zgarmasa qayta yozmaydi.
Ammo execute resource har run’da command bajarishi mumkin. creates, only_if, not_if kabi guardlar idempotencyni ta’minlaydi.
Notification
Resource boshqa resource’ga notification yuborishi mumkin.
Masalan, template o‘zgarsa service restart qilinadi.
Notification:
- darhol;
- run oxirida;
- belgilangan tartibda
bajarilishi mumkin.
Keraksiz restartlarni kamaytiradi.
Template
Template dynamic configuration yaratadi.
Unda:
- variable;
- conditional;
- loop;
- environment qiymati
ishlatilishi mumkin.
Generated file checksum bilan solishtiriladi. Farq bo‘lsa yangilanadi.
Attribute
Attribute node va cookbook configuration qiymatlarini saqlaydi.
Manbalar va precedence darajalari mavjud.
Ko‘p precedence qatlami qiymatning asl manbasini tushunishni qiyinlashtirishi mumkin.
Zamonaviy policy’da explicit data va minimal override afzal.
Ohai
Ohai node haqida system ma’lumotlarini yig‘adi.
Misollar:
Bu ma’lumot node objectiga qo‘shilib recipe’da ishlatiladi.
Role
Role node’ning umumiy vazifasini ifodalaydi.
Masalan:
- web;
- database;
- cache.
Role run list va attribute saqlashi mumkin.
Katta tizimlarda role o‘rniga aniq versionlangan policy’lar kuchliroq reproducibility berishi mumkin.
Environment
Environment development, staging va production uchun cookbook version constraint va attribute farqlarini saqlaydi.
Biroq environment va role orqali ko‘p dynamic resolution bir xil node’ni keyin aynan takrorlashni qiyinlashtirishi mumkin.
Policyfile
Policyfile node guruhi uchun:
- aniq cookbook versiyalari;
- run list;
- dependency lock;
- policy nomi
ni belgilaydi.
Bu build qilingan configuration artifactga o‘xshash yondashuv beradi.
Test
Chef ekotizimida bir nechta test darajasi mavjud:
- lint va style;
- unit test;
- dependency resolution;
- ephemeral VM yoki container integration;
- compliance test.
Recipe compile bo‘lishi real service ishlashini kafolatlamaydi.
Secret
Secret recipe yoki repositoryda ochiq saqlanmaydi.
Encrypted data, secret manager yoki runtime credential ishlatiladi.
Node’da secret file yaratilsa:
- permission;
- owner;
- log redaction;
- rotation
boshqariladi.
Drift
Node qo‘lda o‘zgartirilsa, keyingi Chef run kerakli holatni tiklaydi.
Emergency o‘zgarish cookbook yoki policy’da aks etmasa yo‘qoladi.
Configuration management tizimi boshqaradigan fayllar aniq belgilanadi.
Custom resource
Takroriy resurslar custom resource’ga birlashtiriladi. U property, default action va ichki resource’larni belgilaydi. Consumer recipe implementation detallarini takrorlamasdan domain-level amalni chaqiradi.
Idempotency tekshiruvi
Converge’dan keyingi ikkinchi Chef run odatda nol yoki kutilgan minimal o‘zgarish ko‘rsatishi kerak. Har safar updated bo‘ladigan resource config, timestamp yoki nondeterministik template muammosini bildirishi mumkin.
Cookbook dependency
Cookbook boshqa cookbook’ga metadata orqali tayanadi. Resolver mos versiyalarni tanlaydi. Policyfile aniq dependency graphni lock qilib, turli node’larda bir xil cookbook to‘plamini ta’minlaydi.
Compliance profile
Configuration managementdan tashqari tizim holati testlar bilan tekshiriladi. Misollar:
- taqiqlangan port yopiq;
- password policy mavjud;
- file permission to‘g‘ri;
- kerakli service ishlayapti.
Test natijasi report va auditga uzatiladi.
Bootstrap
Yangi node birinchi marta Chef server bilan ro‘yxatdan o‘tib, boshlang‘ich credential va run list oladi. Bootstrap credential keyinchalik almashtiriladi.
Bog‘liq tushunchalar
Configuration management, Chef client, Cookbook, Recipe, Resource, Run list, Converge, Ohai, Policyfile, Idempotency