Skip to content

Wife approved HomeOps driven by Kubernetes and GitOps using ArgoCD

Notifications You must be signed in to change notification settings

mrpbennett/home-ops

Repository files navigation

Wife approved HomeOps driven by Kubernetes and GitOps using ArgoCD

Image used with permission from k8s-at-home

talos-os GitHub Last Commit Home Operations Discord

My Home Operations Repository :octocat:

... managed with ArgoCD, Renovate and GitHub Actions 🤖


📖 Overview

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.

The purpose here is to learn Kubernetes, while practising GitOps

⛵ Kubernetes

Installation

My Kubernetes cluster is deployed with Talos and Metal LB. This is a high availability cluster, running inside Proxmox.

System Requirements

Role Memory Cores System Disk Storage Disk
Control Plane 4 GiB 4 10 GiB 90 Gib
Node 2 Gib 2 10 GiB 90 Gib

GitOps

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.

Directories

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

Tech stack

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

Future plans

Below are a list of future plans for my cluster:


🔧 Hardware

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

🤝 Gratitude and Thanks

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.