Skip to content

2.1. System Architecture


Physical Architecture

OPENMARU COP routes user traffic into the cluster through an external load balancer. The overall configuration is as follows.

Physical architecture

Layers

LayerComponentsRole
Access layerLoad balancer (L4/L7)Entry point for external traffic, TLS termination, Kubernetes API proxy
Management layerBastionInstallation automation, DevOps tools, NFS storage hosting
Control plane3 Master nodesAPI server, etcd, controller manager, scheduler
Data planeN Worker nodesRunning the application workloads (pods)
Infra layer (optional)Infra nodesDedicated to infrastructure workloads such as monitoring and CI/CD (configured in the Enterprise architecture)
Storage layerNFS / Local Path ProvisionerDynamic volume provisioning

⚠️ Note: In a production environment, a separate physical or cloud L4/L7 load balancer is the default. The HAProxy built into the Bastion is a component used in environments that have no separate load balancer, or during initial installation. If you use the Bastion HAProxy in production as it is, note that the Bastion is physically a single server, so a failure makes it a single point of failure (SPOF) that takes down cluster API access and the entire service entry point.


Bastion Server Configuration

The Bastion server is the central management server hosting installation and operations management and the DevOps tools. It consists of the following services.

ServiceRolePortExecution
Docker EngineContainer runtime-systemd
DNS (BIND)Internal DNS service53systemd
NFS ServerShared storage (/data/nfsshare)2049systemd
ChronyTime synchronization123systemd
HAProxyLoad balancer6443, 443, 80systemd
GitLabSource code management1080, 1022Docker
JenkinsCI server18080, 18022Docker
HarborContainer registry8443Docker
NexusArtifact repository8081Docker
ChartMuseumHelm chart repository8181Docker
MariaDBDatabase for sample application testing3306Docker

Ansible automation tooling is also installed on the Bastion, making it the point from which configuration, upgrade, and operations work is run against every node in the cluster.


RKE2 Cluster Configuration

The Kubernetes cluster of OPENMARU COP is based on the RKE2 distribution and is divided into a control plane and a data plane.

RKE2 control plane / data plane configuration
ItemValue
DistributionRKE2
CNICanal (Calico + Flannel)
Security profileCIS benchmark
Container runtimecontainerd
Image GC thresholdsHigh 80% / Low 60%

Namespace Structure

NamespacePurpose
kube-systemKubernetes system components
openmaru-copOPENMARU COP Console
openmaru-ssoKeycloak SSO, LLDAP
openmaru-observMSAP Observability (metrics, logs, alerts)
openmaru-apmMSAP APM
cert-managerCertificate management
argocdArgoCD GitOps deployment
nfs-provisionerNFS dynamic provisioning
local-path-storageLocal Path dynamic provisioning
gpu-operatorNVIDIA GPU Operator (when GPU nodes are configured)
openmaru-cronhpaCronHPA controller
openmaru-vllmvLLM/CogentAI (when AI/GPU workloads are configured)

Network Topology

Network topology

The Ingress processing path is as follows.

Ingress processing path

ℹ️ Note: OPENMARU COP uses the HAProxy Ingress Controller by default as the in-cluster Ingress controller. The NGINX Ingress Controller can also be selected as an option, but the community ingress-nginx project has reached end of maintenance (no new releases or security patches after March 2026), so the default HAProxy Ingress Controller is recommended unless there is a particular reason to do otherwise.

SSO authentication follows this flow.

SSO authentication flow

High Availability (HA) Architecture

  • Load balancer: Health-check-based load distribution to the API servers (:6443) of the Master nodes, round-robin
  • etcd: With 3 Master nodes, based on the Raft consensus algorithm; quorum is 2 of 3, tolerating the failure of at most 1 node
  • etcd backup: A scheduled automatic snapshot backup must be configured. For the actual backup execution and retention procedure, refer to 5.1. Troubleshooting Guide - Restoring from a Master Backup (etcd).

Impact by Failure Scenario

ScenarioImpact
2 or more Master nodes fail at onceQuorum is lost and cluster control stops (application pods keep running, but new deployments and changes are not possible)
1 Master node failsQuorum is kept and the cluster operates normally (handled automatically by HA)
A Worker node failsIf the pods on that node were Ready, they are rescheduled automatically (some delay is possible depending on PDBs and spare resources); application availability may be affected temporarily
The Bastion fails(When the built-in Bastion HAProxy is used as the load balancer) The cluster API and the entire service entry point become unreachable. The DevOps tools hosted on the Bastion -- GitLab, Jenkins, Harbor, Nexus -- also stop (no new builds or deployments, though applications already running keep running)

⚠️ Caution: Master nodes must always be configured in an odd number (3, 5, and so on), and at least 2 must stay healthy for the cluster to operate normally.