[ OVERVIEW ]

VPS running a k3s cluster, fully provisioned with Ansible.

From blank VPS to fully functional — two playbook runs.

GitLab runners on the VPS handle all CI/CD deployments.

[ SERVICES RUNNING ]
service namespace
main-website main-website
krali4 instant-sandbox
daily daily-bible
prometheus + grafana monitoring
loki + alloy monitoring
[ ANSIBLE — THREE ROLES ]

› setup_environment

  • Disables swap, configures kernel modules + sysctl
  • Installs Docker, k3s, kubectl

› gitlab_runner

  • Docker runner docker linux — builds images
  • Shell runner shell deploy — deploys to k3s
  • config.toml rendered from Jinja2 template

› monitoring

  • Deploys full observability stack via Helm
  • prometheus • grafana • loki • alloy • cert-manager
[ MONITORING STACK ]
component description
kube-prometheus-stack Prometheus + Alertmanager + Node Exporter
Grafana Dashboards + data visualisation
Loki Log aggregation (single-binary, filesystem)
Alloy DaemonSet — collects pod logs → Loki
cert-manager Optional TLS via Let's Encrypt
[ CI/CD PIPELINE ]
  git push
      |
      v
  [ build ]  (docker runner)
    docker build
    docker push --> gitlab registry
      |
      v
  [ deploy ]  (shell runner on vps)
    kubectl apply manifests
    kubectl rollout status
[ STACK ]

ansible ansible-vault jinja2 helm

k3s kubernetes docker traefik

prometheus grafana loki alloy

gitlab ci/cd letsencrypt cert-manager linux ufw