Architecture
Vesta consists of four independently deployable components that work together to provide a complete Platform-as-a-Service on Kubernetes.
Components
Operator (Go / Kubebuilder)
The operator watches Vesta’s Custom Resource Definitions (CRDs) and reconciles the corresponding Kubernetes resources:
- VestaApp → Deployment, Service, Ingress, HPA
- VestaProject → Namespace, ResourceQuota
- VestaEnvironment → Namespace, environment-scoped config
- VestaSecret → Kubernetes Secret with bindings
- VestaConfig → Platform-wide configuration
API Server (Go / Gin)
The REST API server handles all user-facing operations:
- Projects, apps, and deployments CRUD
- Secrets management
- Authentication (local accounts, JWT)
- Notifications (Slack, Discord, webhooks, email)
- Audit logging
Web UI (React / TypeScript / Tailwind)
A dashboard for managing the platform through a browser. Provides visual management of projects, apps, secrets, and deployments.
CLI (Go / Cobra)
A command-line tool for all operations:
vesta deploy my-app --tag v1.2.3 --env production
vesta apps list
vesta secrets create my-secret --type opaque
Request Flow
- User issues a deploy command (CLI, API, or git push)
- API server validates the request and creates/updates a VestaApp CRD
- Operator detects the CRD change and reconciles Kubernetes resources
- Deployment rolls out, Service exposes the app, Ingress routes traffic
- Notifications fire on success/failure
Directory Structure
vesta-kubernetes/
├── operator/ # Kubernetes operator (Go/Kubebuilder)
├── api/ # REST API server (Go/Gin)
├── ui/ # Web dashboard (React/TypeScript/Tailwind)
├── cli/ # CLI tool (Go/Cobra)
└── deploy/helm/vesta/ # Helm chart