Přeskočit obsah

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é.

Příklad úpravy modelu v Zookeeperu

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.

/Site/model.yaml
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