In diesem Kapitel sprechen wir darüber wie Container eigentlich funktionieren. Es ist zwar nicht zwingend erfoderlich um diese zu verwenden, aber ein tieferes Verständnis hilft dir in Problemfällen die richtige Lösung zu finden oder eine Architekturentscheidung zu treffen oder zu begründen. Solltest du mit deinem Wissen aus den Linux und Netzwerkkapiteln nicht mehr fit sein, solltest du nochmal einen Blick auf diese Kapitel und deren Ziele werfen.
Ziele
Process Isolation
Warum möchte man Ressourcen eines Hosts von Prozessen untereinander abgrenzen?
Wie können Benutzer und Dateisystem Berechtigungen zur Isolierung von Prozessen beitragen?
Was ist eine privilege escalation und wie kann man sich davor schützen?
Was ist chroot? Nenne mindestens 2 nützliche Szenarien.
Was ist eine Container Runtime?
Was ist eine Container Platform? Was macht diese für mich, was die Runtime nicht kann (Nenne Beispiele)?
Was sind Linux Namespaces?
Du kannst einige Namespace Typen nennen (bzw. Bereiche die durch Namespaces begrenzt werden können).
Was genau "begrenzt" der Namespace in dem jeweiligen Bereich bzw. wie wirkt sich das für den Prozess aus?
Erkläre den Output von lsns
Resource Limiting
Erkläre wie CPU Ressourcen / Zeiten in einem Linux System auf die einzelnen Prozesse verteilt werden
Mit welchen nice Wert erhält ein Prozess die "meiste" CPU Zeit?
Erkläre wie viel CPU Ressourcen time-sharing Prozesse abhängig vom nice Wert erhalten
Warum ist nice kein geeigneter Weg um in einem Kubernetes Cluster CPU Ressourcen an die Container zu binden?
Was sind Linux cgroups? Wie funktioniert die Limitierung der CPU Zeit im Kontrast zu nice?
Wie wird der Speicher von Prozessen mit cgroups limitiert? Was passiert wenn die erlaubte Speichermenge überschritten wird?
Warum sollte man zum limitieren von Netzwerktraffic nicht auf cgroups setzen?
Warum eignet sich traffic control besser?
Was sind Nachteile/Einschränkungen von traffic control im Vergleich zu cgroups? Lässt sich das einfach auf einzelne Prozesse anwenden? Wie werden diese für Container "umgangen"?
Networking
Was ist ein Network Namespace und welche Ressourcen werden davon isoliert?
Du verstehst warum ein bridge interface auf dem Host notwendig ist und wie dieses mit den Interfaces aus einem Namespace zusammenhängt
Warum können mehrere Container auf dem gleichen Host System den gleichen LISTENport verwenden?
Du kennst die folgende Befehle und weißt wofür du sie gebrauchen kannst:
ip netns
ip netns pids <namespace>
Storage and Filesystem
Was sollte in einem Container Image enthalten sein (und was nicht)?
Was sind Image Tags?
Was sind Container Image Layers?
Wann wird bei einem Image build ein neuer Layer hinzugefügt?
Was ist bei Layern beim Build Prozess hinsichtlich Performance und Sicherheit zu beachten?
Wie kann ein Container Image auf einer Image Registry veröffentlicht werden?
Du verstehst was ein Overlay Filesystem ist und wie das funktioniert. Du weißt wie die Layer zusammen kommen und wie copy on write hier zum Einsatz kommt.
Was versteht man unter einer atomic filesystem operation?
Inhalte
Kapitel 2, 3, 4 und 5 aus "The Book of Kubernetes" von Alan Hohn
Visualisiere wie Netzwerkkommunikation zwischen Containern, dem Hostsystem und einem remote Host funktioniert. Dabei musst du auf alle beteiligten Netzwerkinterfaces, Namespaces, Routing und NAT eingehen.
Besprich die Dockerfile aus Anhang A mit deinem Mentor
Anhang A
FROM node:16.19.0-alpine as builder
WORKDIR /frontend
COPY package.json /frontend
COPY package-lock.json /frontend
COPY patches /frontend/patches
RUN npm ci --quiet --no-progress
COPY ./ /frontend
RUN npm run build
FROM nginx:1.22-alpine
COPY --from=builder /frontend/dist /frontend
COPY deploy/nginx/nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80