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 K3s and KubeVIP. This is a high availability cluster, running inside Proxmox.
Role | Memory | Cores | System Disk | Storage Disk |
---|---|---|---|---|
Control Plane | 6 GiB | 4 | 50 GiB | 100 Gib |
Node | 4 Gib | 2 | 50 GiB | 100 Gib |
ArgoCD watches the cluster in my kubernetes directory (see structure below) and makes the changes to my cluster 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. I also have a cluster
directory for all cluster wide manifests as well as a jobs
directory for all CronJobs.
📁 kubernetes # root folder for all kubernetes manifests
├── 📁 apps # application directory deployed by ArgoCD
│ ├── 📁 postgres-db
│ │ ├── deployment.yaml
│ │ └── service.yaml
├── argo-root.yaml
├── 📁 cluster # directory for cluster wide manifests
│ └── cluster-role-binding.yaml
├── 📁 jobs # directory for all cron-jobs
│ └── test-cjob.yaml
└── 📁 registry # ArgoCD registry for all argocd apps
├── 📁 helm # directory for all Helm applications
│ └── 📁 application
│ ├── application-helm.yaml
│ └── values.yaml
└── postgres-db.yaml
My argo-root.yaml
argocd application checks for changes in ./kubernetes/registry
for new Application
manifests. That manifest then checks in the apps
directory, 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 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 | |
Kube VIP | Kubernetes virtual IP for clusters and load balancer | |
Loki | Log aggregation system | |
Longhorn | Distributed block storage for Kubernetes | |
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 |
Device | Count | OS Disk Size | Data Disk Size | Ram | Operating System | Purpose |
---|---|---|---|---|---|---|
UniFi Express | 1 | - | - | - | - | Gateway / AP |
UniFi CloudKey+ | 1 | - | - | - | - | NVR |
UniFi Pro Max 16 PoE | 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.