Files
homelab/docs/infrastructure/kubernetes.md
2026-01-07 23:43:46 +00:00

3.2 KiB

Kubernetes

"Kubernetes, also known as K8s, is an open source system for automating deployment, scaling, and management of containerized applications." - kubernetes.io

Basic Info

  • Version: K3s v1.34.3
  • Deployment date: 7th January 2026

Architecture

High Availability Setup:

  • 3 control plane nodes with embedded etcd
  • Shared VIP (10.20.40.10) via keepalived for automatic failover
  • 3 worker nodes for workload distribution

Network:

  • Cluster VLAN: 40 (10.20.40.0/24)
  • Control plane VIP: 10.20.40.10
  • Control planes: .11, .12, .13
  • Workers: .21, .22, .23

Nodes

Control Planes

Name IP CPU RAM (GB)
k3s-cp-01 10.20.40.11 ARM Cortex-A76 8
k3s-cp-02 10.20.40.12 ARM Cortex-A76 8
k3s-cp-03 10.20.40.13 ARM Cortex-A76 8

Workers

Name IP CPU RAM (GB)
k3s-worker-01 10.20.40.21 AMD Ryzen 5 PRO 2400GE 48
k3s-worker-02 10.20.40.22 Intel i5 8600 16
k3s-worker-03 10.20.40.23 Intel i5 8600 16

Deployment guide

Shared VIP for the 3 control planes

1. Install keepalived

sudo apt install keepalived -y

2. Create config file

sudo nano /etc/keepalived/keepalived.conf

For the first node, you want the state to be "MASTER", for every other node, you want the state to be "BACKUP", which decreasing priority for each node.

k3s-cp-01
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass REPLACE_THIS_WITH_A_PASSWORD
    }
    virtual_ipaddress {
        10.20.40.10/24
    }
}
k3s-cp-02
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass REPLACE_THIS_WITH_A_PASSWORD
    }
    virtual_ipaddress {
        10.20.40.10/24
    }
}
k3s-cp-03
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass REPLACE_THIS_WITH_A_PASSWORD
    }
    virtual_ipaddress {
        10.20.40.10/24
    }
}

3. Start & enable the service

sudo systemctl enable --now keepalived

Initialise the first control plane

curl -sfL https://get.k3s.io | K3S_TOKEN=REPLACE sh -s - server --cluster-init --tls-san=10.20.40.10 --disable=traefik --disable=servicelb

Add the other two control planes

curl -sfL https://get.k3s.io | K3S_TOKEN=REPLACE sh -s - server --server https://10.20.40.10:6443 --tls-san=10.20.40.10 --disable=traefik --disable=servicelb

Adding worker nodes

1. grab K3S_TOKEN from master

sudo cat /var/lib/rancher/k3s/server/node-token

2. Add each worker node

curl -sfL https://get.k3s.io | K3S_URL=https://10.20.40.10:6443 K3S_TOKEN=REPLACE sh -