Bosh sahifa Wiki Chef

Chef

Chefserver 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;
  • clientnode’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:

  1. package o‘rnatadi;
  2. config template yozadi;
  3. service’ni yoqadi;
  4. service’ni ishga tushiradi.

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:

  1. node ma’lumotini yig‘adi;
  2. policy va cookbooklarni oladi;
  3. resource collection yaratadi;
  4. resurslarni kerakli holatga keltiradi;
  5. 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:

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:

ni belgilaydi.

Bu build qilingan configuration artifactga o‘xshash yondashuv beradi.

Test

Chef ekotizimida bir nechta test darajasi mavjud:

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:

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:

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