Gå til indhold
atlas

Container-orkestrering

At lade software drive mange containere automatisk på tværs af en gruppe maskiner, så ingen skal starte og placere dem i hånden.

Kladde - dette opslag er endnu ikke gennemgået.

Formelt

Automatisk drift af containere på tværs af mange værter ud fra en skriftlig beskrivelse af den ønskede tilstand - at vælge, hvor hver kører, erstatte dem, der fejler, tilføje kopier under belastning og rulle nye versioner ud.

Forklaret enkelt

Som dirigenten i et orkester - musikerne spiller deres egne stemmer, men nogen bestemmer, hvem der spiller hvornår, og sætter en afløser ind, hvis én bliver syg.

I praksis

Når en dansk webshop får en bølge af besøgende på Black Friday, starter orkestreringssystemet ti ekstra kopier af shoppens container og fjerner dem igen, når trafikken falder, mens driftsvagten sover.

Hvorfor det betyder noget

Uden den er det umuligt at drive hundredvis af containere i hånden; med den bliver styringssystemet et værdifuldt mål, hvis adgang skal bevogtes nøje.

Teknisk uddybning

Alle orkestreringssystemer løser de samme opgaver: medlemskab og sundhed i klyngen (hvilke noder findes, og er de i live), planlægning (at pakke workloads på noder ud fra ressourceforespørgsler, affinity og anti-affinity, taints og topologispredning), livscyklus (genstart, rullende opdatering, tilbagerulning), service discovery og lastbalancering, fordeling af konfiguration og hemmeligheder, tilkobling af lager samt autoskalering. Det dominerende design, arvet fra Googles Borg (beskrevet i EuroSys-artiklen fra 2015) og efterfølgeren Omega, er deklarativt: operatører sender en ønsket tilstand til et API, den gemmes i et konsistent lager, og uafhængige styringsløkker sammenligner hele tiden ønsket og observeret tilstand og handler på forskellen. Denne niveaustyrede afstemning (level-triggered reconciliation) gør systemet selvhelende - en controller behøver ikke se den hændelse, der ødelagde noget, kun den aktuelle forskel.

Klyngens tilstandslager er den kritiske komponent. Kubernetes gemmer den i etcd, der bruger Raft-konsensus, så et kontrolplan køres normalt med tre eller fem medlemmer for at kunne tåle én eller to fejl og stadig have flertal (quorum). Swarm mode har sit eget Raft-lager indbygget i manager-noderne, og HashiCorp Nomad kører ligeledes Raft mellem sine servere. Mistes quorum, fryses ændringer, men kørende workloads lades normalt i fred, fordi agenterne på noderne (kubelet i Kubernetes) holder de eksisterende containere i live.

Kubernetes er blevet de facto-standarden; Docker Swarm mode lever videre i små opsætninger, Nomad planlægger containere side om side med VM'er og almindelige binærer, og administrerede tjenester som Amazon ECS tilbyder proprietær orkestrering. Planlægningens kvalitet afhænger af ærlige ressourceforespørgsler: uden dem overbooker planlæggeren, og under hukommelsespres smider kubelet pods ud (eviction), begyndende med dem i QoS-klassen BestEffort.

Sikkerhedsproblemerne følger af centraliseringen. Orkestreringens API kan oprette workloads med et vilkårligt image, montere hemmeligheder og - medmindre en admission-politik forhindrer det - starte privilegerede pods, så API-adgang reelt er root på alle noder. NIST SP 800-190 nævner modforanstaltninger for orkestrering som administrativ adgang efter mindste privilegium, adskillelse af workloads med forskellig følsomhed på forskellige værter, krypteret netværkstrafik mellem noder og pålidelig tilmelding af noder. Typiske fejl i praksis er API-servere eller dashboards eksponeret mod internettet, for brede RBAC-bindinger, ukrypterede hemmeligheder i tilstandslageret og flade pod-netværk uden netværkspolitikker. Orkestrering er noget andet end konfigurationsstyring (Ansible, Puppet), der bringer maskiners tilstand på plads, og end GitOps, som er en måde at føde den ønskede tilstand ind i orkestreringen på.

Hvad du bør lære først

Alt det, dette bygger på - grundlaget først.

  1. Kerne (kernel)
  2. →Netværk
  3. →Styresystem
  4. →Proces
  5. →Container
  6. →Container-orkestrering

Relationer

Forudsætter
ContainerNetværk
Implementeres af
Kubernetes
Bruges sammen med
GitOps

Kilder og videre læsning

Standarder og officielle tekster

  • NIST SP 800-190 - Application Container Security Guide · NIST

Hvor dataene kommer fra

Dette opslag er skrevet af en AI ud fra kilderne ovenfor og er endnu ikke gennemgået af et menneske. Brug det som udgangspunkt, og tjek alt vigtigt mod kilderne.

Se gennemgangskøenForeslå en rettelse på GitHubDette begreb som JSON

Test dig selv

Indlæser…

Atlas er i beta.