Kubernetes

Otwartoźródłowy system do orkiestracji kontenerów, który automatyzuje wdrażanie, skalowanie i zarządzanie aplikacjami kontenerowymi. Często skracany jako K8s.

Kubernetes (w skrócie k8s — osiem liter między „k” a „s”, stąd ta dziwna nazwa) to otwartoźródłowy system do orkiestracji kontenerów. W praktyce: dajesz mu kontenery z aplikacją, a on dba o to, żeby działały — uruchamia je, restartuje gdy padną, dokłada kopie pod większy ruch i rozkłada je po wielu maszynach. Projekt powstał w Google na bazie wewnętrznego systemu Borg, a od 2015 roku rozwija go fundacja CNCF.

Do czego to służy

Jeden kontener (np. obraz Dockera) uruchomisz ręcznie. Ale gdy masz ich kilkadziesiąt na kilku serwerach, ręczne pilnowanie „co padło, co trzeba podnieść, gdzie jest miejsce” zamienia się w koszmar. Kubernetes robi to za Ciebie. Opisujesz stan docelowy — „chcę mieć 3 działające kopie tej aplikacji” — a klaster sam dąży do tego stanu (model deklaratywny). Gdy jeden węzeł umrze, kontenery zostaną przeniesione gdzie indziej. Gdy ruch wzrośnie, autoscaler dołoży repliki.

Podstawowa jednostka to Pod — opakowanie na jeden lub kilka ściśle powiązanych kontenerów. Podami zarządza zwykle Deployment, a stały adres i load balancing zapewnia Service. Całość konfigurujesz w plikach YAML.

Przykład z praktyki

Masz aplikację webową w obrazie kontenera. Tworzysz Deployment z replicas: 3 i wgrywasz go do klastra:

kubectl apply -f deployment.yaml

Sprawdzasz, co się dzieje:

kubectl get pods

Zobaczysz trzy Pody. Ubij jeden ręcznie (kubectl delete pod ...), odśwież listę — Kubernetes już postawił nowy w jego miejsce. Nikt nie dzwoni o 3 w nocy.

Częste mity i na co uważać

  • „Kubernetes zastępuje Dockera” — nie. Docker (czy inny runtime) buduje i uruchamia kontenery, Kubernetes nimi zarządza. To różne warstwy.
  • „To dla każdego projektu” — dla jednej małej strony k8s to armata na komara. Sensu nabiera przy wielu usługach, zmiennym ruchu i wymaganej wysokiej dostępności.
  • Zapomniane limity zasobów — jeśli nie ustawisz requests i limits, jeden rozpędzony Pod potrafi zagłodzić sąsiadów na węźle.

Pojęcia powiązane

Warto kojarzyć: konteneryzacja i Docker, Pod, Deployment, Service, kubectl, YAML, Helm (menedżer pakietów dla k8s), klaster i węzeł (node), CI/CD oraz chmurowe usługi zarządzane jak GKE, EKS czy AKS.