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
- návod viz miniPC
- PiKube node setup - odroid
nový master - single
Warning
nezapomenout rebootovat nody po čerstvém ansible setupu
- inicializovat nového mastera
time curl -sfL https://get.k3s.io | sh - - taint master nodu pro zabránění deploymentu podů
kubectl taint --overwrite node pikm01 node-role.kubernetes.io/master=true:NoSchedule - upravit práva na kube configu
sudo chmod a+r /etc/rancher/k3s/k3s.yaml - přenést login info do všech kube configů, kde je potřeba
- zjistit token pro připojení workerů
sudo cat /var/lib/rancher/k3s/server/node-token K10e8f7a96d2ba31e0d36f0a7f37a59733a48803907907d812bb672ee9d0fa2bb46::server:43e70397f46af77e338eb09bd1aa183f - 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
- inicializovat nového mastera
time curl -sfL https://get.k3s.io | sh -s - server --cluster-init - taint master nodu pro zabránění deploymentu podů
kubectl taint --overwrite node pikm01 node-role.kubernetes.io/master=true:NoSchedule - zjistit token pro připojení dalších nodů
sudo cat /var/lib/rancher/k3s/server/node-token K10e8f7a96d2ba31e0d36f0a7f37a59733a48803907907d812bb672ee9d0fa2bb46::server:43e70397f46af77e338eb09bd1aa183f - 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 - ověřit že jsou všechny server nody připojené a mají správné role
control-plane,etcd,masterkubectl get nodes - upravit práva na kube configu
sudo chmod a+r /etc/rancher/k3s/k3s.yaml - přenést login info do všech kube configů, kde je potřeba
- 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
- 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 - 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 periferiebigclown-dongletv-tunerzigbee- HomeAssistant Zigbee coordinator USB stick
net_speed=-- rychlost sítě v Mb (100, 300, 1000)workload_*-- určení pro specifický typ zátěžeworkload_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
- zmigrovat pody na ostatní workery
kubectl drain pikw03 --delete-emptydir-data --ignore-daemonsets - smazat worker
kubectl delete node pikw03 - smazat k3s node password z
/var/lib/rancher/k3s/server/cred/node-passwd - 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
upgrade k3s
- look-up latest version at github.com/k3s-io/k3s/releases.
- 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