[{"data":1,"prerenderedAt":343},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Fkubernetes-introduction-slides":14},[4],{"title":5,"path":6,"stem":7,"children":8,"page":13},"Blog","\u002Fblog","blog",[9],{"title":10,"path":11,"stem":12},"Kubernetes 101","\u002Fblog\u002Fkubernetes-introduction","blog\u002Fkubernetes-introduction",false,{"id":15,"title":10,"body":16,"canonical":329,"date":330,"description":331,"draft":13,"extension":332,"featured":13,"format":333,"image":329,"meta":334,"minRead":325,"navigation":335,"path":11,"pillar":336,"seo":337,"series":329,"slides":335,"stem":12,"tags":338,"updated":329,"__hash__":342},"blog\u002Fblog\u002Fkubernetes-introduction.md",{"type":17,"value":18,"toc":311},"minimark",[19,23,28,31,35,64,67,87,91,94,97,100,104,107,110,114,117,120,124,127,141,144,147,151,162,216,220,225,249,253,279,283,301,305,308],[20,21,22],"p",{},"A short primer before anything edge-specific.",[24,25,27],"h2",{"id":26},"what-it-is","What it is",[20,29,30],{},"Kubernetes is an open-source container orchestrator. It joins several machines into one cluster and takes care of deploying, scaling and managing containerised applications through a standard API.",[24,32,34],{"id":33},"why-use-it-and-when-not-to-use-it","Why use it, and when not to use it",[36,37,38,46,52,58],"ul",{},[39,40,41,45],"li",{},[42,43,44],"strong",{},"Resilience."," With several nodes, workloads move elsewhere when a machine fails.",[39,47,48,51],{},[42,49,50],{},"Scaling."," An application runs as one or many containers behind the same API.",[39,53,54,57],{},[42,55,56],{},"Service discovery."," Workloads find each other by name, not by hand-managed IP addresses.",[39,59,60,63],{},[42,61,62],{},"Consistency."," The same manifests deploy on-premise, in the cloud, or across both.",[20,65,66],{},"And when not to:",[36,68,69,75,81],{},[39,70,71,74],{},[42,72,73],{},"One app on one box."," Docker Compose or systemd is simpler and enough.",[39,76,77,80],{},[42,78,79],{},"Nobody to run it."," Kubernetes is a platform to operate, not a tool to install. The learning curve is real, and so is the day-two work.",[39,82,83,86],{},[42,84,85],{},"Hard real time."," It schedules containers. It does not replace a PLC or a real-time OS.",[24,88,90],{"id":89},"brief-history","Brief history",[20,92,93],{},"Kubernetes grew out of a decade of running containers inside Google, went open source in 2014, and was handed to a vendor-neutral foundation a year later. That last move is what turned it into an industry standard rather than a Google product.",[95,96],"k8s-history",{},[20,98,99],{},"One of the 3 most mature projects in the CNCF.",[24,101,103],{"id":102},"an-extensible-product","An extensible product...",[20,105,106],{},"The API is the contract. Every object has a path on it, operators add their own kinds, and runtime, network and storage are swappable behind standard interfaces. Like Linux, it comes in many distributions.",[108,109],"k8s-api-path",{},[24,111,113],{"id":112},"based-on-a-reconciliation-principle","...based on a reconciliation principle",[20,115,116],{},"You tell Kubernetes what you want, not how to get there: \"two copies of this container, reachable on this port\". The cluster stores that desired state and keeps comparing it with what is actually running. When a pod crashes or a node disappears, the gap is noticed and closed without anyone being paged. The same loop applies your changes: edit the desired state, and the cluster converges to it.",[118,119],"k8s-reconcile",{},[24,121,123],{"id":122},"control-plane-and-data-plane","Control plane and data plane",[20,125,126],{},"A cluster has two halves.",[36,128,129,135],{},[39,130,131,134],{},[42,132,133],{},"The control plane"," holds the desired state. It is made of the API server, the scheduler, the controller managers, and a datastore (etcd, or SQLite in a default k3s install).",[39,136,137,140],{},[42,138,139],{},"The data plane"," is the worker nodes. They run the containers the control plane assigns to them.",[142,143],"k8s-architecture",{},[20,145,146],{},"Operators and tooling talk to the API server. End users never see it; they reach the applications running on the nodes.",[24,148,150],{"id":149},"hands-on","Hands-on",[20,152,153,154,161],{},"Exercises in ",[155,156,160],"a",{"href":157,"rel":158},"https:\u002F\u002Fgithub.com\u002Fmathieu-sabatier\u002Fk8s-101-exercices",[159],"nofollow","k8s-101-exercices",": a folder each, with README, manifests and a check script. Work in your own namespace on the shared k3s cluster.",[163,164,165,176,186,196,206],"ol",{},[39,166,167,175],{},[42,168,169,174],{},[155,170,173],{"href":171,"rel":172},"https:\u002F\u002Fgithub.com\u002Fmathieu-sabatier\u002Fk8s-101-exercices\u002Ftree\u002Fmain\u002F00-hello",[159],"Hello","."," Two replicas. Delete a pod by hand, watch it come back.",[39,177,178,185],{},[42,179,180,174],{},[155,181,184],{"href":182,"rel":183},"https:\u002F\u002Fgithub.com\u002Fmathieu-sabatier\u002Fk8s-101-exercices\u002Ftree\u002Fmain\u002F01-service",[159],"Service"," A NodePort in front, reached from outside and by name inside.",[39,187,188,195],{},[42,189,190,174],{},[155,191,194],{"href":192,"rel":193},"https:\u002F\u002Fgithub.com\u002Fmathieu-sabatier\u002Fk8s-101-exercices\u002Ftree\u002Fmain\u002F02-configmap",[159],"ConfigMap"," Config out of the image. Which changes need a rollout?",[39,197,198,205],{},[42,199,200,174],{},[155,201,204],{"href":202,"rel":203},"https:\u002F\u002Fgithub.com\u002Fmathieu-sabatier\u002Fk8s-101-exercices\u002Ftree\u002Fmain\u002F03-initcontainer",[159],"Init containers"," Wait for a dependency, seed a volume, then start.",[39,207,208,215],{},[42,209,210,174],{},[155,211,214],{"href":212,"rel":213},"https:\u002F\u002Fgithub.com\u002Fmathieu-sabatier\u002Fk8s-101-exercices\u002Ftree\u002Fmain\u002F04-break-it",[159],"Break it"," Wrong image tag, failing probe. Describe, logs, events, fix.",[24,217,219],{"id":218},"key-tools","Key tools",[221,222,224],"h3",{"id":223},"cli","CLI:",[36,226,227,235],{},[39,228,229,234],{},[155,230,233],{"href":231,"rel":232},"https:\u002F\u002Fkubernetes.io\u002Fdocs\u002Freference\u002Fkubectl\u002F",[159],"kubectl",", the go-to for quick debug and inspection.",[39,236,237,242,243,248],{},[155,238,241],{"href":239,"rel":240},"https:\u002F\u002Fk9scli.io\u002F",[159],"k9s",", ",[155,244,247],{"href":245,"rel":246},"https:\u002F\u002Flenshq.io\u002F",[159],"lens",", tool to visualise cluster state",[221,250,252],{"id":251},"application-packaging","Application packaging:",[36,254,255,263,271],{},[39,256,257,262],{},[155,258,261],{"href":259,"rel":260},"https:\u002F\u002Fkustomize.io\u002F",[159],"kustomize"," native templates",[39,264,265,270],{},[155,266,269],{"href":267,"rel":268},"https:\u002F\u002Fhelm.sh\u002Fdocs\u002F",[159],"helm"," app templating, client side",[39,272,273,278],{},[155,274,277],{"href":275,"rel":276},"https:\u002F\u002Fkro.run\u002F",[159],"kro"," app templating, server side",[221,280,282],{"id":281},"gitops","GitOps",[36,284,285,293],{},[39,286,287,292],{},[155,288,291],{"href":289,"rel":290},"https:\u002F\u002Ffluxcd.io\u002F",[159],"flux",", unix-style & lighweight controllers",[39,294,295,300],{},[155,296,299],{"href":297,"rel":298},"https:\u002F\u002Fargo-cd.readthedocs.io\u002Fen\u002Fstable\u002F",[159],"argocd",", dev friendly app & UI",[24,302,304],{"id":303},"what-gitops-is-exactly","What GitOps is exactly?",[20,306,307],{},"Instead of pointing kubectl at the cluster, you push manifests to a Git repository and an agent inside the cluster pulls them and applies them through the API server. The repository becomes the source of truth: every change is a reviewed commit, the whole cluster can be rebuilt from it, and rolling back is a revert.",[309,310],"k8s-gitops",{},{"title":312,"searchDepth":313,"depth":313,"links":314},"",2,[315,316,317,318,319,320,321,322,328],{"id":26,"depth":313,"text":27},{"id":33,"depth":313,"text":34},{"id":89,"depth":313,"text":90},{"id":102,"depth":313,"text":103},{"id":112,"depth":313,"text":113},{"id":122,"depth":313,"text":123},{"id":149,"depth":313,"text":150},{"id":218,"depth":313,"text":219,"children":323},[324,326,327],{"id":223,"depth":325,"text":224},3,{"id":251,"depth":325,"text":252},{"id":281,"depth":325,"text":282},{"id":303,"depth":313,"text":304},null,"2026-09-25","What Kubernetes is, what problems it solves, and how it is composed and start using it.","md","guide",{},true,"edge",{"title":10,"description":331},[339,340,341],"kubernetes","k3s","primer","2FT5iJNmj4lFDtUu7noSIWC_iMV6MpwPA4mFEmCKtiM",1791414107414]