Co to jest Kubernetes?
Kubernetes to platforma do tak zwanej orkiestracji czyli zarządzenia zadaniami i aplikacjami w kontenerach. Ułatwia automatyzację, skalowanie i pracę z konfiguracją w postaci kodu.
Pozwala na działanie w środowiskach zbudowanych z wielu serwerach. Nazwa pochodzi z greki i oznacza sternika lub pilota.
Platformę tą dostajemy dzięki firmie Google. Często nazwa Kubernestes zapisywana jest jako K8S.

Jakie są główne korzyści z używania Kubernetesa?
- Skalowalność – kubenetes potrafi uruchamiać automatycznie kolejne zasoby, by obsłużyć większy ruch. Co więcej, potrafi też zmniejszyć ilość zasobów automatycznie, gdy ruch się zmniejszył.
- Wysoka dostępność – kubernetes daje możliwość nieprzerwanej dostępności aplikacji (bez downtime’u) dzięki wielu replikom tej samej aplikacji, często rozmieszczonej na wielu serwerach.
- Odporność na awarie – kubernetes potrafi sam namierzyć niedziałające/nieodpowiadające aplikacje i przywrócić ich działającą wersję.
- Ułatwia wdrażanie – potrafi balansować ruch na nowa wersje, a jeśli wystąpi problem, to wróci z ruchem na poprzednią działającą wersje aplikacji.
Kubernetes używa kontenerów Dockera do przechowywania aplikacji. Choć potrafi też pracować z innymi mniej popularnymi rozwiązaniami do konteneryzacji.
Jak zbudowany jest Kubernetes?
W Kubernetesie można wyróżnić dwie warstwy: warstwa zarządzająca (master node) i warstwa robocza (worker node).
Obie warstwy bazują na pracujących w nich kontenerach. Przy czym warstwa zaradzająca zawiera kontenery z narzędziami niezbędnymi do funkcjonowania i sterowania całym Kubernetesem, natomiast warstwa robocza zawiera kontenery już z aplikacjami użytkownika.
W warstwie zarządzającej występują takie elementy jak:
- API server (kube-apiserver) – umożliwia komunikacje użytkownika z Kubernetesem po przez graficzny dashboard, API lub linie poleceń (CLI). Jest to generalnie frontend Kubernetsa.
- Controler Mangager (kube-controller-manager) odpowiada na uruchamianie kontrolerów i pilnuje ich stanu (zdrowia).
- Scheduler (kube-scheduler) – odpowiada za śledzenie tworzenia nowych podów i przypisuje im nody, na których powinny zostać odpalone.
- etcd – magazyn (klucz-wartość) do przechowywania stanu klastra oraz jego konfiguracji.
Natomiast warstwa workerów zawiera:
- Pody – pod jest to podstawowa jednostką. To taki pojemnik na aplikacje. Zawiera jeden kontener bądź więcej – w zależności od tego z ilu kontenerów składa sie dana aplikacja, a dokładniej jedna instancja aplikacji).
Każdy pod ma swój własny adres IP. A komunikacja wewnątrz poda odbywa sie po adresach localhostowych 127.0.0.1. Co ważne, w konfiguracji nie odnosimy się do kontenerów tylko do podów. Skalowanie Kubernetesa polega na dokładaniu lub odejmowaniu całych podów.
Definicja poda zawiera się w pliku w formacie yaml. Nowy pod z poliku tworzymy poleceniemkubectl apply -f pod.yml
- Agenta kublet, który odpowiada za komunikacje i uruchamianie kontenerów w podzie. Jest na każdym nodzie.
Nody w Kubernetesie to takie Workery w Docker Swarm.
Oczywiście należy mieć kilka nodów by redundacja miała sens. Grupa nodów to klaster.
Choć mamy też wersje Kubernetsa do nauki składające się z jednego noda –
Konfiguracja w Kubernetes jest deklaratywna to znaczy że opisujemy stan jaki chcemy aby zaistniał. Obiekty w kubernetsie opisane są w YAMLu.
Skalowanie polega na zwiększeniu replik kontenerów z aplikacją tak aby rozłożyć ruch na ich większa ilość (loadbalancing) tym samym zwiększając wydajność i dostępność.
Namespace – przestrzeń nazw, służy do grupowa i wyizolowania zasobów. Na przykład ze względu na projekt. Domysly namespace to default.
Co to jest minikube?
Minikube jest to narzędzie do tworzenia lokalnego klastra na maszynie (zawiera mastera i workera). Idealny do testów i nauki K8s. Do pobrania stąd https://github.com/kubernetes/minikube/releases
Podstawowe polecenia w Kubernetes
kubectl get pods
– zwraca liste podów w domyślnym namespace
kubectl describe pod <NazwaPoda>
– wyświetla wszystkie informacje na temat poda
kubectl get nodes
– wyświetla listę nodów
kubectl version
– zwraca wersje Kubernetesa
kubectl run nginx --image=nginx
tworzy pod z kontenerem nginx na podstawie obrazu nginx z dockerhub