<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Advanced on Tom Meurs</title>
    <link>https://tommeurs.nl/nl/level/advanced/</link>
    <description>Recent content in Advanced on Tom Meurs</description>
    <generator>Hugo</generator>
    <language>nl</language>
    <copyright>© Tom Meurs</copyright>
    <lastBuildDate>Tue, 29 Sep 2026 09:00:00 +0200</lastBuildDate>
    <atom:link href="https://tommeurs.nl/nl/level/advanced/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Supply chain security in GitLab CI: SBOM, cosign en het beleid dat blokkeert</title>
      <link>https://tommeurs.nl/nl/posts/supply-chain-security-gitlab-ci/</link>
      <pubDate>Tue, 29 Sep 2026 09:00:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/supply-chain-security-gitlab-ci/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Een pipeline die images scant en een SBOM schrijft, zonder dat iets daar bij toelating naar kijkt, stond een jaar op groen en hield niks tegen. Vier stappen hieronder: een SBOM die Trivy kan teruglezen, een cosign-handtekening op de digest met de sleutel in Vault, de SBOM eraan gehangen als attestation, en een Kyverno-policy die de rest weigert. Daarna een tabel van welke SLSA Build L3-eisen een zelfgehoste GitLab-runner haalt, en de twee die hij niet haalt.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NIS2 voor platform teams: welke control voldoet aan welk artikel</title>
      <link>https://tommeurs.nl/nl/posts/nis2-for-platform-teams/</link>
      <pubDate>Sun, 20 Sep 2026 21:00:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/nis2-for-platform-teams/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; De Cyberbeveiligingswet geldt sinds 15 augustus 2026. Hieronder de tien maatregelen van &lt;span class=&#34;def&#34; tabindex=&#34;0&#34; data-def=&#34;Cbw art. 21: de zorgplicht. Passende en evenredige maatregelen, waarvan het derde lid er tien noemt.&#34;&gt;artikel 21&lt;/span&gt;&#xA; gelegd op controls die echt draaien, een Kyverno-policy die er één bewijst, de meldtermijnen als drie Prometheus-alertingrules, en de vier plichten waar geen YAML onder past. De eerste run van die policy vond in m&amp;rsquo;n eigen cluster zeven pods waarvan ik had gezworen dat ze gemirrord waren.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Internal Developer Platform bouwen: waar begin je?</title>
      <link>https://tommeurs.nl/nl/posts/internal-developer-platform/</link>
      <pubDate>Wed, 06 May 2026 19:30:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/internal-developer-platform/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Een Internal Developer Platform is een dunne laag tussen wat een developer wil en wat het cluster eist. Bij mij is dat een Helm base chart, ArgoCD en een handvol Kyverno policies, zo&amp;rsquo;n 500 regels eigen code. Begin met die drie, en voeg observability en een portal pas toe als de tickets erom vragen.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Moet je een Internal Developer Platform bouwen? Meestal wel. Het is de hóe waar teams op stuklopen.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Chaos engineering: je cluster kapot maken om het sterker te maken</title>
      <link>https://tommeurs.nl/nl/posts/chaos-engineering-kubernetes/</link>
      <pubDate>Tue, 28 Apr 2026 19:45:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/chaos-engineering-kubernetes/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Chaos engineering is je eigen cluster expres kapot maken, met de hypothese vooraf op papier en een rollback binnen handbereik. Ik draai het op de homelab met Litmus: een wekelijkse pod-delete, een maandelijkse node drain, elk kwartaal een game day. Tot nu toe heeft het vier dingen gevonden die het dashboard me nooit had laten zien.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;M&amp;rsquo;n dashboard is een muur van groen. Pods draaien, replicas kloppen, CPU rustig, geen alert te bekennen. Ik kijk ernaar en krijg dat kleine shotje &amp;ldquo;alles is in orde.&amp;rdquo; En grotendeels klopt dat ook. Het cluster draait al weken en er is niks omgevallen.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Longhorn vs Rook-Ceph: Kubernetes-storage vergeleken</title>
      <link>https://tommeurs.nl/nl/posts/longhorn-vs-rook-ceph/</link>
      <pubDate>Mon, 20 Apr 2026 19:38:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/longhorn-vs-rook-ceph/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Longhorn en Rook-Ceph geven je allebei gerepliceerde block storage die een dode node overleeft. Longhorn is één Helm-install en een UI waarin je ziet wat een volume doet. Rook-Ceph is Ceph met een Kubernetes-operator eromheen, dus je krijgt block, object én filesystem, en het beheer dat daarbij hoort. Ik draai Longhorn op drie nodes. Hieronder waarom, en wanneer ik zou overstappen.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Draai je eerste stateful workload op een self-hosted cluster en je merkt al snel dat niemand je zomaar een PersistentVolume geeft. Geen storage class van een cloudprovider om op te leunen. Alleen je nodes, hun disks en een Postgres-pod die niet wil schedulen. Een uur lezen verder heb je twee namen over die steeds terugkomen. &lt;span class=&#34;def&#34; tabindex=&#34;0&#34; data-def=&#34;Blokopslag voor Kubernetes die een volume over nodes repliceert. Eenvoudig te draaien en trager dan Ceph, en dat is de afweging die het bewust maakt.&#34;&gt;Longhorn&lt;/span&gt;&#xA; en Rook-&lt;span class=&#34;def&#34; tabindex=&#34;0&#34; data-def=&#34;Een gedistribueerd opslagsysteem dat blok, bestand en object uit één cluster levert. Krachtig, en zwaar genoeg dat het draaien ervan een baan is en geen instelling.&#34;&gt;Ceph&lt;/span&gt;&#xA;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quantum-safe GPG-identiteit met meerdere aliassen</title>
      <link>https://tommeurs.nl/nl/posts/quantum-safe-gpg-identity/</link>
      <pubDate>Sat, 18 Apr 2026 10:47:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/quantum-safe-gpg-identity/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Eén GPG-masterkey die alleen certificeert, offline. Drie aliassen eraan gebonden, zodat iedereen kan nagaan dat het dezelfde persoon is. Ed25519-subkeys voor signing en SSH, een ML-KEM-plus-X448-subkey voor encryptie zodat opgenomen ciphertext dicht blijft als er een quantumcomputer komt, en drie backups die er elk van uitgaan dat de andere twee weg zijn. Vereist GnuPG 2.5.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Een cryptografische signature betekent nog steeds precies wat er staat. Is de key van jou en klopt de signature, dan komt de inhoud van jou. Geen vendor heeft je die identiteit gegeven, geen CA kan hem intrekken, geen platform kan hem schorsen. Hij bestaat omdat jij de key hebt gegenereerd, en hij is van jou zolang jij de private helft in handen hebt. Het meeste wat &amp;ldquo;online identiteit&amp;rdquo; heet is geleend. Een handle die iemand kan bannen, een e-mailadres dat de domeineigenaar terugpakt op de dag dat het hem uitkomt. Een GPG-signature staat daar helemaal buiten.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Alerting dat werkt: van alert fatigue naar actionable notificaties</title>
      <link>https://tommeurs.nl/nl/posts/alerting-that-works/</link>
      <pubDate>Thu, 16 Apr 2026 20:15:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/alerting-that-works/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; De meeste default alertregels pagen op een getal zonder gebruiker erachter, en na een week lees je geen page meer. Ik alert op error rate, P99-latency, een disk die binnen 24 uur vol zit en een certificaat dat binnen zeven dagen verloopt, een stuk of tien regels bij elkaar, elk met een runbook. Alertmanager stuurt critical naar de pager, warning overdag naar Slack en info nergens heen. Alles wat geen mens nodig heeft gaat weg.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cilium: eBPF networking voor Kubernetes</title>
      <link>https://tommeurs.nl/nl/posts/cilium-ebpf-networking/</link>
      <pubDate>Wed, 08 Apr 2026 20:23:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/cilium-ebpf-networking/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Cilium is de CNI die ik in elk cluster draai. Het vervangt kube-proxy en z&amp;rsquo;n iptables-chains door eBPF-programma&amp;rsquo;s in de kernel, dwingt network policies af op identiteit en op HTTP-paden, en Hubble laat me elke flow en elke drop zien. WireGuard tussen de pods, BGP naar de switch, geen sidecars. M&amp;rsquo;n productie-values staan onderaan.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;De eerste keer dat een service niet meer resolvede in een van m&amp;rsquo;n clusters, zat ik een avond iptables-chains te lezen. Honderden regels, gegenereerd door kube-proxy, van boven naar beneden afgelopen. Het probleem heb ik nooit gevonden. Node herstart, weg.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Thanos remote write: push-based metrics voor edge en multi-cluster</title>
      <link>https://tommeurs.nl/nl/posts/thanos-remote-write-push-architecture/</link>
      <pubDate>Fri, 27 Mar 2026 20:38:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/thanos-remote-write-push-architecture/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Thanos Receive draait de metricsstroom om. Elke edge-Prometheus pusht z&amp;rsquo;n samples via &lt;code&gt;remote_write&lt;/code&gt; naar één centraal endpoint, buffert in z&amp;rsquo;n WAL als de link wegvalt, en ziet nooit een object-storage-credential. Hieronder de Receive StatefulSet, de hashring, de edge-config, twee manieren om het endpoint dicht te timmeren, en de hybride die ik draai met sidecars op de core clusters.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In mijn &lt;a href=&#34;https://tommeurs.nl/nl/posts/prometheus-thanos-metrics/&#34;&gt;vorige post over Prometheus en Thanos&lt;/a&gt; zette ik de sidecar-architectuur op. &lt;span class=&#34;def&#34; tabindex=&#34;0&#34; data-def=&#34;Geeft Prometheus langetermijnopslag in objectopslag en één queryblik over meerdere Prometheus-servers, zonder te veranderen hoe Prometheus scrapet.&#34;&gt;Thanos&lt;/span&gt;&#xA; Sidecar draait naast Prometheus, uploadt TSDB-blocks naar object storage en stelt de data via gRPC beschikbaar aan de Querier. Voor clusters in hetzelfde datacenter, met een dikke stabiele link naar de centrale infrastructuur, heb ik daar niks op aan te merken. Alles pullt, en alles kan bij alles.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Declaratieve infrastructuur als compliance documentatie: Talos, NixOS en audit-ready systemen</title>
      <link>https://tommeurs.nl/nl/posts/declarative-infrastructure-compliance-certification/</link>
      <pubDate>Mon, 23 Mar 2026 19:28:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/declarative-infrastructure-compliance-certification/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Talos en NixOS booten van een bestand dat zegt wat de machine is. Dat bestand is precies wat een ISO 27001-, SOC 2- of NIS2-auditor wil zien, dus het verzamelen van bewijs krimpt tot een git log, een diff zonder output en een inventarisdump. Hieronder de mapping van config naar control, de scripts, en het deel dat gewoon werk blijft.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Een ISO 27001-audit begint weken voordat de auditor binnenstapt, met iemand die screenshots verzamelt. Configuratieschermen, firewallregels, een dashboard dat laat zien welke patches erop staan. Dan de Word-documenten die beschrijven wat de systemen geacht worden te doen. Dan de change tickets, opgediept uit het ticketsysteem, elk met een &amp;ldquo;serveronderhoud&amp;rdquo; erin dat een half jaar later niemand meer kan reconstrueren. Iedereen ziet dat als de prijs van zakendoen. Ik ook, jarenlang.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NixOS vs Talos voor Kubernetes nodes: twee smaken immutable infrastructuur</title>
      <link>https://tommeurs.nl/nl/posts/nixos-vs-talos-kubernetes-nodes/</link>
      <pubDate>Sun, 15 Mar 2026 20:37:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/nixos-vs-talos-kubernetes-nodes/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Talos en NixOS zijn allebei declaratief en allebei immutable te maken, en daar houdt de gelijkenis wel zo&amp;rsquo;n beetje op. Talos draait Kubernetes en verder niks, en er is geen shell om in te driften. NixOS is een volledige Linux waarbij de hele machine in één Nix-config staat. Ik draai Talos op m&amp;rsquo;n clusternodes en NixOS op de machines eromheen, en deze post is hoe ik bij die verdeling uitkwam.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Talos Linux: het immutable Kubernetes OS dat mijn kijk op nodes veranderde</title>
      <link>https://tommeurs.nl/nl/posts/talos-linux-immutable-kubernetes/</link>
      <pubDate>Wed, 11 Mar 2026 21:15:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/talos-linux-immutable-kubernetes/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Talos Linux is een Linux die Kubernetes draait en verder niks. Geen SSH, geen shell, geen packagemanager. Elke wijziging gaat via een API en een YAML-bestand in Git. Ik draai m&amp;rsquo;n nodes er nu drie jaar op, en deze post is hoe ik ophield de shell te missen.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;De eerste keer dat ik naar een &lt;span class=&#34;def&#34; tabindex=&#34;0&#34; data-def=&#34;Een Linux-distributie zonder shell, zonder SSH en zonder package manager, volledig beheerd via een API. De node is configuratie in plaats van een machine waarop je inlogt.&#34;&gt;Talos&lt;/span&gt;&#xA;-node probeerde te SSH&amp;rsquo;en, kreeg ik niks. Geen shell, geen verbinding, niet eens een loginprompt. Ik heb er een minuut naar zitten staren en me afgevraagd hoe ik een machine moest debuggen waar ik niet in kon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data-driven Kubernetes migratie: waarom je metrics nodig hebt voordat je beweegt</title>
      <link>https://tommeurs.nl/nl/posts/kubernetes-resource-sizing/</link>
      <pubDate>Sun, 08 Feb 2026 14:00:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/kubernetes-resource-sizing/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Een e-commerceklant verhuisde een PHP-monoliet in oktober naar EKS, twee weken voor Black Friday, met resource-limits die gegokt waren op de oude serverspecs. Halverwege de ochtend liepen de pods tegen hun memory-limit aan, gingen vier uur lang in een loop dood, en de schatting was €240.000 aan gemiste omzet. De tweede helft gaat over hoe je die getallen uit loadtests en VPA-aanbevelingen haalt in plaats van ze te gokken.&lt;/p&gt;</description>
    </item>
    <item>
      <title>K8sGPT met een lokaal 70B model op Apple Silicon</title>
      <link>https://tommeurs.nl/nl/posts/k8sgpt-local-llm-cluster-management/</link>
      <pubDate>Thu, 05 Feb 2026 14:00:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/k8sgpt-local-llm-cluster-management/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Ik heb K8sGPT op een Llama 3.3 70B-model gezet dat op een Mac Studio in m&amp;rsquo;n eigen kantoor draait, zodat er geen clustermetadata het netwerk verlaat, en er drie kapotte workloads doorheen gehaald. Alle drie gevonden, en de fixes die het schreef had ik van een collega geaccepteerd, op de resource-getallen na, want die waren verzonnen. Assisted diagnose werkt, met 25 seconden per query. Autonomous cluster management is nog steeds marketing, en de security-sectie is waarom ik een model niks op eigen houtje zou laten aanpassen.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Runtime security met Falco: detecteer verdacht gedrag in je cluster</title>
      <link>https://tommeurs.nl/nl/posts/falco-runtime-security/</link>
      <pubDate>Thu, 07 Aug 2025 10:00:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/falco-runtime-security/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Trivy en Kyverno keuren een image vóór hij draait. Falco kijkt wat de container daarna doet, syscall voor syscall, en slaat alarm als het gedrag niet bij een rule past. Deze post gaat van het ene ding dat Falco doet naar de config die ik draai, met het ruisprobleem ertussenin.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Ik scande m&amp;rsquo;n images met &lt;a href=&#34;https://tommeurs.nl/nl/posts/trivy-container-scanning/&#34;&gt;Trivy&lt;/a&gt;. Ik dwong policies af met &lt;a href=&#34;https://tommeurs.nl/nl/posts/kyverno-policies-governance/&#34;&gt;Kyverno&lt;/a&gt;. Mijn workloads kregen cryptografische identiteit via &lt;a href=&#34;https://tommeurs.nl/nl/posts/spiffe-spire-zero-trust/&#34;&gt;SPIFFE&lt;/a&gt;. Drie lagen preventie, allemaal groen, en een tijdlang voelde dat als genoeg.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SPIFFE en SPIRE: zero trust service identity</title>
      <link>https://tommeurs.nl/nl/posts/spiffe-spire-zero-trust/</link>
      <pubDate>Sat, 26 Jul 2025 10:00:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/spiffe-spire-zero-trust/</guid>
      <description>&lt;p&gt;Hoe weet Service A dat Service B echt Service B is?&lt;/p&gt;&#xA;&lt;p&gt;Ik blijf bij die vraag terugkomen, want het gangbare antwoord is ongemakkelijk. Jarenlang vertrouwden we op netwerklocatie. Traffic van het juiste IP was legitiem, klaar. Zero trust nam die aanname mee naar buiten en schoot hem dood. Nu moet elke service bewijzen wie hij is, bij elk request, ongeacht waar hij op het netwerk zit.&lt;/p&gt;&#xA;&lt;p&gt;Dat klinkt prima op een slide. Het lastige is het bewijs. Hoe laat een pod werkelijk zijn identiteit zien aan een andere pod, zonder dat ik overal met de hand secrets uitdeel en daarna eindeloos hun rotatie zit te bewaken?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kyverno policies: governance as code voor Kubernetes</title>
      <link>https://tommeurs.nl/nl/posts/kyverno-policies-governance/</link>
      <pubDate>Mon, 14 Jul 2025 10:00:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/kyverno-policies-governance/</guid>
      <description>&lt;p&gt;Ik had ooit een wiki-pagina met de titel &amp;ldquo;Cluster conventies&amp;rdquo;. Resource limits op alles. Geen &lt;code&gt;:latest&lt;/code&gt; tags. Geen deploys in de &lt;code&gt;default&lt;/code&gt; namespace. Het was een prima pagina. Niemand las hem. Na een half jaar overtrad de helft van het cluster die regels, en ik kwam er pas achter toen er iets omviel.&lt;/p&gt;&#xA;&lt;p&gt;Een regel die in een doc leeft is een suggestie. Een regel die de API server weigert te accepteren is governance. Dat gat is precies waarom deze post bestaat.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Progressive delivery met Argo Rollouts: canary en blue-green deployments</title>
      <link>https://tommeurs.nl/nl/posts/argo-rollouts-progressive-delivery/</link>
      <pubDate>Fri, 20 Jun 2025 10:00:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/argo-rollouts-progressive-delivery/</guid>
      <description>&lt;p&gt;Een standaard Kubernetes Deployment heeft me lang prima gediend. Push een nieuwe image tag, kijk hoe de pods rollen, klaar. Simpel, declaratief, en meestal ging er niks mis. De rolling update gaf me zelfs een warm gevoel van veiligheid: oude pods verdwijnen pas als de nieuwe ready zijn.&lt;/p&gt;&#xA;&lt;p&gt;Dat gevoel is een leugen. Een rolling update beschermt je tegen pods die niet opstarten. Hij doet niks tegen pods die perfect opstarten en vervolgens kapotte responses serveren. De container is gezond, de readiness probe is groen, en je nieuwe code stuurt stilletjes 500&amp;rsquo;s naar elke gebruiker. Binnen seconden raakt 100% van je traffic code die niemand onder echte load heeft gevalideerd.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Drift detection met ArgoCD: hoe weet je of je cluster nog in sync is</title>
      <link>https://tommeurs.nl/nl/posts/argocd-drift-detection/</link>
      <pubDate>Sat, 03 May 2025 19:27:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/argocd-drift-detection/</guid>
      <description>&lt;p&gt;De hele belofte van GitOps is dat Git de source of truth is. Die belofte houdt stand tot het moment dat iemand om 2 uur &amp;rsquo;s nachts &lt;code&gt;kubectl edit&lt;/code&gt; runt op een deployment om een incident te stoppen, een mutating webhook stilletjes een resource herschrijft, of een half afgemaakte sync je cluster ergens tussen wat Git wilde en wat het kreeg achterlaat. Nu zegt Git het ene en doet het cluster het andere, en niemand heeft het je verteld.&lt;/p&gt;</description>
    </item>
    <item>
      <title>App-of-Apps pattern in ArgoCD: schaalbare GitOps architectuur</title>
      <link>https://tommeurs.nl/nl/posts/argocd-app-of-apps/</link>
      <pubDate>Mon, 21 Apr 2025 20:18:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/argocd-app-of-apps/</guid>
      <description>&lt;p&gt;Mijn homelab begon met één ArgoCD Application. Daarna een handvol. Toen ik mezelf voor de vijftiende keer &lt;code&gt;kubectl apply -f&lt;/code&gt; zag draaien om weer een Application te registreren, wist ik dat ik precies had gebouwd wat ik wilde vermijden: handmatige stappen die ik moest onthouden, in een volgorde die ik moest onthouden, zonder enige administratie van wat er zou moeten bestaan.&lt;/p&gt;&#xA;&lt;p&gt;Het App-of-Apps pattern lost dat op met één idee. Je maakt met de hand een enkele root Application, en die maakt de rest aan. Na een gewist cluster bouw ik het geheel terug met één &lt;code&gt;kubectl apply&lt;/code&gt;. Die eigenschap is de hele reden dat ik het draai, en het is dezelfde reden dat ik überhaupt self-host: ik wil dat de repository de waarheid is, niet mijn geheugen.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitOps disaster recovery: je cluster herstellen vanuit Git</title>
      <link>https://tommeurs.nl/nl/posts/gitops-disaster-recovery/</link>
      <pubDate>Wed, 09 Apr 2025 19:52:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/gitops-disaster-recovery/</guid>
      <description>&lt;p&gt;Een paar jaar lang draaide mijn homelab cluster zonder veel drama. Nodes kwamen en gingen, workloads schoven rond, en het ergste waar ik mee te maken kreeg was af en toe een pod die vastzat in &lt;code&gt;CrashLoopBackOff&lt;/code&gt;. Het soort stabiliteit waarbij je stopt met nadenken over wat er gebeurt als het allemaal verdwijnt.&lt;/p&gt;&#xA;&lt;p&gt;Toen runde ik op een avond een &lt;code&gt;terraform destroy&lt;/code&gt; tegen de verkeerde workspace. Tegen de tijd dat ik het doorhad, was de control plane weg. Niet degraded. Weg.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubernetes offline draaien: edge computing zonder internet</title>
      <link>https://tommeurs.nl/nl/posts/kubernetes-offline-edge/</link>
      <pubDate>Tue, 04 Mar 2025 20:47:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/kubernetes-offline-edge/</guid>
      <description>&lt;p&gt;Wat gebeurt er als je Kubernetes cluster geen internet kan bereiken? Ik bedoel geen trage verbinding. Ik bedoel helemaal geen verbinding. Schepen op zee. Afgelegen mijnbouwlocaties. Fabrieksvloeren met air-gapped netwerken. Militaire deployments.&lt;/p&gt;&#xA;&lt;p&gt;Voor veel mensen klinkt dat exotisch, alsof het een probleem van iemand anders is. Ik behandel het als een basis-ontwerpeis, en ik leg uit waarom het mijn homelab beter maakt terwijl ik de kabel bijna nooit echt eruit trek.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Graceful degradation in Kubernetes: wat gebeurt er als componenten falen</title>
      <link>https://tommeurs.nl/nl/posts/kubernetes-graceful-degradation/</link>
      <pubDate>Thu, 20 Feb 2025 14:22:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/kubernetes-graceful-degradation/</guid>
      <description>&lt;p&gt;Iedereen herhaalt de zin dat Kubernetes zelf-herstellend is. Pods sterven, ze komen terug. Nodes vallen weg, workloads herschedulen. Het systeem reconcilieert zichzelf naar de staat die je hebt gedeclareerd, en de meeste dagen denk je er nooit over na.&lt;/p&gt;&#xA;&lt;p&gt;Dan is op een dag het ding dat het herstel doet juist het ding dat kapot ging. De API server is down. etcd reageert niet. De scheduler zit vast. En nu?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hoe etcd echt werkt: het hart van je Kubernetes cluster</title>
      <link>https://tommeurs.nl/nl/posts/etcd-deep-dive/</link>
      <pubDate>Mon, 27 Jan 2025 21:47:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/etcd-deep-dive/</guid>
      <description>&lt;p&gt;Als er iets misgaat in Kubernetes, leidt het spoor meestal terug naar etcd. API server timeout? Check etcd. Pods stuck in pending? Misschien etcd. Cluster voelt traag? Waarschijnlijk etcd.&lt;/p&gt;&#xA;&lt;p&gt;Ik behandelde etcd lang zoals de meeste operators dat doen: als een black box die naast het control plane meedraait. &amp;ldquo;De database.&amp;rdquo; Je maakt er een backup van en laat het verder met rust. Maar black boxes voelen voor mij als splinters, en de eerste keer dat een etcd cluster om 2 uur &amp;rsquo;s nachts omviel besefte ik dat ik geen idee had waar ik naar keek. Dus heb ik het uitgezocht. En het blijkt te draaien op een handjevol ideeën die, zodra ze landen, de meeste etcd problemen diagnoseerbaar maken in plaats van eng.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubernetes high availability: stacked vs external etcd uitgelegd</title>
      <link>https://tommeurs.nl/nl/posts/kubernetes-high-availability-etcd/</link>
      <pubDate>Wed, 15 Jan 2025 20:23:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/kubernetes-high-availability-etcd/</guid>
      <description>&lt;p&gt;Het eerste &amp;ldquo;productie&amp;rdquo; Kubernetes cluster dat ik draaide had één control plane node. Het tikte weken vrolijk door, totdat een disk kapotging en het hele ding meenam. Elke pod, elke service, weg. Die storing leerde me hoe &amp;ldquo;single point of failure&amp;rdquo; echt voelt, en duwde me naar een vraag die ik mensen steeds zie struikelen: als je een cluster bouwt dat node-verlies overleeft, draai je etcd dan op je control plane nodes, of op aparte nodes?&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
