Sobes.tech
Junior

Šta je deklarativni pristup u DevOps-u?

sobes.tech АИ

Одговор од АИ

Декларативни приступ у DevOps фокусира се на описивање жељеног крајњег стања система, а не на низ корака за његово постизање. Алати који користе овај приступ одговорни су за дефинисање и извршавање потребних операција за довођење система у то стање.

Основне разлике од императивног приступа:

  • Императивни: Описује како достићи циљ (низ команда).
  • Декларативни: Описује шта треба бити у крајњем исходу (крајње стање).

Примери алата који користе декларативни приступ:

  • Kubernetes: Опис жељеног броја реплика пода, конфигурације сервиса итд. у YAML датотекама. Kubernetes подржава ово стање.
  • Terraform: Инфраструктура као код. Опис жељене инфраструктуре (виртуелне машине, мреже, балансери) у .tf датотекама. Terraform креира или мења ресурсе у складу са овим описом.
  • Ansible (делимично, у плейбуцима): У задацима (tasks) често се описује крајње стање (нпр. "убедити се да је пакет инсталиран", "убедити се да датотека постоји са одређеним садржајем").

Предности:

  • Идемпотентност: Многократно примењивање истог декларативног описa неће изазвати неочекиване промене ако систем већ није у жељеном стању.
  • Отпорност: Алати настоје да обнове жељено стање у случају одступања.
  • Једноставност разумевања: Опис стања је често интуитивнији од детаљног скрипта за извршавање.
  • Побољшана скалабилност: Једноставније управљање великим, сложеним системима фокусирајући се на крајњи резултат.
  • Смањење конфигурацијског дрейфа: Систем се активно одржава у описаном стању.

Пример (упоређење приступа):

Креирање датотеке /etc/myapp.conf са садржајем "data=value".

Императивни:

# Проверити да ли датотека постоји
if [ ! -f /etc/myapp.conf ]; then
  # Креирати директоријум ако не постоји
  mkdir -p /etc
  # Креирати датотеку
  echo "data=value" > /etc/myapp.conf
fi
# Или једноставно:
# echo "data=value" > /etc/myapp.conf

Декларативни (принцип, а не стварни синтаксис):

file: /etc/myapp.conf
state: present # Датотека мора постојати
content: "data=value" # Са овим садржајем

Алат који користи декларативни приступ сам ће одредити да ли треба креирати датотеку, мењати њен садржај или једноставно проверити њено постојање.