Skip to content

PiKube - kubernetes cluster on arm SBCs

Viz také k3s

HW požadavky

Minimální požadavky (z praxe):

role RAM storage OS storage longhorn
control plane 2 GB 32 GB -
worker 4 GB 32 GB 240 GB
  • storage na OS workeru je primárně kvůli container images pro běžící pody.

Instalace

Použitý K3S na vanilla Debianu nebo armbianu (dokumentace viz https://rancher.com/docs/k3s/latest/en/quick-start/).

Vše potřebné je v GIT repu home.mixi.cz:/srv/git/repos/home/automation.git.

prvotní setup

nový master - single

Warning

nezapomenout rebootovat nody po čerstvém ansible setupu

  1. inicializovat nového mastera
    time curl -sfL https://get.k3s.io | sh -
    
  2. taint master nodu pro zabránění deploymentu podů
    kubectl taint --overwrite node pikm01 node-role.kubernetes.io/master=true:NoSchedule
    
  3. upravit práva na kube configu
    sudo chmod a+r /etc/rancher/k3s/k3s.yaml
    
  4. přenést login info do všech kube configů, kde je potřeba
  5. zjistit token pro připojení workerů
    sudo cat /var/lib/rancher/k3s/server/node-token
    K10e8f7a96d2ba31e0d36f0a7f37a59733a48803907907d812bb672ee9d0fa2bb46::server:43e70397f46af77e338eb09bd1aa183f
    
  6. vytvořit docker hub secret
    kubectl create secret docker-registry dockerhub --docker-server=https://index.docker.io/v1/ --docker-username=mixi --docker-password=<heslo> --docker-email=docker.com@m.mixi.cz
    

nový master - cluster

Viz https://docs.k3s.io/datastore/ha-embedded

Warning

nezapomenout rebootovat nody po čerstvém ansible setupu

  1. inicializovat nového mastera
    time curl -sfL https://get.k3s.io | sh -s - server --cluster-init
    
  2. taint master nodu pro zabránění deploymentu podů
    kubectl taint --overwrite node pikm01 node-role.kubernetes.io/master=true:NoSchedule
    
  3. zjistit token pro připojení dalších nodů
    sudo cat /var/lib/rancher/k3s/server/node-token
    K10e8f7a96d2ba31e0d36f0a7f37a59733a48803907907d812bb672ee9d0fa2bb46::server:43e70397f46af77e338eb09bd1aa183f
    
  4. připojit další nody pomocí
    curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - server --server https://pikm01:6443
    # instalace 2024-05-04
    curl -sfL https://get.k3s.io | K3S_TOKEN=K1046c4e74cb3f2c4dfa438b16c2296f239f3eeae8e17c963636487f00db05fe2c8::server:88d84a0ef57e0f2ef0c44ea7db7930ff sh -s - server --server https://pikm01:6443
    
  5. ověřit že jsou všechny server nody připojené a mají správné role control-plane,etcd,master
    kubectl get nodes
    
  6. upravit práva na kube configu
    sudo chmod a+r /etc/rancher/k3s/k3s.yaml
    
  7. přenést login info do všech kube configů, kde je potřeba
  8. vytvořit docker hub secret
    kubectl create secret docker-registry dockerhub --docker-server=https://index.docker.io/v1/ --docker-username=mixi --docker-password=<heslo> --docker-email=docker.com@m.mixi.cz
    

nový worker

  1. inicializovat worker
    curl -sfL https://get.k3s.io | K3S_URL=https://pikm01:6443 K3S_TOKEN=K10e8f7a96d2ba31e0d36f0a7f37a59733a48803907907d812bb672ee9d0fa2bb46::server:43e70397f46af77e338eb09bd1aa183f sh -
    # instalace 2024-05-04
    curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.29.4+k3s1 K3S_TOKEN=K1046c4e74cb3f2c4dfa438b16c2296f239f3eeae8e17c963636487f00db05fe2c8::server:88d84a0ef57e0f2ef0c44ea7db7930ff sh -s - agent --server https://pikm01:6443
    
  2. nastavit node labels
    kubectl label node piks01 usb=zigbee workload_generic=1 workload_npu=odroid-m1 workload_storage=nvme
    kubectl label node piks02 usb=tv-tuner workload_generic=1 workload_npu=odroid-m1 workload_storage=nvme
    kubectl label node piks03 usb=bigclown-dongle workload_generic=1 workload_npu=odroid-m1 workload_storage=nvme
    kubectl label node piks04 workload_generic=1 workload_npu=odroid-m1 workload_storage=nvme
    

worker labels

  • usb= -- specifické USB periferie
    • bigclown-dongle
    • tv-tuner
    • zigbee - HomeAssistant Zigbee coordinator USB stick
  • net_speed= -- rychlost sítě v Mb (100, 300, 1000)
  • workload_* -- určení pro specifický typ zátěže
    • workload_generic=1 -- obecné služby bez specifických požadavků
    • workload_storage=
      • nvme -- NVMe SSD lokální storage
    • workload_npu= -- Neural Processing Unit (akcelerátor pro neuronové sítě)
      • odroid-m1
    • workload_gpu=
      • TBD

odstranění / reinstalace workeru

  1. zmigrovat pody na ostatní workery
    kubectl drain pikw03 --delete-emptydir-data --ignore-daemonsets
    
  2. smazat worker
    kubectl delete node pikw03
    
  3. smazat k3s node password z /var/lib/rancher/k3s/server/cred/node-passwd
  4. po reinstalaci přidat worker výše uvedeným způsobem

Ostatní software

  • Longhorn – persistent storage
  • Traefik – ingress proxy – TLS (integrace na Let's Encrypt) a autentizace
  • Authelia – Identity Provider, OAuth2 / OIDC server

maintenance

reboot workeru

kubectl drain --ignore-daemonsets --delete-emptydir-data pikw01
# ...
kubectl uncordon pikw01
Následně zkontrolovat logy podů závislých na mosquittu a případně otočit!

upgrade k3s

  1. look-up latest version at github.com/k3s-io/k3s/releases.
  2. upgrade each node as root:
    # Control-plane nodes
    curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION="v1.34.1+k3s1" sh -
    # Worker nodes
    curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION="v1.34.1+k3s1" K3S_TOKEN=K1046c4e74cb3f2c4dfa438b16c2296f239f3eeae8e17c963636487f00d  
    b05fe2c8::server:88d84a0ef57e0f2ef0c44ea7db7930ff sh -s - agent --server https://pikm01:6443