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 escalationund 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 dieRuntimenicht 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 niceWert erhält ein Prozess die "meiste" CPU Zeit?
- Erkläre wie viel CPU Ressourcen time-sharing Prozesse abhängig vom niceWert erhalten
- Warum ist nicekein 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 zunice?
- 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 cgroupssetzen?- Warum eignet sich traffic controlbesser?
- Was sind Nachteile/Einschränkungen von traffic controlim Vergleich zucgroups? Lässt sich das einfach auf einzelne Prozesse anwenden? Wie werden diese für Container "umgangen"?
 
- Warum eignet sich 
Networking
- Was ist ein Network Namespace und welche Ressourcen werden davon isoliert?
- Du verstehst warum ein bridgeinterface auf dem Host notwendig ist und wie dieses mit den Interfaces aus einemNamespacezusammenhängt
- Warum können mehrere Container auf dem gleichen Host System den gleichen LISTEN portverwenden?
- 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 OverlayFilesystem ist und wie das funktioniert. Du weißt wie die Layer zusammen kommen und wiecopy on writehier 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
- man ip netns
- Building Docker Images Show archive.org snapshot
- Multistage Builds Show archive.org snapshot
Aufgaben
- 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 Dockerfileaus 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
Posted by Claus-Theodor Riegg to DevOps Curriculum (2023-01-07 14:28)