...
- Každý D2000 proces má samostatný image a je spustený ako samostatný pod. Každý je riadený samostatným workload objektom typu StatefulSet s počtom inštancí 1. Prostriedkami K8s je možné ho samostatne štartovať, vypínať, reštartovať, aktualizovať.
- Inštalácia D2000 je umiestnená v adresári /opt/d2000.
- Proces D2000 Server a k nemu prislúchajúce procesy (CLC, EVH, EDS, ARC, ...) majú namapované spoločný diskový priestor:
- Konfiguračné súbory inštalácie D2000 sú umiestnené v adresári /config/d2000 (súbory instance.properties, ConsolesInfo.txt, LicenceRun.code). Tento adresár je zverejnený v environment premennej D2000_HOME.
- Konfiguračné súbory aplikácie D2000 sú umiestnené v aplikačnom adresári /opt/d2000/app/<appname> (súbory application.properties, client.properties).
- Adresár s logmi je umiestnený v adresári inštalácie (/opt/d2000/log).
- Konfiguračná, monitorovacia a archívna databáza sú na dedikovaných PostgreSQL databázových serveroch, ktoré môžu byť umiestnené v ale aj mimo prostredia Kubernetes. Pody s procesmi D2000 Server a D2000 Archív majú nakonfigurované ODBC spojenia na príslušné databázy (konfiguračný súbor /config/odbc/odbc.ini zverejnený v environment premennej ODBCINI).
Poznámka: Aby sa nerozpadávali TCP spojenia medzi D2000 procesmi a PostgreSQL databázovými servermi, je potrebné v konfiguráciach ODBC spojení v konfiguračnom súbore /config/odbc/odbc.ini nastaviť nenulové parametre KeepaliveTime a KeepaliveInterval, odporúčaná hodnota je 60 sekúnd:
KeepaliveTime = 60
KeepaliveInterval = 60 - Procesy D2000 Server, D2000 Kom a D2000 Web server majú nastavené príslušné capabilities (prístup na privilegované sieťové porty, raw sockety, prípadne špeciálne súbory [sériové porty]) pomocou nastavenia capabilities (v konfiguračných YAML súboroch aj v dodávaných kontajnerových images).
- Procesy v kontajneroch bežia pod neprivilegovaným užívateľom a skupinou d2000 s UID 900 a GID 900.
- Licencovanie: V prostredí K8s je použitý externý Licenčný server (môže ísť o verejný Ipesoft licenčný server alebo licenčný server v infraštruktúre zákazníka, ktorý používa Nitrokey USB kľúč).
Poznámka: Teoreticky je možné použiť aj kontajnerizovaný Licenčný server, ktorý by bol spustený ako pod na dedikovanom node a mal prístup k Nitrokey USB kľúču pripojenému k tomuto nodu; táto funkcionalita zatiaľ nebola podporená.
Image repozitár
Image jednotlivých D2000 procesov sú dostupné v internom repozitári Harbor. Image sú určené pre platformu x86_64-linux.
Názvoslovie používaných tag-ov je nasledovné: v<major>.<minor>.<release>[-<patch>]
Napr. v26.00.082-123 alebo v26.00.082.
Tag bez čísla patchu je vždy aplikovaný na posledný vygenerovaný build alebo patch, čo umožňuje automatický rolling update na najnovší patch danej verzie a releasu. Tag latest je používaný len na interné image vývojovej vetvy.
Zoznam image
Kvôli minimalizácii použitého diskového priestoru pri nasadení sú pre vybrané procesy k dispozícii viaceré varianty: podľa databázového rozhrania ODBC a OCI (DBManager, EDA Server, Archív) a podľa podpory Javy (Kernel, Event Handler).
Špeciálne prístupové práva (capabilities) ako napr. prístup na privilegované sieťové porty, raw sockety či sériové porty v súčasnosti nie je možné zahrnúť do image a je potrebné ich zadať v runtime konfigurácii. V dodávanom Docker Compose súbore a Helm Charte sú automaticky nastavené.
Tabuľka zobrazuje image jednotlivých komponentov D2000 s potrebnými capabilities pre ich plnú funkčnosť.
| Názov image | D2000 komponent/proces | Potrebné capabilities |
|---|---|---|
| ipesoft/d2/alarm | D2000 ALARM | |
| ipesoft/d2/archiv_oci | D2000 ARCHIV. Prístup k dátam cez Oracle Call Interface (OCI). | |
| ipesoft/d2/archiv_odbc | D2000 ARCHIV. Prístup k dátam cez ODBC. | |
| ipesoft/d2/arcsynchro_oci | ArcSynchro. Prístup k dátam cez OCI. | |
| ipesoft/d2/arcsynchro_odbc | ArcSynchro. Prístup k dátam cez ODBC. | |
| ipesoft/d2/calc | D2000 CALC | |
| ipesoft/d2/d2connector | D2Connector | |
| ipesoft/d2/d2ping | D2000 Ping | |
| ipesoft/d2/dbmanager_oci | D2000 DBManager. Prístup k dátam cez OCI. | |
| ipesoft/d2/dbmanager_odbc | D2000 DBManager. Prístup k dátam cez ODBC. | |
| ipesoft/d2/edaserver_oci | EDA Server. Prístup k dátam cez OCI. | |
| ipesoft/d2/edaserver_odbc | EDA Server. Prístup k dátam cez ODBC. | |
| ipesoft/d2/event | D2000 Event Handler alebo D2000 Script Execution Server | |
| ipesoft/d2/event_edathin | D2000 Event Handler alebo D2000 Script Execution Server so vstavaným EDA Client | |
| ipesoft/d2/event_edathin_od | D2000 Event Handler alebo D2000 Script Execution Server so vstavaným EDA Client a OD knižnicou | |
| ipesoft/d2/event_java | D2000 Event Handler alebo D2000 Script Execution Server s Java Runtime Environment (JRE) | |
| ipesoft/d2/event_java_edathin | D2000 Event Handler alebo D2000 Script Execution Server s JRE a vstavaným EDA Client | |
| ipesoft/d2/event_java_edathin_od | D2000 Event Handler alebo D2000 Script Execution Server s JRE, vstavaným EDA Client a OD knižnicou | |
| ipesoft/d2/gtwcli | D2000 GateWay Client | |
| ipesoft/d2/gtwsrv | D2000 GateWay Server | |
| ipesoft/d2/init_odbc | Inicializačný kontajner | |
| ipesoft/d2/kernel_odbc | D2000 Server. Prístup k dátam cez ODBC. | NET_RAW |
| ipesoft/d2/kernel_odbc_java | D2000 Server s JRE. Prístup k dátam cez ODBC. | NET_RAW |
| ipesoft/d2/kom | D2000 KOM | DAC_OVERRIDE, NET_BIND_SERVICE, NET_RAW, SYS_RAWIO |
| ipesoft/d2/opcuaserver | D2000 OPC UA Server | |
| ipesoft/d2/sas | D2000 SAS | |
| ipesoft/d2/smartweb | SmartWeb | |
| ipesoft/d2/smartweb-demo | SmartWeb s demo aplikáciou | |
| ipesoft/d2/switch | D2000 Switch | |
| ipesoft/d2/tcldeployer | D2000 Thin Client Deployer | |
| ipesoft/d2/tcts | D2000 Thin Client Terminal Server | |
| ipesoft/d2/tell | D2000 TELL | |
| ipesoft/d2/topology | D2000 Topology |
Použitie
Kontajnery majú predvolene nastavený entry point na príslušný proces. Pretože kontajnery d2/kernel a d2/event*, môžu za určitých okolností spúšťať ďalšie procesy, majú ako entry point použitý ľahký inicializačný systém tini, ktorý následne spúšťa príslušný proces. Preťažovať entry point kontajnerov teda nie je potrebné a zvyčajne ani nie je ani žiadané. Parametre pre procesy prednastavené nie sú.
Kontajnery očakávajú mapovanie nasledovných ciest na perzistenté úložisko. Najbežnejší je tzv. "bind mount", kedy je adresár v kontajneri mapovaný do adresára na hostiteľskom stroji. Takto je možný jednoduchý prístup k dátam aj mimo kontajnera.
| Cesta | Popis |
|---|---|
| /config | Adresár konfiguračných súborov pre D2000, ODBC DSN a Oracle TNS.
|
| /opt/d2000/app | Aplikačný adresár. Pod aplikačným adresárom je vytvorený podadresár samotnej aplikácie minimálne so súbormi application.properties a client.properties. Narozdiel od štandardného nekontajnerizovaného nasadenia neobsahuje dáta konfiguračnej, monitorovacej ani archívnej databázy. |
| /opt/d2000/log | Logovací adresár |
Proces v kontajneri beží pod neprivilegovaným používateľom a skupinou d2000 s UID 900 a GID 900. Inicializačný kontajner automaticky nastavuje vlastníka 900:900 pre vymenované cesty.
Inicializačný kontajner
Kontajner slúži na inicializáciu kontajnerizovanej inštancie D2000 - vytvára konfiguračný súbor inštancie instance.properties a ukladá licenčný súbor LicenceRun.code. Potom vytvára prázdnu aplikáciu s konfiguračnou a monitorovacou databázou umiestnenou na externom databázovom serveri PostgreSQL. Voliteľne vytvára aj archívne databázy a EDA schému. V prípade, že databázy už existujú, tak túto činnosť preskakuje. Okrem toho nastavuje vlastníka pre cesty perzistentného úložiska.
Kontajner pre svoju funkčnosť predpokladá nastavenie nasledovných premenných prostredia:
| Premenná | Popis |
|---|---|
| D2APP | Názov vytváranej D2000 aplikácie. |
| D2APPDB | Názov existujúcej aplikačnej databázy, pre ktorú bude vytvorený ODBC DSN s názvom <d2app>.APPDB. Táto databáza sa použije aj na vytvorenie EDA schémy. Prázdne, ak sa aplikačná databáza nepoužije. |
| D2APPDESC | Popis vytváranej D2000 aplikácie. |
| D2ARCHIVES | Čiarkou oddelený zoznam vytváraných archívov (napr.: self,test). Prázdne ak sa archívna databáza nemá vytvárať. |
| D2REDUNDANT_KERNEL | Názov a priorita redundantného kernela pre aktuálnu inštanciu vo forme <meno>:<priorita>. Napr.: "a:2". Ak prázdne, tak redundancia nebude vytvorená. |
| D2REDUNDANT_KERNELS | Čiarkou oddelený zoznam kernelov vo forme <meno_1>:<adresa_1>,<meno_2>:<adresa_2>. Napr.: "a:d2-knl-a,b:d2-knl-b". Ak prázdne, tak redundancia nebude vytvorená. |
| EDA_USER | Názov vytváraného EDA používateľa a schémy. Prázdne, ak EDA nebude použitá. |
| PGHOST | Adresa bežiaceho PostgreSQL servera. |
| PGPORT | Port bežiaceho PostgreSQL servera. |
| PGUSER | Meno databázového používateľa s administrátorskými právami. Musí mať práva na vytváranie databázových používateľov a databáz. Štandardne postgres. |
Perzistentné úložisko očakáva namapované rovnako ako kontajnery D2000 procesov.
Kontajner využíva mapované secret - súbory obsahujúce heslá:
| Cesta v kontajneri | Obsah |
|---|---|
| /run/secrets/d2_licence | Licenčný súbor D2000 (LicenceRun.code) |
| /run/secrets/db_admin_password | Heslo databázového administrátora definovaného v premennej prostredia PGUSER. |
| /run/secrets/eda_password | Heslo vytváraného databázového používateľa definovaného v premennej prostredia EDA_USER. |
Heslá nemôžu obsahovať nasledovné znaky: ` & / ' ". Odporúčané sú len alfanumerické znaky.
Referenčná implementácia
Referenčná implementácia zahŕňa redundantnú (2-nodovú) aplikáciu D2000.
V prostredí K8s sú spustené 2 procesy D2000 Server (A, B), pričom pomocou konfigurácie anti-afinity je dosiahnuté, že nebežia v rámci jedného nodu. V rámci aplikácie sú spustené všetky potrebné procesy ako samostatné pody, pričom pomocou konfigurácie afinity je dosiahnuté, že bežia na tom istom node ako príslušný D2000 Server. Všetky procesy bežia v režime vzdialených procesov a majú teda v konfigurácii D2000 vypnutý autoštart. O životný cyklus pod-ov sa starajú StatefulSet controllery.
Redundantná aplikácia má dva procesy D2000 Archív, fungujúce ako inštancie (aktívna a pasívne) a pripájajúce sa k aktívnemu (HOT) procesu D2000 Server. Pomocou konfigurácie afinity je dosiahnuté, že inštancia 1 bežia node s D2000 Serverom A, inštancia 2 s D2000 Serverom B.
...
Utilita D2000 Arcsynchro je spúšťaná automaticky príslušnou inštanciou procesu D2000 Archív pri štarte na zaplátanie diery v jeho archívnej databáze.Konfiguračné YAML súbory sú vygenerované pomocou Helm Chart súborov.
Vytvorenie aplikácie prebieha ručným vytvorením konfiguračnej, monitorovacej, archívnej a aplikačnej databázy pomocou template SQL skriptov alebo exportom existujúcich databáz a ich importom v cieľovom databázovom systéme. Následne je potrebné vytvoriť K8s objekty. Pre procesy D2000 je pripravený pomocný Helm Chart súbor, ktorého výstupom sú konfiguračné YAML súbory pre jednotlivé procesy. Pre ostatné konfiguračné objekty ako perzistentné úložisko, D2000 a ODBC/OCI konfiguračné súbory a pod. sú poskytnuté priamo YAML súbory.
Nasledovné schémy znázorňujú porovnanie nasadenia referenčnej aplikácie v prostredí virtuálnych mašín (VM) a v prostredí Kubernetes.
Sieťové prestupy
Do prostredia Kubernetes clustra sú povolené štandardne porty:
...
- TCP port 5432: Prístup procesu D2000 Server na konfiguračnú a monitorovaciu databázu, prístup procesu D2000 Archív na archívnu databázu.
- Prístup na licenčné servery. Ak sú použité verejné licenčné servery, je nutné povoliť prístup na TCP porty 443 na servery lic-v2-a.ipesoft.com a lic-v2-b.ipesoft.com.
Správa aplikácie
Správa aplikácie bežiacej v prostredí Kubernetes je možná z management konzoly príkazmi nástroja kubectl alebo cez webovú management platformu, napr. Rancher.
Vypnutie/zapnutie procesu
Pretože D2000 proces je v K8s reprezentovaný objektom typu StatefulSet, vypnutie a zapnutie procesu znamená nastavenie počtu replík StatefukSet-u na 0 (vypnutie) resp. na 1 (zapnutie). Pri vyššom počte replík by vznikol D2000 proces s rovnakým menom ako už beží a preto by ho D2000 server odmietol pripojiť. Podpora viacerých replík D2000 procesov prostriedkami K8s momentálne nie je podporená, je však plánovaná pre vybrané typy procesov.
| Blok kódu | ||
|---|---|---|
| ||
# 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
| Blok kódu | ||
|---|---|---|
| ||
# syntax:
kubectl logs <pod-name> [-n <namespace>]
# príklad:
kubectl logs d2-clc-a-self-0 |
(Re)deploy procesu
Deploy 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 init kontajnerov a následné spustenie kontajnerov. V prípade, že kontajner používa image bez čísla patchu, bude stiahnutý najnovší patch daného D2000 procesu.
| Blok kódu | ||
|---|---|---|
| ||
# syntax:
kubectl rollout restart statefulset <name> [-n <namespace>]
# príklad:
kubectl rollout restart statefulset d2-evh-a-self |
Nasadenie patchu
Nasadenie patchu je realizované modifikáciou image v príslušnom StatefulSet-e. Po modifikácii image K8s automaticky vykoná redeploy StatefulSet-u.
| Blok kódu | ||
|---|---|---|
| ||
# 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=harbor.k8s.ipstest.sk/ipesoft/d2/calc:v25.00.080 |



