Starting with version 26, the D2000 system supports containerization on the Kubernetes (K8s) platform.
This document contains a basic overview of features and functionality.
Overview
The containerized D2000 has the following features:
- Each D2000 process has a separate image and is run as a separate pod. It can be started, shut down, restarted, and updated independently using K8s tools.
- The D2000 installation is located in the /opt/d2000 directory.
- The D2000 Server process and its associated processes (CLC, EVH, EDS, ARC, ...) have a shared disk space mapped:
- The D2000 installation configuration files are located in the /config/d2000 directory (instance.properties, ConsolesInfo.txt, LicenceRun.code files). This directory is published in the environment variable D2000_HOME.
- The D2000 application configuration files are located in the application directory /opt/d2000/app/<appname> (application.properties, client.properties files).
- The log directory is located in the installation directory (/opt/d2000/log).
- The configuration, logging, and archive databases are on PostgreSQL database servers located outside the Kubernetes environment. Pods with D2000 Server and D2000 Archiv processes have configured ODBC connections to the respective databases (configuration file /config/odbc/odbc.ini published in the environment variable ODBCINI).
Note: To prevent TCP connections between D2000 processes and PostgreSQL database servers from being disconnected, it is necessary to set non-zero KeepaliveTime and KeepaliveInterval parameters in the ODBC connection configurations in the configuration file /config/odbc/odbc.ini, the recommended value is 60 seconds:
KeepaliveTime = 60
KeepaliveInterval = 60 - The D2000 Server, D2000 Kom, and D2000 Web server processes have the appropriate capabilities set (access to privileged network ports, raw sockets, or special files [serial ports]) using the capabilities setting (in the configuration YAML files and in the supplied container images).
- Licensing: In the K8s environment, an external License Server is used (it can be a public Ipesoft license server or a license server in the customer's infrastructure that uses a Nitrokey USB key).
Note: It is theoretically possible to use a containerized License Server that would run as a pod on a dedicated node and have access to a Nitrokey USB key connected to that node; this functionality is not yet supported.
Reference implementation
The reference implementation includes a redundant (2-node) D2000 application.
In the K8s environment, two D2000 Server processes (A, B) are running, with an anti-affinity configuration to ensure that they do not run on the same node. Within the application, all necessary processes are run as separate pods, with an affinity configuration to ensure that they run on the same node as the corresponding D2000 Server.
The redundant application has two D2000 Archiv processes, operating as instances (active and passive) and connecting to the active (HOT) D2000 Server process. Using the affinity configuration, it is achieved that instance 1 runs on a node with D2000 Server A, instance 2 on a node with D2000 Server B.
The D2000 CfgSynchroAuto utility is automatically run by the D2000 Server process when connecting the second D2000 Server process to redundancy, to synchronize the configuration databases.
The D2000 Arcsynchro utility is automatically run by the corresponding instance of the D2000 Archiv process at startup to patch a hole in its archive database.
Configuration YAML files are generated using Help Chart files.
Network transfers
The following ports are allowed in the Kubernetes cluster environment by default:
The following ports are allowed to the external environment by default:
- TCP port 5432: D2000 Server process access to the configuration and monitoring database, D2000 Archiv process access to the archive database.
- Access to license servers. If public license servers are used, it is necessary to allow access to TCP ports 443 to the lic-v2-a.ipesoft.com and lic-v2-b.ipesoft.com servers.