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
- op de host:
- 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 vanroot
of van100000
; 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.
- Een betere optie zou misschien zijn een nieuwe gebruiker aan te maken, die echt geen
Bronnen:
- https://github.com/corneliusweig/kubernetes-lxd/blob/master/README-k3s.md : stappen voor LXD en LXC, niet 1:1 compatibel met Proxmox configs
- https://forum.proxmox.com/threads/lxc-add-linux-kernel_modules.74473/
- https://gist.github.com/kvaps/25f730e0ec39dd2e5749fb6b020e71fc
- https://forum.proxmox.com/threads/k3s-on-lxc-modprob-fatal-module-overlay-not-found-in-directory-lib-modules-5-13-19-1-pve.100584/
- https://forum.proxmox.com/threads/k3s-on-lxc-modprob-fatal-module-overlay-not-found-in-directory-lib-modules-5-13-19-1-pve.100584 : commands uit te voeren op de host, inclusief latere toevoeging om apparmor uit te schakelen (PVE6 vs PVE7) (2021)
- https://gist.github.com/triangletodd/02f595cd4c0dc9aac5f7763ca2264185 : stapsgewijze howto uit 2020
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