Přeskočit obsah

ASAB Maestro Model

Model je YAML soubor nebo více souborů popisujících požadované uspořádání clusteru. Je hlavním bodem interakce mezi uživatelem a ASAB Maestro. Model je místem, kde lze přizpůsobit instalaci LogMan.io.

Modelový soubor(y)

Modelové soubory jsou uloženy v knihovně ve složce /Site/. Modelový soubor uživatelské úrovně je /Site/model.yaml. Administrátor tento soubor upravuje ručně, tj. v knihovně.

Může existovat více modelových souborů. Zejména spravované modelové části jsou odděleny do specifických souborů. Všechny modelové soubory jsou sloučeny do jedné modelové datové struktury, když je model aplikován.

Varování

Neupravit modelové soubory 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 YAML souboru uvedením type: rc/model.

Sekce services

Tato sekce uvádí všechny služby v clusteru. Ve výše 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 předepsána následovně:

services:
  <service_id>:
    instances:
      <instance_no>:
        node: <node_id>
        <instance-level overrides>
      ...
    <service-level overrides>

Přidání nové instance

Sekce instances záznamu služby v services musí specifikovat, na kterém uzlu má být každá instance spuštěna.

Toto je kanonická, plně rozšířená forma:

myservice:
  instances:
    1:
      node: node1
    2:
      node: node2
    3:
      node2

Služba myservice je naplánována ke spuštění ve třech instancích (číslo instance 1, 2 a 3) na uzlech node1 a node2.

Následující formy jsou dostupné pro stručnost:

myservice:
  instances: {1: node1, 2: node2, 3: node2}
myservice:
  instances: ["node1", "node2", "node2"]

Poslední příklad definuje pouze jednu instanci (číslo 1) služby myservice, která bude naplánována na uzel node1:

myservice:
  instances: node1

Odstraněné instance

Některé služby vyžadují pevný počet instancí po celou dobu životního cyklu clusteru, zejména pokud jsou některé instance odstraněny.

Přejmenování a přesun instancí

Při jakémkoli přejmenovávání nebo přesunu instancí 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 odstraněna a druhá vytvořena. Pokud přesunete instanci služby z jednoho uzlu na druhý, buďte si vědomi, že data uložená na tomto uzlu a spravovaná nebo používaná službou nejsou přesunuta.

ZooKeeper

Číslo instance ve službě ZooKeeper slouží technologii ZooKeeper k identifikaci instance v rámci clusteru. Proto změna čísla instance znamená odstranění jednoho uzlu ZooKeeper ze clusteru a přidání nového.

Odstraněná instance je číslo dvě:

myservice:
  instances:
    1: {node: "node1"}
    # Zde se dříve nacházela další instance, ale nyní je odstraněna
    3: {node: "node2"}

Ve zkrácené formě je nutné použít null:

myservice: ["node1", null, "node2"]

Přepis hodnot z deskriptoru

Chcete-li přepsat hodnoty z deskriptoru, můžete zadat tyto hodnoty na označení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é sekce asab z deskriptoru asab-governator je 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řepis, ale na úrovni služby:

services:
  ...

  asab-governator:
    instances: [node1, node2]
     descriptor:
       cpus: 2
    asab:
      config:
        remote_control: 
          url:
            - http://nodeX:8891/rc

Sekce webapps

Sekce webapps popisuje, které webové aplikace mají být do clusteru nainstalovány. Podívejte se na kapitolu NGINX pro více detailů.

Sekce applications

Sekce aplikací 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>/. Verze je specifikována v souboru version ve složce /Site/<application name>/Versions/<application version>.yaml.

Více aplikací může být nasazeno společně ve stejném clusteru, pokud existuje více záznamů aplikací v sekci applications modelu.

Soubor verze

Příklad souboru verze /Site/ASAB Maestro/Versions/v23.32.yaml:

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 páry klíč/hodnota pro úrovně clusteru (globální) parametrizaci stránky.

Rozšíření na úrovni modelu

Některé technologie umožňují, aby model specifikoval 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é úrovně modelového souboru (/Site/model.yaml) zde 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.