Kubernetes 102
NB In 2024 behandelen we in deze les ook nog niet eerder behandelde onderwerpen uit de Kubernetes-101 les
Deze les geeft Kubernetes verdieping en dient om aan de slag te kunnen met je eigen Kubernetes Rancher cluster onder aimsites.nl
en hierop een kleine microservice applicatie te kunnen runnen (PitStop).
Huiswerk/voorbereiding
Dit is het huiswerk voorafgaand aan de les:
- Neem als recap van de vorige les het artikel Kubernetes 101 door
- En ook de korte blog post 'Difference between a load balancer and an ingress'
- Neem high level de 3opties door voor migratie uit Docker compose in artikel van Milind Chavan (2021)
- Lees de documentatie over Kompose op de Kubernetes docs.
- Beantwoord onderstaande 8 huiswerkvragen. Zoek o.b.v. dingen die hierin onduidelijk zijn zelf relevante stukken uit de volgende bronnen (eigen keuze/leerwegonafhankelijk)
- de Kubernetes documentatie (kubernetes.io) over meer gedetailleerde werking van Deployments, Replicasets, Ingress en Services.
- Of meldt je aan voor de gratis (fremium) Linux Foundation course over Kubernetes en neem hoofdstuk '8. Kubernetes building blocks en '10 Services' door.
Huiswerkvragen
- Noem 3 opties om te upgraden vanaf docker compose naar Kubernetes
- Noem een voordeel van elk van deze 3 opties
- Kun je op productie ook Docker en Docker compose gebruiken? Noem minstens 1 reden waarom je dit zou willen, en 2 waarom niet.
- Wat betekent "Pods are used as the unit of replication in Kubernetes."
- Wat betekent 'round robin'? Google het zo nodig (staat niet in de bronnen) leg het uit
- Wat is DNS en hoe gebruikt Kubernetes dit?
- Op welke (wel/andere) behandelde 'resource' lijkt een Kubernetes
DaemonSet
? - Zelfde vraag voor de (verouderde) K8S resource
ReplicationController
: a. met welke resource(s) hangt deze samen? b. waarom is deReplicationController
gedeprecate? vind in bron, of vraag bijvoorbeeld aan ChatGPT en evalueer diens antwoord en zorg dat je het zelf snapt/kan reproduceren
Les
Kubernetes (K8S) is een te groot onderwerp om geheel in één week te kunnen behandelen. Hier zou je ook een hele minor mee kunnen vullen.
De bedoeling is dat je basis K8s Architectuur en K8S componenten en concepten kent en hier mee om kunt gaan. Zodat je m.b.v. kubectl
en extra benodigde vaardigheden tijdens opdracht en project relatief snel kunt uitzoeken met behulp van deze 'kapstok van kennis' die je al hebt.
In deze les kijken we naar:
- Terugblik Kubernetes architectuur (vragen vorige lessen)
- Het YML format en de relatie met JSON
- K8S advanced onderwerpen 'Ingress'
- K8S advanced onderwerp 'etcd' (en de relatie met High Availability clusters)
- Optioneel: het begrip 'Quality of Service' in algemeen, en specifiek in K8S in verband met mogelijk onderzoek.
- Workshop ArgoICT over Kubernetes (en K8S 'workloads')
1. Lesopdracht/-uitstapje: JSON vs YAML
Bekijk de website https://www.json2yaml.com/ en experimenteer hiermee. Zorg dat je duidelijk krijgt de link tussen JSON en YAML.
2. Lesvragen .yml
-
Is YAML ook JSON?
-
Hoe ziet een JSON array eruit bij omzetten naar YAML?
-
Hoe ziet een JSON object eruit? Wat is het verschil en overeenkomst met een array?
-
Maak een YAML bestand met een lijst van namen van jezelf en 3 studenten die om je heen zitten. Zet erna in het bestand ook de informatie over jezelf qua:
- 'lievelingskleur'
- 'favoriete film'
- 'hobby'
-
Vraag ook een van de 3 klasgenoten deze 3 'properties' en vul in
-
Ken je nog meer talen/formats die onderling zo'n zogenoemde 'superset' zijn van een andere taal/format? Schrijf op welke. Wat is het voordeel?
3. Nog 2 K8S onderwerpen: Ingress en etcd
Interessant én relevant stuk theorie is de werking van etcd, het gedistribueerde opslagsysteem waar K8S de eigen config opslaat. En wat ook een beeld geeft van kwesties rondom 'database sharding' en ook 'clustering' en 'voting. Bekijk deze korte intro:
We bekijken samen de video Kubernetes Ingress in 5 mins - Sai Vennam, IBM (5:40 minuten)
- What is etcd? - Whitney Lee, IBM (6 minuten)
Lesvragen Ingress en etcd
- Wat hebben K8S Ingress en etcd met elkaar te maken? (if any)
- Wat is het verschil tussen een Ingress en een Service?
- Bedenk zelf een toetsvraag over Ingress en zet in Teams
- Wat is een HA cluster in K8S?
- Wat heeft het aantal met het Raft voting systeem te maken?
- Wat is een 'etcd. member' en zit deze in control plane of data plane?
Optioneel: Quality of service in K8S
Een opstapje naar 'advanced Kubernetes' is wel het concept 'Quality of Service' (QoS) en implementatie en werking hiervan in Kubernetes.
Dit zou een mooi onderzoek zijn voor wie deze meer 'Ops side of things' wil verkennen.
Workshop "K8S op Rancher - Kubernetes een beetje praktisch" - Argo ICT
Het bedrijf Argo ICT uit Arnhem, met oud HAN student Murat Castermans geeft een hands-on uitleg bij het gebruik van een Rancher cluster voor de laatste opdrachten in de course fase.
Argo ICT moet je niet te verwarren met de vaak in het blok 2 gebruikt project te gebruiken tool Argo CD :). Argo ICT regelt de complexere ICT benodigheden voor HAN ICT en AIM, maar hebben ook andere klanten.
Samenvatting presentatie
Hier de link naar de presentatie (Google Slides)
Enkele quotes/samenvatting
Kubernetes is 'meer dan alleen maar schaalbaar' "Je hebt iemand die continue over je schouders meekijkt".
- Aantal issues tackled K8S zelf, heeft bv. probes voor detecteren van memory leaks, zodat je 's nachts niet wakker wordt gebeld.
- Je hoeft geen rekening houden met allerlei zaken aan de achterkant, zoals het configureren van Nginx, of OS specifieke zaken.
- Je hebt minder last van vendor lock-in. Zolang het maar 'Certified Kubernetes' is.
Soorten workloads in K8S
Quote uit de Kubernetes docs over 'workloads'
"A workload is an application running on Kubernetes. [...] Kubernetes provides several built-in workload resources:
(Uit de sheets van Murat):
Deployment
- Alles stateless, maakt niet uit welke node en of er storage is, makkelijk schalen, bv. een JavaScript front-end in een Nginx containerStatefulSet
- Wel storage, geisoleerd van andere storage, bv. voor database serverDaemonset
- K8S zorgt dat deze 'service' elke Node zorgt , bijvoorbeeld voor logging services (zoals FlentD)
Verdere highlights
K8S kent 3 soorten probes: Startup, Readiness (traffic) en Liveness (kill)
Gebruik voor testen op je eigen K8S cluster op aimsites een port forward, i.p.v. een NodePort setting (zoals je op localhost wel doet).
RWO = 'Read Write Once', wordt niet getoetst, wel interessant voor onderzoek evt. (access modes van K8S PersistentVolumeClaim)
Quiz
Test je kennis met deze korte multiple choice quiz.
Leerdoelen
Check met onderstaande leerdoelen of je de behandelde stof begrepen hebt en toetsvragen kunt beantwoorden.
- Je kunt uitleggen wat de rol van Pods is als replicatie-eenheid in Kubernetes.
- Je begrijpt hoe Kubernetes Ingress werkt en hoe het verschilt van een Service.
- Je kunt uitleggen hoe een HA cluster werkt in Kubernetes en waarom minstens drie master nodes vereist zijn voor etcd consensus.
- Je kent de voordelen van migreren van Docker Compose naar Kubernetes en weet hoe tools zoals Kompose en Skaffold hierbij helpen.
- Je kunt de functie van een
DaemonSet
in Kubernetes uitleggen - Je kent het voorbeeld van de
ReplicationController
uit de K8S die is gedeprecate en vervangen doorReplicaSet
als voorbeeld van verbeteringen en verandering in Kubernetes historie - Je kunt het verschil tussen JSON en YAML uitleggen aan de hand van hun relatie en voorbeelden en kan uitleggen waarom men
.yml
vaker voor K8S config gebruikt