Skip to content

GitOps configuration repository for my Kubernetes cluster.

Notifications You must be signed in to change notification settings

noahburrell0/k8s

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 

Repository files navigation

Self-Managing Kubernetes Homelab w/ ArgoCD

This repository serves as the immutable source of configurations for my personal homelab and is deployed using ArgoCD. The configurations contained in the repository self-manage ArgoCD as well as the applications. With various operators like external-dns, cert-manager, and metallb, this homelab pretty much manages itself. Once set up, there is zero intervention required to keep things running.

Applications are divided into ArgoCD projects by their respective types.

  • setup - Required base components used to operate the cluster and deployments.
    • ArgoCD Application Definitions: argocd/applications/setup
    • Configurations: configs/setup/
  • external - Externally facing applications.
    • ArgoCD Application Definitions: argocd/applications/external
    • Configurations: configs/external/
  • internal - Internal-only applications.
    • ArgoCD Application Definitions: argocd/applications/internal
    • Configurations: configs/internal/

Applications

App Status app-of-apps

Setup

  • App Status argocd - The GitOps operator responsible for managing the cluster
  • App Status cert-manager - Automatic SSL certificate generation, configured for Cloudflare
  • App Status external-dns - Automatically create DNS entries, configured for Lets Encrypt
  • App Status k8s-gateway - CoreDNS controller plugin
  • App Status metacontroller - For rapid prototyping an deployment of custom controllers
  • App Status metallb - A loadbalancer for non-cloud deployments
  • App Status metrics-server - Reports resource usage when running kubectl top
  • App Status nfs-subdir-provisioner - Automatically provisions subdirectories against an NFS share
  • App Status nginx-ingress - The ingress controller for the cluster (Offical Kubernetes Ingress)
  • App Status sealed-secrets - A controller for encrypting and decrypting secrets
  • App Status tnsr-controller- A homebrew controller that automatically adds firewall and NAT rules

External

  • App Status chia-node - A Chia node for the Chia cryptocurrency
  • App Status contact-api - A small API to submit form data from my website to an SMTP relay
  • App Status ghost - Blogging software
  • App Status main-site - Combines the Bitnami Nginx and Error Pages charts to deploy my website
  • App Status minio - An S3 compliant object storage system
  • App Status ombi - A multimedia request platform for Plex
  • App Status paperless - A document management system
  • App Status plex - A multimedia server
  • App Status seafile - Self-hosted cloud storage system

Internal

  • App Status nzbget - A Usenet download platform
  • App Status radarr - Automatically search, download, and manage movies
  • App Status sonarr - Automatically search, download, and manage television series
  • App Status smtp - A local SMTP relay to centralize a point in the cluster from which to send emails
  • App Status tdarr - An automatic multimedia transcoder
  • App Status unifi - The Uniquiti Unifi controller for managing Ubiquiti network devices

Bootstrapping

ArgoCD needs to be manually bootstrapped before it can self-manage. The only pre-requisite is a Kubernetes cluster with a CNI installed. All other required components will be install after bootstrapping.

kubectl apply -k configs/setup/argocd/
kubectl apply -f argocd/app-of-apps.yaml -n argocd

The above commands will deploy ArgoCD and the app-of-apps application which will be used to discover and deploy all other applications out of this repository. From this point forward, ArgoCD will also self-manage. Any updates to configs/setup/argocd/ will be automatically discovered and applied.

Secrets

All secrets are encrypted and stored in this repository using sealed-secrets by Bitnami. Only I hold the decryption keys for the secrets in this repository. If you are using this repository as the basis for you own homelab or Kubernetes cluster, be aware that none of the sealed secrets here will unseal for you. You will need seal your own secrets and replace mine. As a result, if you try to deploy the applications contained in this repository using my configurations, the application will most likely be broken.

About

GitOps configuration repository for my Kubernetes cluster.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published