Wife approved HomeOps driven by Kubernetes and GitOps using ArgoCD
... managed with ArgoCD, Renovate and GitHub Actions 🤖
This is a mono repository for my home infrastructure and Kubernetes cluster. I try to adhere to Infrastructure as Code (IaC) and GitOps practices using tools like Ansible, Terraform, Kubernetes, ArgoCD, Renovate and GitHub Actions.
My Kubernetes cluster is deployed with Talos and Metal LB. This is a high availability cluster, running inside Proxmox.
Role | Memory | Cores | System Disk | Storage Disk |
---|---|---|---|---|
Control Plane | 4 GiB | 4 | 10 GiB | 90 Gib |
Node | 2 Gib | 2 | 10 GiB | 90 Gib |
ArgoCD watches the clusters in my kubernetes folder (see Directories below) and makes the changes to my clusters based on the state of my Git repository. The way ArgoCD works for me here is it will search through kubernetes/registry...
. Then deploy apps using the apps of apps pattern.
This Git repository contains the following directories under kubernetes. I have the apps
directory that stores all the Application
manifests for deployed apps. The registry directory is where I store all my Application
type manifests for deployed apps.
📁 kubernetes
├── 📁 apps # application directory
│ └── 📁 application # example application deployment
│ ├── configmap.yml
│ ├── service.yml
│ └── deployment.yaml
├── argo-root.yml
├── 📁 networking # default networking manifests
│ └── default-ingressclass.yml
└── 📁 registry # application registry
├── 📁 helm # helm deployments via argocd
└── kubevip.yml
My argo-root.yml
argocd application checks for changes in kubernetes/registry
for new Application
manifests. That application then checks in the apps
directory, and then deploys the app like the below:
source:
repoURL: 'https://github.com/mrpbennett/home-ops.git'
path: kubernetes/apps/nginx
Logo | Name | Description |
---|---|---|
Ansible | Automate provisioning and configuration | |
ArgoCD | GitOps tool built to deploy applications to Kubernetes | |
cert-manager | Cloud native certificate management - TBA | |
Cloudflare | Domain and network tunnel | |
Docker | Docker host managed by Portainer | |
Docker Registry | Private container registry | |
Grafana | Observability platform | |
Helm | The package manager for Kubernetes | |
Kubernetes | Container-orchestration system, the backbone of this project | |
Kubescape | Kubernetes security platform | |
Loki | Log aggregation system | |
MetalLB | A network load-balancer | |
NGINX | Kubernetes Ingress Controller | |
Postgres | Database of choice | |
Prometheus | Systems monitoring and alerting toolkit | |
Proxmox | Bare Metal hypervisor OS | |
Terraform | Infrastructure as code | |
Ubuntu Server | Base OS minimized for all VMs | |
Uptime Kuma | Open Source system monitoring |
Below are a list of future plans for my cluster:
- [ ]: deploy Cert-Manager
- [ ]: deploy Rook Ceph across cluster
- [ ✅ ]: migrate from k3s to Talos OS
Device | Count | OS Disk Size | Data Disk Size | Ram | Operating System | Purpose |
---|---|---|---|---|---|---|
UniFi Dream Machine Pro (want!) | 1 | - | - | 8TB | - | Gateway |
UniFi Standard 16 port PoE (want!) | 1 | - | - | - | - | PoE switch |
Lenovo ThinkCentre M720q tiny | 1 | 120GB SSD | 1TB NVMe | 32GB | Proxmox VE | Hypervisor |
Thanks to all the people who donate their time to the Home Operations Discord community. Be sure to check out kubesearch.dev for ideas on how to deploy applications or get ideas on what you may deploy.