k3s op Proxmox

Om gemakkeijk Postgres scenario’s door te nemen, gebruiken we bij de “Blue Elephant Pack” containers op Kubernetes.

Een eenvoudige manier om Kubernetes te gebruiken, is via k3s. Kubernetes vereist aanpassingen aan de LXC containers die Proxmox beschikbaar stelt. Het makkelijkste is om /etc/pve/lxc/100.conf (althans, het nummer van de betreffende container) aan te passen:

  • De container moet priveleged zijn
    • unprivileged: 0
  • Nesting moet toegestaan zijn voor de container
    • features: nesting=1
  • Een aantal modules moet beschikbaar gemaakt worden aan de container
    • op de host: /etc/modules-load.d/modules.conf
      • overlay
      • nf_nat
      • br_netfilter
      • xt_conntrack
      • aufs
      • vhci-hcd
      • eventueel toevoegen in de container aan /etc/modules
  • Enkele losse aanpassingen aan de containerconfiguratie zijn nodig
    • lxc.apparmor.profile: unconfined
    • lxc.cgroup.devices.allow: a
    • lxc.cap.drop:
    • lxc.mount.auto: proc:rw sys:rw

Zolang de configuratie niet in orde is, faalt de configuratiecheck: k3s check-config roept aan het einde modprobe: FATAL: Module configs not found in directory /lib/modules/kernelversie

Laatste status:

  • k3sup install van de triangletodd-link hieronder geprobeerd;
    • warning: er ontbreken nog modules
    • error: geen toegang tot /proc/sys/net/netfilter/nf_conntrack_max

Hints:

  • SSH opeens ‘stuk’ in de container? Controleer of .ssh/authorized_keys eigendom is van root of van 100000 ; met dat laatste doet hij het (terecht?) niet.
    • Een betere optie zou misschien zijn een nieuwe gebruiker aan te maken, die echt geen root is (noch op de host, noch in de container).
    • Het zou veroorzaakt kunnen zijn door het switchen van unprivileged container naar privileged container: in een privileged container zal root echt root zijn.

Bronnen:

Retry, nu met een VM ipv LXC

Met de quickstart van k3s.io: curl -sfL https://get.k3s.io | sh -

Ongeveer 10 seconden later: klaar

Het is nu een single-node cluster; later meer nodes toevoegen, maar eerst zorgen dat Postgres ‘t doet

Cloudnative PG

De quickstart op cloudnative-pg.io geeft:

  • Operator installeren: kubectl apply --server-side -f \ https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-1.25/releases/cnpg-1.25.1.yaml
  • Verifieren dat ‘ie ‘t doet / er is: kubectl get deployment -n cnpg-system cnpg-controller-manager
  • Creeer een yaml-bestand met de configuratie voor ‘t Postgres-cluster, bijvoorbeeld het cluster-example.yaml van de site
  • Start de configuratie met kubectl apply -f cluster-example.yaml
  • Check het resultaat met kubectl get pods
kubectl get pods
NAME                             READY   STATUS      RESTARTS   AGE
cluster-example-1                1/1     Running     0          21s
cluster-example-1-initdb-vmmb5   0/1     Completed   0          59s
cluster-example-2-join-vtb4d     0/1     Completed   0          10s

Toegang tot de database was een beetje puzzelen. CloudnativePG werkt met kubectl cnpg .., maar dat herkent mijn installatie niet. Mogelijk te wijten aan K3S, maar misschien ook een gebrek aan kennis.

Wat wel werkt, met dank aan ‘arsblogger.com

kubectl exec -it cluster-example-1  -- psql -U postgres -c "SELECT pg_is_in_recovery();"

Hij heeft op diezelfde pagina hints hoe hij het cluster via een node port extern beschikbaar maakt

Print this entry

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *