Sobes.tech
Junior

DevOps-da deklarativ yanaşma nədir?

sobes.tech Süni İntellekt

AI-dan cavab

DevOps-da deklarativ yanaşma, sistemin istənilən son vəziyyətini təsvir etməyə yönəlib, onun əldə olunması üçün ardıcıl addımların siyahısından çox. Bu yanaşmanı istifadə edən alətlər, sistemi həmin vəziyyətə gətirmək üçün lazım olan əməliyyatları müəyyən edir və icra edir.

İmperativ yanaşma ilə əsas fərqlər:

  • İmperativ: Necə məqsədə çatmaq (əmrlər ardıcıllığı) haqqında təsvir edir.
  • Deklarativ: olmalı olduğunu (son vəziyyət) təsvir edir.

Deklarativ yanaşmanı istifadə edən alətlərə nümunələr:

  • Kubernetes: YAML fayllarda istənilən pod replikalarının sayı, xidmət konfiqurasiyası və s. təsvir edilir. Kubernetes bu vəziyyəti saxlayır.
  • Terraform: İnfrastruktur kimi kod. İstənilən infrastruktura (virtual maşınlar, şəbəkələr, yük balanslaşdırıcılar) .tf fayllarında təsvir edilir. Terraform bu təsvirə uyğun resursları yaradır və ya dəyişdirir.
  • Ansible (qismən, playbooklarda): Tapşırıqlarda (tasks) çox vaxt son vəziyyət təsvir edilir (məsələn, "paketin quraşdırıldığından əmin ol", "faylın mövcud olduğundan və müəyyən məzmunla olduğundan əmin ol").

Üstünlüklər:

  • İdempotentlik: Eyni deklarativ təsvirin təkrarlanması, sistem artıq istənilən vəziyyətdədirsə, gözlənilməz dəyişikliklərə səbəb olmaz.
  • Dayanıqlıq: Alətlər, dəyişikliklər olarsa, istənilən vəziyyətə qayıtmağa çalışır.
  • Anlaşılma asanlığı: Vəziyyətin təsviri, adətən, ətraflı skriptlərdən daha intuitivdir.
  • Əlavə miqyasda idarəetmə: Böyük və mürəkkəb sistemlərin idarə olunması daha asandır, nəticəyə fokuslanır.
  • Konfiqurasiya fərqlənməsinin azaldılması: Sistem aktiv şəkildə təsvir olunan vəziyyətdə saxlanılır.

Nümunə (yanaşmaların müqayisəsi):

/etc/myapp.conf faylını "data=value" məzmunu ilə yaratmaq.

İmperativ:

# Faylın mövcudluğunu yoxlamaq
if [ ! -f /etc/myapp.conf ]; then
  # Qovluğu yaradın, əgər yoxdursa
  mkdir -p /etc
  # Faylı yaradın
  echo "data=value" > /etc/myapp.conf
fi
# Yaxud sadəcə:
# echo "data=value" > /etc/myapp.conf

Deklarativ (prinsip, real sintaksis deyil):

file: /etc/myapp.conf
state: present # Fayl mövcud olmalı
content: "data=value" # Bu məzmun ilə

Deklarativ yanaşmanı istifadə edən alət, faylı yaradıb-yaratmayacağını, məzmunu dəyişib-dəyişməyəcəyini və ya sadəcə onun mövcudluğunu təmin edib-etməyəcəyini müəyyən edəcək.