Kubernetes (K8s) je platforma na orchestráciu kontajnerov, ktorá automatizuje nasadzovanie, škálovanie a správu aplikácií bežiacich v kontajneroch. Je vhodná najmä pre väčšie produkčné prostredia, kde sú žiadané vlastnosti ako vysoká dostupnosť, škálovateľnosť či load balancing. Vysoká dostupnosť je rovnako ako v prostredí mimo Kubernetes poskytovaná redundanciou systému D2000. Škálovateľnosť je v prostredí Kubernetes jednak možná presťahovaním na výkonnejší nod, no pravdepodobne zaujímavejšia je možnosť dynamicky škálovať procesy D2000. Toto je podporené pri procesoch typu Cluster Event Handler, EDA Server a SmartWeb. Load-balancing je prostriedkami D2000 aj v prostredí Kubernetes možný medzi EDA Servermi, Cluster Event Handler-mi a inštančnými Archívmi. Prostriedkami platformy Kubernetes je navyše možné rozkladať záťaž medzi SmartWeb inštanciami.

Na nasadenie D2000 aplikácie do prostredia Kubernetes je k dispozícii pripravený D2000 Helm Chart.

Reprezentácia procesov

Procesy D2000 v K8s, rovnako ako v Dockeri bežia a sú reprezentované samostatnými kontajnermi. Konfigurácia K8s ale nepracuje priamo s kontajnermi ale objektami, ktoré kontajnery obalujú - Pod. O životný cyklus Pod-ov sa starajú workload objekty. Pre riadenie životného cyklu Pod-ov D2000 procesov je používaný workload objekt typu StatefulSet. Proces D2000 teda v K8s na najvyššej úrovni reprezentuje objekt typu StatefulSet. Jednotlivé Pod-y potom preberajú názov zo StatefulSet-u s doplnením poradového čísla repliky začínajúcim 0. Názvoslovie StatefulSet-ov vychádza z názvu D2000 procesu:

d2-<prípona procesu>[-<meno redundantného kernela>]-<meno procesu>[-<číslo inštancie>]

Napríklad:

  • StatefulSet pre "SELF.ALA" staticky pripojený ku reduntantnému kernelu "a" sa volá "d2-ala-a-self".
    Pod, riadený týmto StatefulSet-om sa potom volá "d2-ala-a-self-0".
  • Druhá inštancia inštančného Archívu "SELF.ARC", staticky pripojená na redundantný kernel "b" je reprezentovaná StatefulSet-om "d2-arc-b-self-2" a Pod-om s názvom "d2-arc-b-self-2-0".
  • Pod tretej repliky Cluster Event Handlera "WORKER.EVH" s pripojením vždy len na aktívny D2000 server by sa volal "d2-evh-worker-2".

Výnimkou použitého workload objektu je len SmartWeb, ktorý je reprezentovaný workload objektom typu Deployment. Názvoslovie Deployment-u je rovnaké ako v prípade StatefulSet-u, no jeho Pod-y majú na konci namiesto poradového čísla doplnený náhodný text.

Objekty K8s jednej aplikácie D2000 sú umiestnené v spoločnom Namespace. V rámci Namespace, ktoré možno chápať ako subdoménu, sa všetky kontajnery sieťovo "vidia" cez meno Pod-u alebo nadradeného workload objektu resp. služby. Meno Namespace je štandardne odvodené od mena aplikácie.

Porovnanie nasadenia dvoj-nodovej redundantnej aplikácie D2000 v prostredí virtuálnych mašín (VM) a v prostredí Kubernetes so zabalením procesov do Kubernetes objektov znázorňujú nasledovné schémy.

                                       

Sieťové prestupy

Na pripojenie k aplikácii bežiacej v prostredí Kubernetes clustra sú potrebné povolenia štandardne pre porty:

  • TCP porty 3119 (mapované na TCP porty procesov D2000 Server): prístup D2000 klientov (D2000 HI, D2000 CNF, D2000 GrEditor, D2000 System Console).
  • UDP porty 3119 (mapované na UDP porty procesov D2000 Server): komunikácia D2000 System Console s procesmi D2000 Server pomocou unicastov (multicasty v prostredí K8s nefungujú).
    Poznámka: Nastavenie "externalTrafficPolicy: Local" v YAML konfiguračných súborov procesov D2000 Server spôsobí, že UDP pakety z vonkajšieho prostredia (od D2000 System Console) majú zachované zdrojové IP adresy a teda aj odpoveď od procesu D2000 Server môže byť poslaná na korektnú (vonkajšiu) IP adresu.

    Poznámka: IP adresy procesov D2000 Server je nutné nakonfigurovať vo Windows registry a zadať procesu D2000 System Console pomocou štartovacích parametrov /RF alebo /S, pričom musí byť zhodný názov redundantnej skupiny aj názov kernelov. IP adresy musia byť zadané nie privátne K8s, ale vonkajšie, ktoré sú dostupné pre procesy mimo K8s prostredie.

    Príklad: štartovanie D2000 System Console: sysconsole.exe /RFk8s_dev
    Definícia redundantnej skupiny k8s_dev v registry:
    Windows Registry Editor Version 5.00
    [HKEY_LOCAL_MACHINE\SOFTWARE\Ipesoft\D2000V70\Redundancy]
    [HKEY_LOCAL_MACHINE\SOFTWARE\Ipesoft\D2000V70\Redundancy\k8s_dev]
    [HKEY_LOCAL_MACHINE\SOFTWARE\Ipesoft\D2000V70\Redundancy\k8s_dev\Kernel_1]
    "IpAddr1"="192.168.253.82"
    "Name"="a"
    [HKEY_LOCAL_MACHINE\SOFTWARE\Ipesoft\D2000V70\Redundancy\k8s_dev\Kernel_2]
    "IpAddr1"="192.168.253.83"
    "Name"="b"

    Redundantná skupina zobrazená v D2000 System Console (zobrazujú sa vonkajšie IP adresy z konfigurácie redundantnej skupiny, nie vnútorné IP adresy 10.x.y.z pridelené jednotlivým Podom).


    Poznámka: Aby D2000 System Console vedela zobraziť konzolové okno procesov, je nutné vypnúť v menu Settings položku Establish direct TCP/IP connection for remote console viewing, takže konzolové informácie idú cez proces D2000 Server a cez jeho otvorený TCP port 3119.
  • Pripojenie na EDA servery z prostredia mimo K8s cluster (prostredníctvom D2000 HI alebo EDA Workbook) momentálne nie je možné.

Do vonkajšieho prostredia sú potrebné povolenia štandardne pre porty:

Správa aplikácie

Spravovať D2000 aplikáciu v K8s je možné z management konzoly pomocou kubectl príkazov. Tieto príkazy nahradzujú volania service managera (napr. systemctl) pre vypnutie a zapnutie procesu a dopĺňajú napríklad škálovanie procesu, redeploy a patchovanie kontajnerov a umožňujú aj rýchly prístup k logom procesu.

Na prepnutie redundancie je stále potrebné použiť nástroj D2000 SysConsole.

Okrem správy cez management konzolu je často k dispozícii aj webová management platforma, napr. Rancher, ktorá kubectl príkazy skrýva za prehľadný webový interface.

Vypnutie/zapnutie procesu

Pretože D2000 proces je v K8s reprezentovaný objektom typu StatefulSet, vypnutie a zapnutie procesu znamená nastavenie počtu replík StatefulSet-u na 0 (vypnutie) resp. na 1 (zapnutie). Podpora viac ako jednej replík D2000 procesov prostriedkami K8s je podporená len pre procesy typu Cluster Event Handler, EDA Server a SmartWeb. U ostatných procesoch by pri vyššom počte replík vznikol D2000 proces s rovnakým menom ako už beží a preto by ho D2000 server odmietol pripojiť. Toto by spôsobilo cyklus reštartov takéhoto Pod-u.

# syntax:
kubectl scale statefulset <name> [-n <namespace>] --replicas=<count>

# príklad:
kubectl scale statefulset d2-ala-a-self --replicas=0

Výpis štandardného výstupu

Pri výpise štandarného výstupu je potrebné zadať názov Pod-u, nie StatefulSet-u.

# syntax:
kubectl logs <pod-name> [-n <namespace>]

# príklad:
kubectl logs d2-clc-a-self-0

Redeploy procesu

Redeploy StatefulSet-u v sebe zahŕňa ukončenie bežiacich replík Pod-ov, stiahnutie najnovších použitých image s daným tag-om, a pre každú repliku Pod-u spustenie prípadných inicializačných kontajnerov a následné spustenie kontajnerov. V prípade, že kontajner používa image bez čísla patchu, bude stiahnutý vždy najnovší patch daného D2000 procesu.

# syntax:
kubectl rollout restart statefulset <name> [-n <namespace>]

# príklad:
kubectl rollout restart statefulset d2-evh-a-self

Nasadenie patchu

Nasadenie konkrétneho patchu je realizované modifikáciou image v príslušnom StatefulSet-e. Po modifikácii image K8s automaticky vykoná redeploy StatefulSet-u.

# syntax:
kubectl set image statefulset/<name> [-n <namespace>] <container-name>=<image-name>

# príklad:
kubectl set image statefulset/d2-clc-a-self -n k8s-dev d2container=registry.ipesoft.com/ipesoft/d2/calc:v26.00.082-123

V praxi v produkčnom prostredí sa neodporúča priama modifikácia image. Odporúčaný postup nasadenia patchu je prostriedkami Helm Chartu, modifikáciou image resp. atribútu imageTag vo values.yaml príslušného procesu D2000 Helm Chartu. Takáto modifikácia je potom zapamätaná v revízii Chartu a v prípade problémov je možný jednoduchý rollback.




0 komentárov

Nie ste prihlásený. Akékoľvek zmeny, ktoré vykonáte, sa označia ako anonymné. Ak už máte svoj účet, pravdepodobne sa budete chcieť prihlásiť .