501 Funktionsweise von Containern [1.5 PT]

Updated . Posted . Visible to the public.

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 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 wie copy on write hier zum Einsatz kommt.
  • Was versteht man unter einer atomic filesystem operation?

Inhalte

Aufgaben

  1. Visualisiere wie Netzwerkkommunikation zwischen Containern, dem Hostsystem und einem remote Host funktioniert. Dabei musst du auf alle beteiligten Netzwerkinterfaces, Namespaces, Routing und NAT eingehen.
  2. 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
Claus-Theodor Riegg
Last edit
Claus-Theodor Riegg
License
Source code in this card is licensed under the MIT License.
Posted by Claus-Theodor Riegg to DevOps Curriculum (2023-01-07 14:28)