← Katalog
E I A C

mgmt

Infrastructure-as-Code

Deklaratywny, zdarzeniowy config management z automatyczną konwergencją stanu w czasie rzeczywistym.

mgmt to next-generation narzędzie do zarządzania konfiguracją, które łączy deklaratywny opis pożądanego stanu infrastruktury z modelem zdarzeniowym (event-driven) zamiast klasycznego pollingu czy cyklicznych przebiegów co N minut. Zamiast okresowo sprawdzać, czy stan się zgadza, mgmt reaguje na zdarzenia w czasie rzeczywistym i natychmiast konwerguje system do zdefiniowanego stanu - co drastycznie skraca czas reakcji na driff.

Konfiguracja opisywana jest jako graf zależności między zasobami, a silnik wykonawczy przetwarza go równolegle tam, gdzie to możliwe, zamiast wykonywać zadania sekwencyjnie jak w wielu starszych narzędziach tej klasy. Do tego dochodzi natywne wsparcie dla rozproszonej pracy wielu agentów współdzielących stan poprzez wbudowany etcd, co czyni mgmt interesującą alternatywą dla Puppet czy Chef w scenariuszach wymagających spójności w czasie rzeczywistym na wielu maszynach jednocześnie.

Dla katalogu EIAC mgmt jest ciekawym przykładem “infrastructure as code” pchniętego w stronę reaktywnego, rozproszonego control-planu - kod opisuje nie tylko co ma być, ale też jak szybko i w jaki sposób system ma do tego dążyć, łącząc deklaratywność z modelem zdarzeń znanym z systemów strumieniowych.

Kiedy używać

  • Potrzebujesz natychmiastowej reakcji na zmiany stanu infrastruktury, a nie okresowego skanowania co kilka minut.
  • Zarządzasz rozproszonym klastrem maszyn, które muszą współdzielić spójny stan konfiguracji.
  • Zależy Ci na równoległym wykonywaniu niezależnych zasobów z grafu konfiguracji zamiast sekwencyjnego przebiegu.
  • Eksplorujesz alternatywy dla tradycyjnych narzędzi (Puppet, Chef, Ansible) w kierunku architektury zdarzeniowej.

Przykład użycia

import "fmt"

$name = "eiac-web"

file "/etc/nginx/nginx.conf" {
	content => fmt.printf("server_name %s;\n", $name),
	state => "exists",
}

svc "nginx" {
	state => "running",
	startup => "enabled",
}

Edge { from => file["/etc/nginx/nginx.conf"], to => svc["nginx"] }