Ga naar inhoud

Uitwerking

CI Week 1

1.1 Google Cloud & GKE - Voltooide Badges

Voltooide badges via Google Skills:


1.2 Kubernetes

Opdracht 1 - Cluster Installatie

De opdracht specificeert Ubuntu 24.04 LTS minimal. Ik heb Ubuntu 25.10 LTS minimal gebruikt.

Ubuntu 25.10 komt standaard met sudo-rs (een Rust-herimplementatie van sudo) versie 0.2.8. Deze versie heeft een bekende sessiebug - sudo reboot mislukt met een onverwachte fout. Opgelost via een GCP-opstartscript dat klassieke sudo installeert bij elke opstart.

sudo-rs versie op een nieuwe Ubuntu 25.10

sudo-rs bug: reboot mislukt

GCP opstartscript vervangt sudo-rs

Gebruikte instanties:

NodeNaamZoneTypeOS
Mastermaster-amsterdameurope-west4-a (Nederland)e2-mediumUbuntu 25.10 LTS minimal
Worker 1worker-brusselseurope-west1-b (België)e2-mediumUbuntu 25.10 LTS minimal
Worker 2worker-londoneurope-west2-b (Verenigd Koninkrijk)e2-mediumUbuntu 25.10 LTS minimal

VM-instanties in Google Cloud

OS en opslagconfiguratie

Het cluster is geïnstalleerd met twee shell-scripts: configure_master.sh voor de masternode en configure_worker.sh voor de workernodes. Deze scripts automatiseren kernelmoduleconfiguratie, containerd installeren, Kubernetes-pakketinstallatie (v1.35) en clusterinitialisatie.

configure_master.sh uitvoeren op master-amsterdam

configure_worker.sh uitvoeren op worker-brussels

Workers toegevoegd - alle nodes Ready

Uitleg van kubeadm init:

kubeadm init zet het Kubernetes-besturingsvlak op de masternode. Het genereert TLS-certificaten, schrijft kubeconfig-bestanden, maakt statische Pod-manifesten aan voor kerncomponenten (kube-apiserver, kube-controller-manager, kube-scheduler, etcd) en genereert een bootstrap-token voor workernodes.

Uitleg van kubectl apply -f kube-flannel.yml:

Installeert Flannel als CNI-plugin. Flannel maakt een VXLAN overlay-netwerk dat elke pod een uniek IP geeft, zodat pods op verschillende nodes direct communiceren. De CIDR 10.244.0.0/16 moet overeenkomen met de --pod-network-cidr van kubeadm init.

Andere netwerk-CNIs:

CNIBeschrijving
FlannelEenvoudig L3 overlay-netwerk via VXLAN. Geen netwerkbeleidsondersteuning.
CalicoBGP-routing met volledige NetworkPolicy-ondersteuning. Veel gebruikt in productie.
CiliumeBPF-gebaseerde CNI met geavanceerde observeerbaarheid en beveiliging.
Weave NetMesh overlay-netwerk, eenvoudige installatie, ondersteunt NetworkPolicy.
CanalCombineert Flannel (networking) met Calico (netwerkbeleid).

1a - kubectl get nodes:

NAME               STATUS   ROLES           AGE    VERSION
worker-brussels    Ready    <none>          14m    v1.35.1
worker-london      Ready    <none>          7m     v1.35.1
master-amsterdam   Ready    control-plane   17m    v1.35.1

kubectl get pods -n kube-system

kubectl get pods -n kube-flannel

Verklaring van de kube-system pods:

PodRol
kube-apiserverFront-end van het besturingsvlak. Alle kubectl-commando’s en interne componenten lopen via deze REST API. Alleen op de master.
kube-controller-managerVoert alle controller-loops uit: juiste aantal pod-replica’s, node-levenscycli, certificaatrotatie. Alleen op master.
kube-schedulerBewaakt niet-ingeplande pods en wijst ze toe aan een geschikte node. Alleen op master.
etcdGedistribueerde sleutel-waardeopslag met de volledige clusterstatus. Alleen op master.
kube-proxyBeheert iptables/nftables-regels zodat Service-IPs correct naar pods routeren. Eén pod per node.
corednsCluster-interne DNS. Twee replica’s voor redundantie.

Opdracht 2 - Gecontaineriseerde Applicatie

Dockerfile: (bekijk op GitHub)

  • Alpine-variant bewust gekozen: ~5 MB vs ~180 MB Debian, kleiner aanvalsoppervlak.
  • Kopieert de website naar de nginx-documentroot.
  • Start nginx op de voorgrond zodat de container actief blijft.

GitHub Actions workflow:

De workflow (ci_week1.yml) bouwt en pusht het image als stensel8/public-cloud-concepts:latest bij elke push naar main.

deployment.yaml: (bekijk op GitHub)

2b - Pod-IPs:

NAME                               IP           NODE
first-deployment-5ffbd9444c-5hkzs  10.244.2.2   worker-london
first-deployment-5ffbd9444c-s4xdb  10.244.1.2   worker-brussels

kubectl apply uitvoer - pods in Pending status

Beide pods Running

curl en kubectl exec uitvoer

De respons bevestigt dat de nginx-container draait en de statische site serveert via het interne Flannel-IP. Externe toegang vereist een Kubernetes Service (Week 2).