Skip to main content

DevOps Overview

The Vecton platform runs on a self-managed bare-metal Kubernetes cluster with a fully automated GitOps deployment pipeline. This section covers the infrastructure, deployment workflows, and operational tooling.

Infrastructure​

Cluster Topology​

┌─────────────────────────────────────────────────────────────┐
│ Kubernetes Cluster │
│ (kubeadm, 4 nodes) │
│ │
│ ┌──────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ Master Node │ │ Worker 1 │ │ Worker 2 │ Worker 3│
│ │ API Server │ │ Workloads │ │ Workloads │ Workloads│
│ │ etcd │ │ Ceph OSD │ │ Ceph OSD │ Ceph OSD │
│ │ Scheduler │ │ │ │ │ │
│ └──────────────┘ └────────────┘ └────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Platform Services ││
│ │ ArgoCD │ Traefik │ MetalLB │ cert-manager │ Harbor ││
│ │ CNPG │ RabbitMQ│ KEDA │ Rook-Ceph │ SOPS ││
│ └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘

Platform Components​

ComponentVersionPurpose
Kubernetes1.29+Container orchestration (kubeadm)
CloudNativePGLatestPostgreSQL 16, 3-node HA cluster
RabbitMQ OperatorLatest3-node RabbitMQ cluster
Rook-CephLatestDistributed storage (S3 + block)
Traefikv3Ingress controller with Let's Encrypt
MetalLBLatestL2 load balancer for bare-metal
cert-managerLatestTLS certificates (Cloudflare DNS-01)
ArgoCDLatestGitOps continuous delivery
KEDALatestEvent-driven autoscaling (scale-to-zero)
HarborLatestContainer registry (harbor.mng.vecton.hu)
SOPS + ageLatestSecret encryption in git

GitOps Workflow​

Developer ──push──▶ GitHub ──webhook──▶ GitHub Actions
│
┌─────────▼─────────┐
│ Build & Push to │
│ Harbor Registry │
└─────────┬─────────┘
│
┌─────────▼─────────┐
│ DevOps API: │
│ Create GitOps PR │
└─────────┬─────────┘
│
┌─────────▼─────────┐
│ Auto-merge PR │
│ (devops repo) │
└─────────┬─────────┘
│
┌─────────▼─────────┐
│ ArgoCD detects │
│ change and syncs │
└───────────────────┘

Repositories​

RepositoryPurpose
devopsKubernetes manifests, Kustomize overlays, GitOps config
devops-apiREST API for automated deployments and tenant management
initDeveloper environment setup scripts
documentationsThis documentation site (Docusaurus)

Namespace Organization​

NamespaceContents
argocdArgoCD server and application controller
postgresqlCloudNativePG cluster (shared across all apps)
rabbitmq-systemRabbitMQ cluster operator and instances
rook-cephCeph storage cluster
traefikIngress controller
metallb-systemLoad balancer
cert-managerTLS certificate management
kedaAutoscaler
vecton-adminAdmin service
vecton-identityIdentity service
{tenant-name}Per-tenant namespace (e.g., mugli, demo)

ArgoCD App-of-Apps​

ArgoCD uses the App-of-Apps pattern:

Root Application
├── Platform Apps
│ ├── postgresql
│ ├── rabbitmq
│ ├── rook-ceph
│ ├── traefik
│ ├── metallb
│ ├── cert-manager
│ ├── keda
│ └── harbor
├── Vecton Apps
│ ├── vecton-admin
│ └── vecton-identity
└── Tenant Apps
├── mugli
├── demo
└── ...

Each application has sync waves to ensure correct deployment order. See the Sync Waves documentation for details.

Secret Management​

Secrets are encrypted with SOPS using age keys:

# Encrypt a secret
sops --encrypt --age <public-key> secret.yaml > secret.enc.yaml

# ArgoCD has the age private key to decrypt at sync time
# Configured via KSOPS (Kustomize Secret Generator)

Secrets are never stored in plaintext in git. The age private key is stored only in the ArgoCD namespace.