All projects

systemsgf platform

My own cloud: Kubernetes, GitOps and automatic deployments on a VPS

Role
Personal project: architecture and operations
Status
In production

The problem

I wanted to ship my projects to company standards (HTTPS, automatic deployments, rollback, monitoring and alerts) without paying for several managed services, and understanding every piece.

What I built

  • K3s cluster on a VPS, with Traefik and Let’s Encrypt certificates issued automatically by cert-manager.
  • GitOps with Argo CD using the app-of-apps pattern: everything running in the cluster is described in one repository, and rollback is a git revert.
  • Reusable CI on GitHub Actions: tests, image on GHCR, version recorded in the catalog and deployment by Argo CD.
  • Secrets safely versioned with Sealed Secrets.
  • Monitoring with Prometheus, Alertmanager and Blackbox Exporter, with build and deploy alerts on Telegram.
  • PostgreSQL 16 with a database and user created automatically for each application.
  • Kafka (Strimzi, KRaft mode) for messaging between services.

Architecture

  1. git pushmain branch
  2. GitHub Actionstests and Docker image
  3. GHCRimage registry
  4. GitOps repositoryversion recorded in the catalog
  5. Argo CDsyncs the cluster
  6. K3sapp live with HTTPS

Build and deployment failures trigger Telegram alerts (Alertmanager).

Technical decisions

K3s instead of full Kubernetes

Fits on a single VPS while keeping the same Kubernetes APIs and tooling.

Catalog + ApplicationSet

Shipping a new app means adding an app.yaml file: one standard chart serves both APIs and front ends.

Secure by default

Firewall open only on 22/80/443, Kubernetes API not exposed, read-only key for Argo CD and no plain-text secrets in Git.

Zero-downtime upgrades

Sized CPU and memory reservations and rolling updates with maxSurge 1 and maxUnavailable 0.

Technologies

  • K3s
  • Argo CD
  • Helm
  • Traefik
  • cert-manager
  • Sealed Secrets
  • GitHub Actions
  • GHCR
  • Prometheus
  • Alertmanager
  • Kafka (Strimzi)
  • PostgreSQL 16
  • Linux (Ubuntu)

Outcome

The platform runs G-Finance, GGoals, the Projects Generator and this portfolio, each in its own namespace and deployed automatically on every push.