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.