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 dieRuntime
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 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
cgroups
setzen?- Warum eignet sich
traffic control
besser? - Was sind Nachteile/Einschränkungen von
traffic control
im 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
bridge
interface auf dem Host notwendig ist und wie dieses mit den Interfaces aus einemNamespace
zusammenhängt - Warum können mehrere Container auf dem gleichen Host System den gleichen LISTEN
port
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 wiecopy 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
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
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
Posted by Claus-Theodor Riegg to DevOps Curriculum (2023-01-07 14:28)