Sobes.tech
Junior

Čo je deklaratívny prístup v DevOps?

sobes.tech AI

Odpoveď od AI

Deklaratívny prístup v DevOps sa zameriava na opis želaného konečného stavu systému, nie na sled krokov na jeho dosiahnutie. Nástroje využívajúce tento prístup sú zodpovedné za definovanie a vykonanie potrebných operácií na uvedenie systému do tohto stavu.

Hlavné rozdiely od imperatívneho prístupu:

  • Imperatívny: Popisuje ako dosiahnuť cieľ (súbor príkazov).
  • Deklaratívny: Popisuje čo by malo byť na konci (konečný stav).

Príklady nástrojov využívajúcich deklaratívny prístup:

  • Kubernetes: Popis požadovaného počtu replík podu, konfigurácie služby atď. v YAML súboroch. Kubernetes tento stav podporuje.
  • Terraform: Infraštruktúra ako kód. Popis požadovanej infraštruktúry (virtuálne stroje, siete, vyvažovače záťaže) v .tf súboroch. Terraform vytvára alebo mení zdroje v súlade s týmto popisom.
  • Ansible (čiastočne, v playbookoch): V úlohách (tasks) sa často opisuje konečný stav (napríklad "uistiť sa, že balík je nainštalovaný", "uistiť sa, že súbor existuje s určitým obsahom").

Výhody:

  • Idempotentnosť: Opakované použitie rovnakého deklaratívneho opisu nezpôsobí neočakávané zmeny, ak je systém už v požadovanom stave.
  • Odolnosť: Nástroje sa snažia obnoviť požadovaný stav pri odchýlkach.
  • Jednoduchosť pochopenia: Opis stavu je často intuitívnejší než detailný skript na vykonanie.
  • Vylepšená škálovateľnosť: Jednoduchšie spravovať veľké, zložité systémy, zameriavajúc sa na konečný výsledok.
  • Zníženie odchýlky konfigurácie: Systém je aktívne udržiavaný v opísanom stave.

Príklad (porovnanie prístupov):

Vytvorenie súboru /etc/myapp.conf s obsahom "data=value".

Imperatívny:

# Skontrolovať, či súbor existuje
if [ ! -f /etc/myapp.conf ]; then
  # Vytvoriť adresár, ak neexistuje
  mkdir -p /etc
  # Vytvoriť súbor
  echo "data=value" > /etc/myapp.conf
fi
# Alebo jednoducho:
# echo "data=value" > /etc/myapp.conf

Deklaratívny (zásada, nie skutočný syntax):

file: /etc/myapp.conf
state: present # Súbor musí existovať
content: "data=value" # S takým obsahom

Nástroj využívajúci deklaratívny prístup sám určí, či je potrebné vytvoriť súbor, upraviť jeho obsah alebo ho len overiť.