Model ASAB Maestro¶
Model je soubor YAML nebo více souborů YAML popisujících požadované uspořádání clusteru. Je to hlavní bod interakce mezi uživatelem a ASAB Maestro. Model je místo, kde lze přizpůsobit instalaci LogMan.io.
Soubor(y) modelu¶
Soubory modelu jsou ukládány v knihovně ve složce /Site/.
Soubor modelu na uživatelské úrovni je /Site/model.yaml.
Správce tento soubor upravuje ručně, tj. v Knihovně.
Může existovat více souborů modelu. Zejména spravované části modelu jsou odděleny do specifických souborů. Všechny soubory modelu jsou sloučeny do jediné datové struktury modelu, když je model aplikován.
Varování
Nepřepisujte soubory modelu označené jako automaticky generované.
Struktura modelu¶
Příklad souboru /Site/model.yaml:
define:
type: rc/model
services:
nginx:
instances:
1: {node: "node1"}
2: {node: "node2"}
2: {node: "node3"}
mongo:
- {node: "node1"}
- {node: "node2"}
- {node: "node3"}
myservice:
instances:
id1: {node: "node1"}
webapps:
/: My Web application
/auth: SeaCat Auth WebUI
/influxdb: InfluxDB UI
applications:
- name: "ASAB Maestro"
version: v23.32
- name: "My Application"
version: v1.0
params:
PUBLIC_URL: https://ateska-lmio
Sekce define¶
define:
type: rc/model
Určuje typ tohoto souboru YAML tím, že uvádí type: rc/model.
Sekce services¶
Tato sekce uvádí všechny služby v clusteru. V uvedeném příkladu jsou služby „nginx“, „mongo“ a „myservice“.
Každý název služby musí odpovídat příslušnému deskriptoru v knihovně.
Sekce services je stanovena následovně:
services:
<service_id>:
instances:
<instance_no>:
node: <node_id>
<instance-level overrides>
...
<service-level overrides>
Přidat novou instanci¶
Sekce instances v záznamu služby v services musí specifikovat, na kterém uzlu spustit každou instanci.
Toto je kanonická, plně rozvinutá forma:
myservice:
instances:
1:
node: node1
2:
node: node2
3:
node: node2
Služba myservice je naplánována ke spuštění ve třech instancích (instance číslo 1, 2 a 3) na uzlech node1 a node2.
Pro stručnost jsou k dispozici následující formy:
myservice:
instances: {1: node1, 2: node2, 3: node2}
myservice:
instances: ["node1", "node2", "node2"]
Poslední příklad definuje pouze jednu instanci (čísla 1) služby myservice, která bude naplánována na uzel node1:
myservice:
instances: node1
ID instancí v objektové podobě mohou být celá čísla nebo řetězce (např. master-1, hot-2):
myservice:
instances:
master-1:
node: node1
hot-2:
node: node2
Odstraněné instance¶
Některé služby potřebují pevné číslo instance po celou životnost clusteru, zejména pokud jsou některé instance odstraněny.
!!! varování „Přejmenovávání a přesouvání instancí“
Kdykoli přejmenováváte nebo přesouváte instance z jednoho uzlu na druhý, mějte na paměti, že mezi „starou“ a „novou“ instancí neexistuje žádná reference. To znamená, že jedna instance je mazána a druhá vytvářena. Pokud přesunete instanci služby z jednoho uzlu na druhý, mějte na paměti, že data uložená na tomto uzlu a spravovaná nebo používaná službou nebudou přesunuta.
ZooKeeper
Číslo instance v službě ZooKeeper se používá technologií ZooKeeper k identifikaci instance v rámci clusteru. Změna čísla instance tedy znamená odebrání jednoho uzlu ZooKeeper ze clusteru a přidání nového.
Odebraný případ je číslo dvě:
myservice:
instances:
1: {node: "node1"}
# There used to be another instance here but it is removed now
3: {node: "node2"}
V zjednodušené podobě musí být použito null:
myservice: ["node1", null, "node2"]
Zakázané služby¶
Služby lze zakázat tak, že před ID služby vložíte . (tečku). Zakázané služby nejsou nasazeny do clusteru, ale jejich konfigurace zůstává v modelu pro budoucí použití nebo rychlé znovuzapnutí.
services:
# This service is active and will be deployed
my-active-service:
instances:
1:
node: node1
# This service is disabled and will NOT be deployed
.my-disabled-service:
instances:
1:
node: node1
Chcete-li znovu povolit zakázanou službu, jednoduše odstraňte předponu ..
Odkazy na služby napříč aplikacemi¶
ID služeb mohou zahrnovat předponu aplikace k odkázání na deskriptory z jiných aplikací v Knihovně. Použijte formát <AppName>/<název-služby>.
To je užitečné, když chcete nasadit službu z jiné aplikace (např. sdílené infrastruktury služby).
services:
# Reference a service from "ASAB Maestro" application
"ASAB Maestro/zookeeper":
instances:
1:
node: node1
2:
node: node2
3:
node: node3
Bez předpony je služba vyhledávána v aplikacích definovaných v sekci applications modelu.
Přepsání hodnot popisovače¶
Chcete-li přepsat hodnoty z deskriptoru, můžete tyto hodnoty zadat na značkách <instance-level overrides> nebo <service-level overrides>.
V následujícím příkladu je počet cpu nastaven na 2 v Docker Compose a také je sekce asab z popisu asab-governator přepsána na úrovni instance:
services:
...
asab-governator:
instances:
1:
node: node1
descriptor:
cpus: 2
asab:
config:
remote_control:
url:
- http://nodeX:8891/rc
Stejné přepsání, ale na úrovni služby:
services:
...
asab-governator:
instances: [node1, node2]
descriptor:
cpus: 2
asab:
config:
remote_control:
url:
- http://nodeX:8891/rc
Přepisování verzí¶
Chcete-li přepsat verzi, která je ve výchozím nastavení nastavena v souboru verze, použijte v modelu klíčové slovo "version".
V následujícím příkladu bude verze instance asab-governator-1 nastavena na v24.36. Verze v souboru s verzí bude ignorována.
services:
...
asab-governator:
instances:
- node1
version: v24.36
Sekce webapps¶
Sekce webapps popisuje, jaké webové aplikace nainstalovat do clusteru. Podrobnější informace naleznete v kapitole NGINX.
Sekce applications¶
Sekce aplikace uvádí aplikace z Knihovny, které mají být zahrnuty.
applications:
- name: <application name>
version: <application version>
...
Aplikace žije v Knihovně ve složce /Site/<application name>/.
version odkazuje na soubor verze pod /Site/<application name>/Versions/. Pro verze ve formátu v<major>.<minor> může být soubor umístěn v kořenovém adresáři Versions/ nebo ve složce odpovídající verzi (např. v26.12.08 → /Site/<application name>/Versions/v2612/v26.12.08.yaml). Podrobné rozložení a pravidla řešení naleznete v Versions.
Pokud je v sekci applications modelu více položek aplikací, lze více aplikací nasadit společně ve stejném clusteru.
Soubor verze¶
Příklad souboru verze
/Site/ASAB Maestro/Versions/v2612/v26.12.08.yaml (nebo /Site/ASAB Maestro/Versions/v26.12.08.yaml v kořeni Versions/):
define:
type: rc/version
product: ASAB Maestro
version: v23.32
versions:
zookeeper: '3.9'
nginx: '1.25.2'
mongo: '7.0.1'
asab-remote-control: latest
asab-governator: stable
asab-library: v23.15
asab-config: v23.31
seacat-auth: v23.37-beta
asab-iris: v23.31
Sekce params¶
Tato sekce obsahuje parametrizaci webu na úrovni clusteru (globální) klíč/hodnota.
Nastavení proxy¶
Když cluster běží za HTTP/HTTPS proxy, nastavte v sekci params HTTP_PROXY, HTTPS_PROXY a volitelně NO_PROXY. ASAB Maestro automaticky aplikuje tyto proměnné prostředí na všechny kontejnery v clusteru.
params:
HTTP_PROXY: http://X.X.X.X/
HTTPS_PROXY: http://X.X.X.X/
NO_PROXY: localhost,127.0.0.1,10.0.0.0/8
| Parametr | Popis |
|---|---|
HTTP_PROXY |
Proxy URL pro odchozí HTTP provoz |
HTTPS_PROXY |
Proxy URL pro odchozí HTTPS provoz |
NO_PROXY |
Čárkou oddělený seznam názvů hostitelů, IP adres nebo rozsahů CIDR, které obejdou proxy |
Tip
Každá odchozí komunikace HTTPS z clusteru může používat proxy server. Nakonfigurujte svůj proxy server tak, aby umožňoval provoz na doménová jména uvedená v Networking.
Sekce secrets¶
Volitelné. Tajemství na úrovni clusteru jsou generována a uložena ve skladu. Stejná struktura jako u tajemství popisu (klíče VELKÝM_SNAKE_CASE; každý záznam např. type: token, volitelné length). Hodnoty jsou k dispozici jako šablonové parametry v popisech.
secrets:
API_TOKEN:
type: token
length: 32
SHARED_SECRET: {}
Sekce hosts¶
Seznam dalších hostitelů sdílených mezi kontejnery v souboru /etc/hosts.
define:
type: rc/model
...
hosts:
- 10.173.34.1 custom_host
Rozšíření na úrovni modelu¶
Některé technologie umožňují modelu specifikovat rozšíření jejich konfigurace.
Příklad rozšíření na úrovni modelu NGINX:
define:
type: rc/model
...
nginx:
https:
location /:
- gzip_static on
- alias /webroot/lmio-webui/dist
Více modelových souborů¶
Kromě uživatelského modelového souboru (/Site/model.yaml) tam najdete také generované modelové soubory pojmenované podle tohoto vzoru: /Site/model-*.yaml.
Modelové soubory jsou sloučeny do jednoho velkého modelu těsně před zpracováním pomocí ASAB Remote Control.
Modelové soubory v podsložkách¶
Soubory modelu mohou být také organizovány v podsložkách pod /Site/Models/. Soubory odpovídající vzoru model-*.yaml v tomto adresáři a jeho podsložkách jsou rekurzivně zjišťovány a sloučeny do hlavního modelu.
/Site/
model.yaml # Main model file
model-01.automation.yaml # Partial model (merged)
Models/
model-network.yaml # Additional model (merged)
monitoring/
model-metrics.yaml # Nested model (merged)
Poznámka: Sloučeny jsou pouze soubory začínající na model- a končící .yaml. Ostatní soubory jsou ignorovány.
To umožňuje organizovat velké modely do logických skupin, například oddělením síťových služeb, monitorovacího stacku nebo konfigurací specifických pro aplikace.
Částečné soubory modelů (jak model-*.yaml v /Site/, tak model-*.yaml pod /Site/Models/) musí ve své sekci define používat type: rc/model-part:
define:
type: rc/model-part
