Fundament is een cloudplatform voor de overheid, gebouwd uit open source. Het richt fysieke servers automatisch in en maakt er Kubernetes-clusters van, die je zelf aanmaakt en uitbreidt. Extra diensten, zoals opslag en databases, voeg je per cluster toe als plugin. Voor code, container-images en CI/CD stellen we Forgejo ter beschikking.
Een paar begrippen die je op deze pagina tegenkomt:
Meer achtergrond staat in Organisaties en projecten in de Fundament-documentatie.
Doe dit vóór het fieldlab. Je werkt drie dagen op je eigen laptop, en veel organisaties beperken wat je daarop mag installeren en welke websites je kunt bereiken. Lukt een van deze stappen niet, regel het dan met je IT-afdeling of neem een andere laptop mee.
Open deze websites in je browser:
Met kubectl werk je in je cluster. functl is de command-line tool
van Fundament: je kubeconfig roept hem bij elk verzoek aan om je aan te melden. Daarom moet functl op je PATH staan, ook als je zelf alleen kubectl gebruikt.
Voer dit uit in Terminal. Heb je een Mac met een Intel-processor, vervang
dan arm64 twee keer door amd64.
Controleer de installatie:
Je cluster draait Kubernetes 1.36, en kubectl mag daar hooguit één versie van
afwijken. Had je kubectl al, controleer dan of hij 1.35, 1.36 of 1.37 is; een oudere
vervang je met de commando's hierboven.
Installeer op de eerste dag van het fieldlab opnieuw, met dezelfde
commando's. Fundament verandert nog snel, en zo werk je met de nieuwste versie van functl.
functl version en kubectl version --client allebei een versie tonen.
Ook dit doe je vóór het fieldlab. Na je eerste login bestaat je account, en kan een teamgenoot je uitnodigen in jullie organisatie.
Zit je nog niet in een organisatie, dan zie je You are not in an organization yet. Dat klopt: in een organisatie kom je later.
In je organisatie kom je op de pagina Clusters. De console is in het Engels; deze pagina noemt de knoppen zoals ze daar heten.
Je teamgenoot moet al een keer zijn ingelogd, anders werkt de uitnodiging niet.
je bent ingelogd op de console.
Hier zie je de kern van Fundament. Als je een cluster aanmaakt, zoekt Fundament vrije servers, installeert ze en bouwt er een Kubernetes-cluster van. Je kiest welk type server je wilt en tussen hoeveel servers het cluster mag schalen; de autoscaler voegt servers toe als je workloads meer ruimte nodig hebben.
Je cluster staat eerst op Provisioning. Na ongeveer tien minuten is het Running. Tussendoor kan de status een paar minuten Unhealthy zijn terwijl de laatste onderdelen opstarten.
Welke machinetypen je kunt kiezen en hoeveel servers je mag gebruiken, hangt af van de quota van je organisatie (Quotas in het menu) en van wat er vrij is. Een node pool telt mee met zijn maximum, ook als dat nooit bereikt wordt. Of er genoeg vrije servers zijn, zie je pas na Create cluster, aan de status van je node pool.
Beheer je je omgeving liever als code? Clusters, projecten en namespaces kun je ook met
OpenTofu of Terraform aanmaken, met de Fundament Terraform-provider. Zet in het provider-blok naast endpoint ook authn_endpoint = "https://authn.fundament-poc.nl",
anders kan de provider niet inloggen.
je cluster in de console op Running staat.
Je meldt functl aan met een API-key. Daarna haal je de kubeconfig op waarmee kubectl je cluster bereikt.
<org-id> door het ID van je organisatie: <cluster-id> door het ID van je cluster: In de console kan het ook: Download kubeconfig op de pagina van je cluster. KUBECONFIG geldt alleen voor dit terminalvenster. Heb je nog geen ~/.kube/config, dan kun je de kubeconfig ook onder die naam opslaan.
Werk je liever met een tool als k9s? Die gebruikt dezelfde
kubeconfig, zolang functl op je PATH staat.
kubectl get ns de namespaces van je cluster toont.
Een nieuw cluster kan nog weinig: geen opslag die blijft bestaan, geen adres op internet, geen databases. Die voeg je toe met plugins. Elke plugin installeer je op dezelfde manier:
Na een paar minuten draait de plugin en verschijnen zijn schermen in de console onder je project. Installeer voor het voorbeeld in stap 6 deze drie: Ceph, Envoy Gateway en CloudNativePG.
Ceph maakt van de lege schijven in je servers opslag voor je workloads. Op een cluster met één server vul je bij het installeren in:
Met drie of meer servers laat je de standaardwaarden staan. Na het installeren staat Ceph de eerste minuten op Degraded; dat hoort zo.
Maak daarna onder je project, bij Ceph Storage (Rook), de opslag aan. Deze schermen worden nog vernieuwd, dus de knoppen kunnen anders heten.
storageClassName komt hierop terecht.Is het formulier leeg, zonder velden of knop? Dat is een bekende fout. Maak
de opslag dan met kubectl:
ceph.yaml. Vervang <disk-name> door de naam
uit de eerste kolom van een schijf waarbij AVAILABLE op true staat. Heb je er meer, zet ze dan allemaal onder disks: Ceph kan nog twee soorten opslag maken, als je die nodig hebt:
cephfs-<naam>; vraag een volume aan met accessModes: [ReadWriteMany].envFrom. Het adres werkt alleen binnen je cluster.Gebruik de StorageClass csi-lvm niet: daarmee blijven volumes
hangen op Pending.
Met deze plugin krijgt je cluster een Gateway: één publiek adres waarachter je al je webapplicaties zet. Hij vraagt geen instellingen. Hoe je hem gebruikt, staat in het voorbeeld van stap 6.
CloudNativePG maakt PostgreSQL-databases voor je, met één exemplaar en zonder back-ups. Een database hoort bij een namespace; maak die eerst, zoals in stap 6 bij punt 1 en 2.
Is het formulier leeg, zonder velden of knop? Maak de database dan zo:
db.yaml: <namespace> door de namespace van je app, bijvoorbeeld tnt-demo--app: Het wachtwoord en een complete verbindings-URL (uri) staan in de Secret <naam>-app.
Ceph, Envoy Gateway en CloudNativePG onder Plugins staan, en je block storage op Ready staat.
Dit voorbeeld brengt alles samen: een webserver met een eigen volume, bereikbaar vanaf internet. Bij elke start schrijft hij de tijd in zijn pagina. Omdat het volume blijft bestaan, groeit die lijst.
hello.yaml: <namespace> door de volledige naam van je namespace, bijvoorbeeld tnt-demo--app voor namespace app in project demo: http://<ADDRESS> in je browser.Maak namespaces in de console, niet met kubectl create namespace. Fundament neemt een namespace die het niet zelf heeft gemaakt nooit over: hij verschijnt niet in
de console en je projectleden krijgen er geen rechten op. Heb je er al een, maak dan in de console
een nieuwe en zet je app daar opnieuw neer.
Wil je een eigen domeinnaam, zet dan het adres van je Gateway als A-record in je DNS. Het adres blijft van jou zolang de Gateway bestaat. Verwijder je de Gateway of je cluster, dan krijg je misschien een ander adres en pas je je DNS aan. Meer hierover staat in Service IP addresses in de Fundament-documentatie.
Wat elk onderdeel doet:
strategy: Recreate stopt de oude pod voordat de nieuwe start, want een volume hangt
aan één pod tegelijk.Heb je cert-manager geïnstalleerd (stap 5) en wijst een domeinnaam naar
het adres van je Gateway, dan haalt cert-manager zelf een certificaat op. Sla dit op als tls.yaml:
Vervang <hostname> door je domeinnaam. Om het zonder eigen domein te
proberen, kun je <adres-met-streepjes>.sslip.io gebruiken, bijvoorbeeld 194-135-48-131.sslip.io; Let's Encrypt geeft daarvoor maar een beperkt aantal
certificaten per week uit, voor alle gebruikers samen. Zet het daarna neer en wacht tot het
certificaat verschijnt en READY op True staat; stop dan met Ctrl+C:
Je app is dan bereikbaar op https://<hostname>. De Gateway in tls.yaml vervangt die uit hello.yaml; hij houdt hetzelfde adres. Zet
je hello.yaml daarna opnieuw neer, dan verdwijnt HTTPS weer; haal de Gateway dan
eerst uit hello.yaml.
http://<ADDRESS> na een herstart twee tijden toont.
Je kunt Fundament uitbreiden met een eigen plugin. Hiervoor heb je naast functl ook git, mise en Docker nodig. mise installeert de
Go-versie en de andere tools die je plugin vastlegt. De commando's hieronder werken in elke terminal,
ook in PowerShell.
functl plugin create vraagt om een paar keuzes, zoals het sjabloon en of je
plugin een eigen scherm in de console krijgt. De uitleg per keuze staat in Een plugin schrijven.
Bouw en test je plugin:
De servers van je cluster zijn x86-machines, dus bouw je image voor linux/amd64. De Dockerfile compileert daarvoor, ook op een Mac met Apple
Silicon:
docker image inspect my-plugin:dev als architectuur amd64 toont.
Voor het fieldlab stellen we Forgejo ter beschikking: Git-repositories voor je code, een registry voor je container-images en runners voor CI/CD. Je organisatie wordt daar ingericht, zodat jullie bij alle drie kunnen.
Loopt er iets vast en wil je met een schoon cluster verder, verwijder dan alles in deze volgorde. Een cluster met projecten erop kun je niet verwijderen.
<organisatie>/<cluster>/<project>.<organisatie>/<cluster>.Het cluster staat dan een paar minuten op Deleting. Tot het helemaal weg is, telt het nog mee in je quota. Wacht daarop voordat je een nieuw cluster aanmaakt.
Een foutmelding kan meerdere oorzaken hebben. Hieronder de meldingen die je het meest zult zien, met wat je als eerste kunt controleren.
Controleer met functl version of functl op je PATH staat, en open een nieuw terminalvenster na het installeren. Grafische tools
zoals Freelens of Headlamp krijgen niet altijd het PATH van je terminal; start ze dan
vanuit de terminal.
Maak een nieuwe API-key (stap 4) en log opnieuw in met functl auth login.
Controleer in de console of je cluster op Running staat. Zolang het wordt aangemaakt, is dit de verwachte melding.
Vlak na het aanmaken kan dat een paar minuten zo zijn. Blijft het zo, kijk dan op de pagina van je cluster bij de status en de gebeurtenissen wat er niet goed gaat.
Controleer of je de volledige naam gebruikt: tnt-<project>--<namespace>. Met de korte naam geeft kubectl get ook No resources found, terwijl je workload wel draait.
Bekijk met kubectl -n <namespace> describe pvc <naam> wat Kubernetes
erover meldt. Veelvoorkomende oorzaken: er is geen standaard StorageClass (stap 5), de claim gebruikt csi-lvm, of je Ceph-opslag staat nog niet op Ready.
Vragen over Fundament stel je in het Mattermost-kanaal ~users-poc.
De Fundament-documentatie gaat dieper in op elke stap. Meer bronnen staan op Resources.
Werk je liever met OpenTofu of Terraform? De Fundament Terraform-provider en zijn documentatie staan op GitHub.