Kubernetes är byggt kring en avstämningsloop. Varje komponent i systemet bevakar gapet mellan önskat tillstånd (vad API-servern har registrerat) och faktiskt tillstånd (vad som körs på noderna). När ett gap uppstår, en Pod kraschar, en ny Deployment skapas, en nod går offline, skapar, raderar eller justerar relevant kontroller arbetslaster tills faktiskt tillstånd matchar önskat tillstånd igen.
Kontrollplanet lagrar allt önskat tillstånd i etcd, ett distribuerat nyckel-värde-lager. API-servern är den enda ingångspunkten för alla läsningar och skrivningar till det tillståndet. Kontroller kör i en loop och läser från API-servern och utfärdar instruktioner till arbetarnoder via kubelet. Denna åtskillnad, att deklarera avsikt i API:t och utföra avsikt på noder, är vad som gör Kubernetes både kraftfullt och komplext.
En Deployment är ett bra exempel på hur detta fungerar i praktiken. Du deklarerar 'Jag vill att tre repliker av denna containerimage ska köras hela tiden.' Deployment-kontrollern skapar en ReplicaSet, som i sin tur skapar tre Pods. Om en Pod kraschar märker ReplicaSet att det bara finns två faktiska repliker och skapar en ny.
Denna modell gör miljöer mer reproducerbara och återhämtning mer automatisk, men det innebär också att klustret är beroende av tydliga, disciplinerade objektdefinitioner. Arbetslaster som avviker från deklarerat tillstånd eller som beror på klustertillstånd utanför versionskontroll är svårare att driva och felsöka.