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:

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:

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.


Redundancia systému D2000
Licenčný server D2000
D2000 Helm Chart