A lightweight Kubernetes cluster based on k3s, managed with ArgoCD using a GitOps approach.
This setup is mainly for personal projects, experimentation, and learning.
This repository holds the configuration for my homelab cluster. It uses ArgoCD with the App of Apps pattern to manage deployments.
The goal is to keep the cluster simple, automated, and easy to maintain.
- k3s β Lightweight Kubernetes distribution
- ArgoCD β GitOps continuous deployment
- Ingress-NGINX β Ingress controller for traffic management
- Cloudflared β Secure tunnel for external access
- Uptime Kuma β Monitoring and uptime tracking
- Linkding β Bookmark manager
- Whoami β Simple test application
.
βββ apps/
β βββ applications/ # ArgoCD Application definitions
β βββ manifests/ # Kubernetes/Helm manifests
β βββ root-application.yaml # ArgoCD app of apps
βββ bootstrap/
βββ 00-argocd-install.yaml # ArgoCD Installation
βββ 01-argocd-bootstrap-app.yaml # ArgoCD bootstrap app of apps
- k3s installed and running
- kubectl configured
- ArgoCD CLI (optional)
Install k3s:
curl -sfL https://get.k3s.io | sh -Deploy ArgoCD:
kubectl apply -f bootstrap/00-argocd-install.yaml
kubectl apply -f bootstrap/01-argocd-bootstrap-app.yaml
kubectl apply -f apps/root-application.yamlAccess ArgoCD:
kubectl port-forward svc/argocd-server -n argocd 8080:443Visit https://localhost:8080.
Get the initial admin password:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -dApplications are defined using the App of Apps pattern:
apps/root-application.yamlpoints toapps/applications/- Each app has its own folder under
apps/manifests/
To add a new app:
- Create a manifest under
apps/manifests/ - Add an Application resource under
apps/applications/ - Commit and push changes
- ArgoCD will pick them up automatically