K8s
Jak działa
Klaster Kubernetes składa się z warstwy sterującej (control plane) oraz węzłów roboczych (nodes). Użytkownik zgłasza do serwera API deklaratywny opis pożądanego stanu (np. manifest Deployment określający liczbę replik). Serwer API zapisuje ten stan w rozproszonym magazynie klucz-wartość etcd. Scheduler przydziela pody do węzłów na podstawie zasobów i ograniczeń, a controller manager uruchamia pętle kontrolne, które porównują stan rzeczywisty z pożądanym i podejmują działania naprawcze. Na każdym węźle agent kubelet uruchamia i nadzoruje kontenery za pośrednictwem runtime kontenerów (zgodnego z CRI), a kube-proxy obsługuje reguły sieciowe i równoważenie ruchu do usług (Service).
Rozwiązany problem
Ręczne wdrażanie i utrzymywanie wielu kontenerów na flocie serwerów jest podatne na błędy i słabo skalowalne. Kubernetes rozwiązuje problem rozmieszczania (schedulingu) kontenerów na dostępnych węzłach, automatycznego restartu i zastępowania awarii, skalowania w odpowiedzi na obciążenie oraz spójnego, deklaratywnego zarządzania konfiguracją w środowiskach rozproszonych i wielochmurowych.
Komponenty
Centralny punkt dostępowy klastra, udostępniający REST API Kubernetes. Waliduje i przetwarza żądania oraz jest jedynym komponentem komunikującym się bezpośrednio z etcd.
Rozproszony, spójny magazyn klucz-wartość przechowujący cały stan i konfigurację klastra; stanowi źródło prawdy o pożądanym stanie.
Przydziela nowo utworzone pody do węzłów na podstawie dostępnych zasobów, ograniczeń powinowactwa (affinity), tolerancji i innych reguł.
Uruchamia pętle kontrolne (kontrolery), które obserwują stan klastra i doprowadzają stan rzeczywisty do pożądanego, np. utrzymując zadaną liczbę replik.
Agent działający na każdym węźle; przyjmuje specyfikacje podów z serwera API i zapewnia, że opisane kontenery są uruchomione i zdrowe.
Utrzymuje reguły sieciowe na węzłach, umożliwiając komunikację sieciową z podami oraz równoważenie ruchu do usług (Service).
Oprogramowanie odpowiedzialne za uruchamianie kontenerów (np. containerd, CRI-O), komunikujące się z kubeletem przez interfejs CRI.
Najmniejsza jednostka wdrożeniowa Kubernetes: jeden lub więcej współdzielących sieć i magazyn kontenerów, planowanych i uruchamianych razem.
Obiekt deklaratywnie zarządzający zestawem replik podów, obsługujący aktualizacje kroczące (rolling updates) i wycofywanie zmian (rollback).
Stabilna abstrakcja sieciowa (stały adres i nazwa DNS) zapewniająca dostęp i równoważenie ruchu do dynamicznie zmieniającego się zbioru podów.
Implementacja
Pody bez zdefiniowanych requests/limits mogą być źle rozplanowane i doprowadzić do wyczerpania zasobów węzła oraz eksmisji (eviction).
etcd przechowuje cały stan klastra; brak kopii zapasowych lub przeciążenie prowadzą do utraty danych lub niestabilności control plane.
Nadmiernie szerokie role RBAC, uprzywilejowane kontenery i brak NetworkPolicy zwiększają powierzchnię ataku klastra.
Ewolucja
6 czerwca 2014 Google ogłasza Kubernetes, projekt wywodzący się z doświadczeń z wewnętrznym systemem Borg.
Praca „Large-scale cluster management at Google with Borg" (EuroSys 2015) dokumentuje system, który zainspirował Kubernetes.
21 lipca 2015 ukazuje się Kubernetes 1.0; projekt zostaje technologią założycielską nowo utworzonej Cloud Native Computing Foundation (CNCF).
Hiperparametry (konfigurowalne osie)
Pożądana liczba identycznych instancji poda utrzymywanych przez Deployment/ReplicaSet.
Deklarowane zapotrzebowanie i górne granice CPU/pamięci dla kontenerów, wpływające na scheduling i stabilność węzłów.
Reguły automatycznej zmiany liczby replik w zależności od metryk (np. użycia CPU lub metryk własnych).
Sposób wdrażania nowych wersji (np. RollingUpdate vs Recreate) oraz parametry maxSurge/maxUnavailable.
Paradygmat wykonania
Kubernetes nie jest architekturą sieci neuronowej; pola paradygmatu wykonania opisują jego model sterowania (pętle kontrolne reagujące na stan), a nie przepływ obliczeń ML.
Scheduler kieruje pody do konkretnych węzłów, a kontrolery (pętle reconciliation) warunkowo podejmują działania naprawcze zależnie od różnicy między stanem pożądanym a rzeczywistym.
Wymagania sprzętowe
Kubernetes orkiestruje kontenery niezależnie od warstwy obliczeniowej; działa na CPU, a akceleratory (GPU/TPU) udostępnia węzłom przez wtyczki urządzeń (device plugins).