Skip to content

qjoly/GitOps

Repository files navigation

Helm LOGO
Typing SVG

Blog Kubernetes Linux

HomeLab

Homelab setup based on Omni and Talos.

Overview

This repository contains the configuration files for my homelab. The homelab is a collection of servers and services that I run at home or in the cloud. The homelab is used for learning, testing, and hosting projects.

Stack

To avoid headaches and to keep things simple, I use Talos to manage the Kubernetes cluster (don't hesitate to check a little article I wrote about it). To be more specific, I have a self-hosted Omni instance to manage all clusters with a single endpoint and secure them with SSO.

Core Components

  • Omni (Self-hosted) : Manage all nodes between clusters and regions.
  • Cilium as CNI and LB (ARP mode)
  • ArgoCD to manage the GitOps workflow
  • Nginx Ingress Controller for Ingress management (and Istio deployed on some clusters)
  • Cert Manager for TLS certificates.
  • Longhorn for storage based on nodes disks.
  • Reflector to sync secrets across namespaces (requirement for External Secrets + Vault). (Removed 16/12/2024)
  • External Secrets to fetch secrets from a remote store.
  • Vault as a secret store to store secrets.
  • Cloudflare Tunnels to expose services to the internet (Only on the home cluster).
  • ZFS + Local-Path-Provisioner to create persistent volumes on the mounted ZFS filesystem (Only on CloudLab cluster).
  • Volsync to create backup and send backup (using restic) to a minio server (Only on CloudLab cluster).

Cluster

Talos Kubernetes   Age Uptime-Days Node-Count Pod-Count CPU-Usage Memory-Usage

Talos Kubernetes   Age Uptime-Days Node-Count Pod-Count CPU-Usage Memory-Usage

  • Lungo ( ⚠️ WIP ): Yet another cluster based on virtual machines on a Proxmox server hosted by OVH.
  • Home (Quite original, right? Also WIP ⚠️ ) : A cluster based on small devices (ARM and x86) at home.

Usage

To use this repository, you need to have the Omni CLI installed. You can find the installation instructions here.

Download the omniconfig file from the Omni instance and merge it with the one in your home directory.

omnictl config merge ./omniconfig.yaml

Then, you can deploy the cluster based on the MachineClass you have configured.

cd lungo
omnictl cluster template sync -f template.yaml

This will create a new cluster based on the configuration you have set in the template.yaml file. You can download the kubeconfig file using the following command:

omnictl kubeconfig --cluster lungo
Example of kubeconfig file
apiVersion: v1
kind: Config
clusters:
  - cluster:
      server: https://omni.home.une-tasse-de.cafe:8100/
    name: omni-lungo
contexts:
  - context:
      cluster: omni-lungo
      namespace: default
      user: [email protected]
    name: omni-lungo
current-context: omni-lungo
users:
- name: [email protected]
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1beta1
      args:
        - oidc-login
        - get-token
        - --oidc-issuer-url=https://omni.home.une-tasse-de.cafe/oidc
        - --oidc-client-id=native
        - --oidc-extra-scope=cluster:lungo
      command: kubectl
      env: null
      provideClusterInfo: false