Pierwsze kroki z Kubernetes: wprowadzenie dla początkujących

Kubernetes, powszechnie nazywany K8s, to cieszące się ogromną popularnością oprogramowanie open source, które automatyzuje proces zarządzania kontenerami.

Zgodnie z wynikami dorocznego badania Cloud Native Computing Foundation (CNCF), aż 96% firm wykorzystuje Kubernetes lub aktywnie rozważa jego wdrożenie. Szacuje się, że z Kubernetes korzysta około 5,8 miliona programistów na całym świecie, co stanowi około 31% wszystkich specjalistów backendowych.

Jego popularność wynika z faktu, że umożliwia on lepsze skalowanie, zwiększa dostępność i skraca czas potrzebny na wdrożenie. Chociaż wielu programistów zaczyna swoją przygodę z kontenerami, używając Dockera (narzędzia opartego na interfejsie wiersza poleceń, które służy do interakcji z pojedynczymi kontenerami), Kubernetes oferuje abstrakcje wyższego poziomu. Pozwala to definiować aplikacje i ich infrastrukturę za pomocą schematów, nad którymi można wspólnie pracować.

Ten artykuł jest skierowany do osób, które dopiero rozpoczynają swoją przygodę z Kubernetes. Jego celem jest przeprowadzenie Cię przez podstawy i podzielenie się wiedzą, która pomoże Ci w efektywnym rozpoczęciu pracy. Dowiesz się, jak Kubernetes może pomóc programistom w rozwoju cyfrowych produktów.

Czym jest Kubernetes i dlaczego jest potrzebny?

Kubernetes to otwarty mechanizm orkiestracji, czyli framework, który służy do automatyzacji procesu wdrażania, skalowania i zarządzania aplikacjami w kontenerach. Jego zadaniem jest zapewnienie przewidywalności i wysokiej dostępności aplikacji.

Wyobraźmy sobie aplikację umieszczoną w kontenerze. Aby sprostać potrzebom użytkowników, konieczne jest uruchomienie kilku takich kontenerów. Pojawia się jednak problem, gdy musimy nimi zarządzać. Kontenery nie muszą znajdować się na tej samej maszynie, co dodatkowo komplikuje sytuację. W jaki sposób można ten problem rozwiązać?

Kubernetes oferuje skuteczne rozwiązanie, które pozwala bezproblemowo zarządzać tymi wszystkimi procesami. Chociaż można go porównać do silnika kontenerowego, takiego jak Docker, Kubernetes jest koordynatorem kontenerów. Jako początkujący programista nie musisz się martwić o to, jak dokładnie działa orkiestracja w Kubernetes. Prawdopodobnie nie będziesz samodzielnie konfigurować klastra Kubernetes dla swojej aplikacji; o tym opowiemy w dalszej części.

Jednak będziesz wchodzić w interakcję z klastrami utworzonymi przez Twój zespół ds. infrastruktury. Zrozumienie obiektów, z którymi będziesz pracować, jest niezwykle istotne. Zanim jednak do tego przejdziesz, warto poznać architekturę Kubernetes, by zrozumieć, jak to wszystko działa.

Funkcje Kubernetesa

Kubernetes oferuje szereg funkcji, które zapewniają szerokie możliwości w zakresie uruchamiania kontenerów i powiązanej infrastruktury. Oto kilka z nich:

  • Automatyzacja wdrożeń, skalowania i wycofywania zmian – Kubernetes automatyzuje proces tworzenia określonej liczby replik, rozdziela je na odpowiednie zasoby sprzętowe i restartuje kontenery, gdy węzeł ulegnie awarii. Możesz błyskawicznie skalować liczbę replik w zależności od zapotrzebowania, np. w przypadku wzrostu wykorzystania procesora.
  • Wykrywanie usług, równoważenie obciążenia i routing – Kubernetes oferuje zaawansowane rozwiązania sieciowe, w tym wewnętrzne wykrywanie usług i udostępnianie kontenerów publicznie.
  • Aplikacje stanowe i bezstanowe – początkowo Kubernetes skupiał się głównie na kontenerach bezstanowych. Wraz z rozwojem technologii, teraz obsługuje wbudowane obiekty, które reprezentują aplikacje stanowe. W praktyce oznacza to, że każda aplikacja może działać w Kubernetes.
  • Zarządzanie pamięcią masową – niezależnie od tego, czy korzystasz z lokalnego systemu plików, udostępnionego dysku sieciowego, czy chmury, Kubernetes zapewnia trwałą pamięć masową dla aplikacji w kontenerach. Abstrakcja pozwala na definiowanie wymagań dotyczących pamięci masowej niezależnie od infrastruktury bazowej. W tym celu Kubernetes wykorzystuje koncepcje takie jak Persistent Volume (PV), Persistent Volume Claim (PVC), Storage Classes i wtyczki woluminów.
  • Stan deklaratywny – Kubernetes używa plików YAML (Yet Ain’t Markup Language), zwanych manifestami obiektów, do określania pożądanego stanu klastra. Manifesty definiują konfigurację klastra, w tym między innymi żądane instancje aplikacji, zasady sieciowe i inne ustawienia. Po zastosowaniu manifestu, Kubernetes automatycznie obsługuje wszystkie przejścia między stanami, eliminując potrzebę pisania skryptów do tego celu.
  • Wiele środowisk pracy – Kubernetes nie jest ograniczony do używania w chmurze czy na stacji roboczej programisty. Dostępnych jest wiele dystrybucji, które dopasowują się do konkretnych potrzeb. Najwięksi dostawcy usług chmurowych, tacy jak Amazon Web Services, Google Cloud i Microsoft Azure, oferują zarządzane usługi Kubernetes. Dostępne są również dystrybucje do użytku lokalnego, takie jak Minikube i K3s.
  • Rozszerzalność – Kubernetes jest bardzo elastyczny i oferuje możliwość rozszerzenia jego funkcjonalności za pomocą dodatków. Możesz tworzyć własne typy obiektów, operatorów i kontrolerów, aby dostosować platformę do swoich unikalnych potrzeb.
  • Architektura Kubernetes

    Architektura Kubernetes składa się z węzła głównego (master node) i węzłów roboczych (worker nodes). Węzeł główny zarządza klastrem, podczas gdy węzły robocze uruchamiają aplikacje zgodnie z wytycznymi węzła głównego.

    źródło: kubernetes.io

    Oto szczegółowy opis poszczególnych elementów:

    Węzeł główny

    Węzeł główny zarządza stanem klastra i decyduje o działaniach poszczególnych węzłów roboczych. Do skonfigurowania węzła głównego wymagane jest kilka procesów:

  • Serwer API
    Jest to centrum komunikacji klastra. Służy jako brama, przez którą wszystkie komponenty klastra wymieniają informacje. Udostępnia API Kubernetes. Pełni dwie główne role. Po pierwsze, jest punktem wejścia, który umożliwia użytkownikom interakcję z klastrem, np. poprzez wysyłanie żądań za pomocą narzędzia Kubectl. Po drugie, uwierzytelnia i weryfikuje żądania, dzięki czemu tylko autoryzowani użytkownicy mogą wprowadzać zmiany w klastrze.
  • Planista
    Planista przydziela aplikacje, czyli obiekty obciążenia Kubernetes, do konkretnych węzłów roboczych. Na podstawie wymagań dotyczących zasobów, program planujący umieszcza pody (najmniejszą jednostkę wdrożenia w Kubernetes) w odpowiednich węzłach.
  • Menedżer kontrolera
    Menedżer kontrolera monitoruje stan klastra, reagując na awarie węzłów i dążąc do utrzymania pożądanej liczby podów. Wykrywa zmiany, np. sytuacje, gdy pod ulegnie awarii, i dąży do przywrócenia stanu początkowego. Jeśli pod przypadkowo przestanie działać, menedżer kontrolera prosi planistę o uruchomienie nowego poda w zastępstwie, a kubelet uruchamia nowy pod w wybranym węźle.
  • etcd
    To rozproszony magazyn typu klucz-wartość, w którym przechowywana jest konfiguracja klastra. Wszystkie zmiany w klastrze są tutaj zapisywane. Pozwala to na tworzenie kopii zapasowych klastra poprzez zapisywanie jego stanu. Należy jednak pamiętać, że nie są tutaj przechowywane dane aplikacji, a jedynie informacje o stanie klastra.
  • Węzły robocze

    W każdym węźle roboczym instalowane są trzy procesy, które umożliwiają Kubernetes interakcję z nim i uruchamianie na nim podów. Są to:

  • Kubelet
    Jest to podstawowa usługa Kubernetes, która uruchamia kontener w warstwie wykonawczej. Gdyby jej nie było, Kubernetes byłby tylko interfejsem API REST obsługiwanym przez magazyn klucz-wartość. Kubelet zajmuje się uruchamianiem kontenerów, które są odizolowane od siebie i od systemu operacyjnego hosta. Pozwala to na oddzielne zarządzanie poszczególnymi aplikacjami od siebie i od infrastruktury. Kubelet wchodzi w interakcję z węzłem i kontenerem. Pobiera pliki konfiguracyjne i uruchamia pody za pomocą środowiska wykonawczego kontenera.
  • Środowisko wykonawcze kontenera
    Ta sekcja zajmuje się zarządzaniem kontenerami. Możesz użyć Dockera, rkt lub containerd, aby zrozumieć, jak działają kontenery.
  • Kube-proxy
    Kube-proxy zapewnia warstwę abstrakcji dla grup węzłów, wdrażając mechanizmy równoważenia obciążenia. Wszystkie węzły korzystają z Kube-proxy, aby zapewnić wirtualny adres IP dla klientów, którzy chcą uzyskać dostęp do dynamicznie tworzonych podów. Umożliwia to równoważenie obciążenia przy minimalnym obciążeniu wydajności.
  • Jak działa konteneryzacja

    Konteneryzacja polega na wirtualizacji wszystkich niezbędnych elementów aplikacji w jedną całość. Pod kontenerem znajduje się zbiór bibliotek, plików binarnych i konfiguracji potrzebnych do działania aplikacji. Nie obejmują one jednak jądra systemu operacyjnego ani zwirtualizowanego sprzętu.

    Środowisko wykonawcze kontenera działa „na wierzchu”, określając zasoby kontenera. Ponieważ kontenery zawierają tylko podstawowe komponenty i zależności aplikacji, są znacznie lżejsze i szybsze w porównaniu do tradycyjnych maszyn wirtualnych.

    Przeczytaj również: Kontenery a maszyny wirtualne: różnice i podobieństwa

    Jak zainstalować i skonfigurować Kubernetes

    W tej części przejdziemy od teorii do praktyki i omówimy instalację Kubernetes w systemie Windows. Jest wiele sposobów na instalację w Windows; możesz skorzystać z wiersza poleceń lub interfejsu graficznego. Ważne, aby Twój sprzęt spełniał następujące wymagania:

    Wymagane jest posiadanie węzła głównego z co najmniej 2 GB pamięci RAM i 700 MB dla węzła roboczego. Dodatkowe wymagania to włączenie Hyper-V, zainstalowanie Docker Desktop, unikalny adres MAC i unikalny identyfikator UUID produktu dla każdego węzła. Oto krok po kroku, jak zainstalować Kubernetes.

    Instalacja i konfiguracja Hyper-V

    Hyper-V to wbudowane w Windows oprogramowanie do wirtualizacji. Pozwala na zarządzanie maszynami wirtualnymi za pomocą interfejsu graficznego lub wiersza poleceń. Aby włączyć Hyper-V, wykonaj następujące kroki:

  • Otwórz Panel sterowania.
  • W lewym panelu kliknij „Programy”.
  • W sekcji „Programy i funkcje” kliknij „Włącz lub wyłącz funkcje systemu Windows”.
  • Zaznacz opcje „Hyper-V” i „Hypervisor dla systemu Windows”.
  • Po zaznaczeniu kliknij „OK”; urządzenie zostanie uruchomione ponownie, aby aktywować nowe ustawienia.
  • Po ponownym uruchomieniu komputera możesz zweryfikować poprawność instalacji, wprowadzając następujące polecenie w Power Shell:

    Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V

    Sprawdź, czy w polu „Stan” widnieje informacja „Włączony”.

    Instalacja Dockera

    Jak już wiesz, Kubernetes to narzędzie do orkiestracji kontenerów, które bazuje na kontenerach. Docker jest tutaj dobrym wyborem. Kubernetes komunikuje się z Dockerem i zarządza nim na poziomie przedsiębiorstwa. Pobierz Docker dla Windows. Docker Desktop jest preferowany, ponieważ upraszcza tworzenie, wdrażanie i uruchamianie aplikacji w kontenerach Docker.

    Jest to również najszybszy sposób na tworzenie aplikacji platformy Docker w systemie Windows, dzięki wykorzystaniu funkcji Hyper-V i sieci. Po udanej instalacji Docker będzie dostępny w każdym terminalu, o ile jest uruchomiony. Szczegółowy przewodnik instalacji znajdziesz w oficjalnej dokumentacji Dockera. Jeśli po instalacji napotkasz problemy, takie jak brak ikony na pasku zadań, spróbuj ponownie uruchomić komputer.

    Instalacja Kubernetesa

    Interfejs graficzny Docker umożliwia konfigurację ustawień, instalację i włączenie Kubernetes. Aby zainstalować Kubernetes, wykonaj następujące kroki:

  • Kliknij prawym przyciskiem myszy ikonę Dockera w zasobniku systemowym i wybierz „Ustawienia”.
  • W panelu ustawień wybierz „Kubernetes” i kliknij „Zastosuj”.
  • Docker zainstaluje dodatkowe pakiety i zależności. Proces ten może potrwać od 5 do 10 minut, w zależności od prędkości Twojego łącza internetowego. Po zakończeniu, możesz sprawdzić czy wszystko działa prawidłowo, używając aplikacji Docker.

    Ponieważ aplikacje Kubernetes można wdrażać za pomocą wiersza poleceń, możesz chcieć zainstalować panel kontrolny K8s, który nie jest instalowany domyślnie. Aby to zrobić, wykonaj następujące kroki:

  • Pobierz konfigurację YAML.
  • Wdróż aplikację za pomocą polecenia: kubectl apply -f .\recommended.yaml.
  • Sprawdź poprawność instalacji, używając polecenia: kubectl.exe get -f .\recommended.yaml.txt.
  • Aby uzyskać dostęp do panelu kontrolnego, uruchom następujące polecenie w Power Shell:

  • Uruchom ten kod: ((kubectl -n kube-system describe secret default | Select-String "token:") -split "+")[1]
    • Skopiuj wygenerowany token i uruchom serwer proxy kubectl.
  • W przeglądarce otwórz ten link.
  • Kliknij „Token” i wklej swój token.
  • Zaloguj się.
  • Jeśli wszystko poszło zgodnie z planem, na ekranie pojawi się panel kontrolny K8s. Teraz możesz zarządzać swoimi aplikacjami, korzystając z interfejsu graficznego, bez konieczności używania wiersza poleceń.

    Przeczytaj również: Jak zainstalować Kubernetes na Ubuntu 18

    Jak tworzyć i zarządzać klastrem Kubernetes

    Jeśli udało Ci się dotrzeć do tego momentu, powinieneś mieć już zainstalowanego Kubernetes na swoim komputerze. Teraz wykonaj następujące kroki, aby stworzyć i zacząć zarządzać klastrem:

  • Skonfiguruj sieć – musisz skonfigurować sieć, która umożliwi komunikację między węzłami klastra.
  • Skonfiguruj uwierzytelnianie klastra – stwórz mechanizmy uwierzytelniania i autoryzacji dostępu do klastra.
  • Skonfiguruj główne komponenty – w tym serwer API, planistę i menedżera kontrolera.
  • Dołącz węzły robocze – podłącz węzły robocze do klastra za pomocą plików konfiguracyjnych dostarczonych podczas procesu instalacji klastra.
  • Wdróż dodatki – zainstaluj dodatkowe funkcjonalności, które rozszerzają możliwości klastra.
  • Zarządzaj obciążeniami – możesz już wdrożyć swoją aplikację.
  • To tylko krótki opis procesu tworzenia klastra, który w praktyce wymaga wykonania wielu kroków i wprowadzenia wielu poleceń. Tutaj znajdziesz oficjalny przewodnik, który szczegółowo opisuje proces tworzenia klastra przed wdrożeniem.

    Jak wdrożyć swoją pierwszą aplikację przy użyciu Kubernetes

    Podczas pracy z Kubernetes najczęściej używanym poleceniem jest kubectl, które umożliwia wykonywanie różnych akcji, takich jak tworzenie lub usuwanie określonych zasobów.

    Jeśli utkniesz, możesz użyć opcji --help po konkretnym poleceniu, aby uzyskać więcej informacji. Na przykład, kubectl get nodes --help. Aby wdrożyć swoją pierwszą aplikację w Kubernetes, użyj polecenia kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1.

    Podsumowanie

    Ten artykuł był wstępem do technologii Kubernetes. Poznałeś korzyści, funkcje i architekturę Kubernetes. Dzięki temu przewodnikowi powinieneś mieć solidne podstawy, aby rozpocząć pracę z Kubernetes. Wyjaśniliśmy, jak działa ta technologia „pod maską”.

    Zrozumienie całej technologii Kubernetes na początku może wydawać się trudne, ale ten artykuł miał na celu pomóc Ci w łagodnym wejściu w świat Kubernetes. Aby zyskać pewność w korzystaniu z tej technologii, będziesz potrzebował trochę praktyki, dlatego zachęcamy Cię do zapoznania się z oficjalną dokumentacją Kubernetes. Im więcej praktyki, tym szybciej staniesz się ekspertem od Kubernetes.

    Zachęcamy do zapoznania się z samouczkami Kubernetes dla początkujących, aby w pełni opanować tę technologię.