Jak działają wdrożenia platformy Kubernetes
Aplikacja do śledzenia dronów ma kilka składników, które są wdrażane oddzielnie od siebie. Twoim zadaniem jest skonfigurowanie wdrożeń dla tych składników w klastrze. W tym miejscu przyjrzymy się niektórym dostępnym opcjom wdrażania w celu wdrożenia tych składników.
Opcje wdrażania zasobników
Istnieje kilka opcji zarządzania wdrażaniem zasobników w klastrze Kubernetes w przypadku używania interfejsu kubectl
. Dostępne opcje:
- Szablony zasobników
- Kontrolery replikacji
- Zestawy replik
- Wdrożenia
Aby wdrożyć zasobnik lub zasobniki, można użyć dowolnej z tych czterech definicji typu obiektu Kubernetes. Te pliki używają kodu YAML do opisania zamierzonego stanu zasobnika lub zasobników do wdrożenia.
Czym jest szablon zasobnika?
Szablon zasobnika umożliwia zdefiniowanie konfiguracji zasobnika, który chcesz wdrożyć. Szablon zawiera informacje, takie jak nazwa obrazu kontenera i rejestr kontenerów używany do pobierania obrazów. Szablon zawiera również informacje o konfiguracji środowiska uruchomieniowego, takie jak porty do użycia. Szablony są definiowane za pomocą języka YAML w taki sam sposób jak podczas tworzenia plików platformy Docker.
Można użyć szablonów do ręcznego wdrożenia zasobników. Jednak ręcznie wdrożony zasobnik nie zostanie ponownie uruchomiony po awarii, usunięciu lub zatrzymaniu. Aby zarządzać cyklem życia zasobnika, należy utworzyć obiekt Kubernetes wyższego poziomu.
Co to jest kontroler replikacji?
Kontroler replikacji używa szablonów zasobników i definiuje określoną liczbę zasobników, które muszą zostać uruchomione. Kontroler pomaga uruchamiać wiele wystąpień tego samego zasobnika i zapewnia, że zasobniki są zawsze uruchomione w co najmniej jednym węźle w klastrze. Kontroler zastępuje zasobniki uruchomione w ten sposób nowymi zasobnikami, jeśli ulegną one awarii, zostaną usunięte lub zatrzymane.
Załóżmy na przykład, że wdrażasz witrynę internetową frontonu śledzenia dronów, a użytkownicy zaczynają uzyskiwać dostęp do witryny internetowej. Jeśli z jakiegoś powodu wszystkie zasobniki ulegną awarii, witryna będzie niedostępna dla użytkowników, chyba że uruchomisz nowe zasobniki. Kontroler replikacji pomaga upewnić się, że witryna internetowa jest zawsze dostępna.
Co to jest zestaw replik?
Zestaw replik zastępuje kontroler replikacji jako preferowany sposób wdrażania replik. Zestaw replik zawiera te same funkcje co kontroler replikacji, ale ma dodatkową opcję konfiguracji, aby uwzględnić wartość selektora.
Selektor umożliwia zestawowi replik zidentyfikowanie wszystkich uruchomionych w nim zasobników. Korzystając z tej funkcji, można zarządzać zasobnikami, które zostały oznaczone etykietą o takiej samej wartości co wartość selektora, ale nie zostały utworzone przy użyciu zestawu replik.
Co to jest wdrożenie?
Wdrożenie tworzy obiekt zarządzania o jeden poziom wyższy niż zestaw replik i umożliwia wdrażanie aktualizacji zasobników w klastrze i zarządzanie nimi.
Załóżmy, że masz pięć wystąpień aplikacji wdrożonych w klastrze. Istnieje pięć zasobników z uruchomioną wersją 1.0.0 aplikacji.
Jeśli zdecydujesz się ręcznie zaktualizować aplikację, możesz usunąć wszystkie zasobniki, a następnie uruchomić nowe zasobniki z uruchomioną wersją 2.0.0 aplikacji. Dzięki tej strategii twoja aplikacja napotyka przestoje.
Zamiast tego chcesz wykonać aktualizację stopniową, w której uruchamiasz zasobniki z nową wersją aplikacji przed usunięciem zasobników ze starszą wersją aplikacji. Aktualizacje stopniowe uruchamiają jeden zasobnik naraz zamiast usuwać wszystkie starsze zasobniki jednocześnie. Wdrożenia uwzględniają liczbę replik skonfigurowaną w sekcji informacji o zestawach replik. Utrzymuje liczbę zasobników określonych w zestawie replik, ponieważ zastępuje stare zasobniki nowymi zasobnikami.
Wdrożenia domyślnie stosują strategię aktualizacji stopniowej podczas aktualizowania zasobników. Można również użyć strategii ponownego tworzenia. Ta strategia kończy zasobniki przed uruchomieniem nowych zasobników.
Wdrożenia oferują również strategię wycofywania, którą można wykonać przy użyciu interfejsu kubectl
.
Wdrożenia korzystają z plików definicji opartych na języku YAML, które ułatwiają zarządzanie wdrożeniami. Należy pamiętać, że wdrożenia umożliwiają zastosowanie dowolnych zmian w klastrze. Można na przykład wdrażać nowe wersje aplikacji, aktualizować etykiety, uruchamiać inne repliki zasobników itd.
Interfejs kubectl
ma wygodną składnię do automatycznego tworzenia wdrożenia podczas używania polecenia kubectl run
w celu wdrożenia zasobnika. To polecenie tworzy wdrożenie z wymaganym zestawem replik i zasobnikami. Jednak to polecenie nie tworzy pliku definicji. Najlepszym rozwiązaniem jest zarządzanie wszystkimi wdrożeniami przy użyciu plików definicji wdrożenia i śledzenie zmian przy użyciu systemu kontroli wersji.
Uwagi dotyczące wdrażania
Platforma Kubernetes ma określone wymagania dotyczące konfigurowania sieci i magazynu dla klastra. Konfiguracja tych dwóch aspektów wpływa na decyzje dotyczące sposobu uwidaczniania aplikacji w sieci klastrów i przechowywania danych.
Na przykład każda z usług w aplikacji do śledzenia dronów ma określone wymagania dotyczące dostępu użytkowników, dostępu do sieci międzyprocesowej i magazynu danych. Teraz przyjrzyjmy się tym aspektom klastra Kubernetes i sposobom ich wpływu na wdrażanie aplikacji.
Sieć platformy Kubernetes
Załóżmy, że masz klaster z jedną płaszczyzną sterowania i dwoma węzłami. Gdy dodajesz węzły do klastra Kubernetes, do każdego węzła jest automatycznie przypisywany adres IP z zakresu wewnętrznej sieci prywatnej. Załóżmy na przykład, że zakres sieci lokalnej to 192.168.1.0/24.
Każdemu wdrożonemu zasobnikowi przypisuje się adres IP z puli adresów IP. Załóżmy na przykład, że konfiguracja używa zakresu sieci 10.32.0.0/12, jak pokazano na poniższej ilustracji.
Domyślnie te zasobniki i węzły nie mogą komunikować się ze sobą przy użyciu różnych zakresów adresów IP.
Aby jeszcze bardziej skomplikować tę kwestię, przypomnij sobie, że zasobniki są przejściowe. Adres IP zasobnika jest tymczasowy i nie można go użyć w celu ponownego nawiązania połączenia z nowo utworzonym zasobnikiem. Ta konfiguracja wpływa na sposób, w jaki aplikacja komunikuje się z jej składnikami wewnętrznymi i jak ty i usługi współdziałają z nią zewnętrznie.
W celu uproszczenia komunikacji platforma Kubernetes oczekuje, że skonfigurujesz sieć w taki sposób, aby:
- zasobniki mogły komunikować się między węzłami bez translatora adresów sieciowych (NAT),
- węzły mogły komunikować się ze wszystkimi zasobnikami i na odwrót bez translatora adresów sieciowych (NAT),
- agenci w węźle mogli komunikować się ze wszystkimi węzłami i zasobnikami.
Platforma Kubernetes oferuje kilka opcji sieciowych, które możesz zainstalować w celu skonfigurowania sieci. Przykładowe rozwiązania to Antrea, Cisco Application Centric Infrastructure (ACI), Cilium, Flannel, Kubenet, VMware NSX-T i Weave Net.
Dostawcy usług w chmurze mogą również udostępniać własne rozwiązania sieciowe. Na przykład usługa Azure Kubernetes Service (AKS) obsługuje sieciowy interfejs kontenera (CNI) usługi Azure Virtual Network oraz rozwiązania Kubenet, Flannel, Cilium i Antrea.
Usługi Kubernetes
Usługa Kubernetes to obiekt platformy Kubernetes, który zapewnia stabilną sieć dla zasobników. Usługa Kubernetes umożliwia komunikację między węzłami, zasobnikami i użytkownikami aplikacji (zarówno wewnętrznej, jak i zewnętrznej) w klastrze.
Platforma Kubernetes przypisuje usłudze adres IP podczas tworzenia, tak jak w przypadku węzła lub zasobnika. Te adresy są przypisywane z zakresu adresów IP klastra usług; na przykład 10.96.0.0/12. Usługa ma również przypisywaną nazwę DNS na podstawie nazwy usługi i portu IP.
W aplikacji do śledzenia dronów komunikacja sieciowa jest następująca:
Witryna internetowa i interfejs API RESTful są dostępne dla użytkowników spoza klastra.
Wewnątrzpamięciowa pamięć podręczna i usługi kolejkowania komunikatów są dostępne odpowiednio dla frontonu i interfejsu API RESTful, ale nie dla użytkowników zewnętrznych.
Kolejka komunikatów wymaga dostępu do usługi przetwarzania danych, ale nie do użytkowników zewnętrznych.
Baza danych NoSQL jest dostępna dla wewnątrzpamięciowej pamięci podręcznej i usługi przetwarzania danych, ale nie dla użytkowników zewnętrznych.
W celu obsłużenia tych scenariuszy możesz skonfigurować trzy typy usług, aby uwidocznić składniki aplikacji.
Usługa | Opis |
---|---|
ClusterIP | Adres przypisywany do usługi, który udostępnia usługę dla zestawu usług wewnątrz klastra. Może to być komunikacja między składnikami frontonu i zaplecza aplikacji. |
NodePort | Port węzła z zakresu od 30000 do 32767 przypisany do usługi przez płaszczyznę sterowania Platformy Kubernetes; na przykład 192.169.1.11 w klastrach01. Następnie należy skonfigurować usługę pod kątem portu docelowego w zasobniku, który chcesz uwidocznić. Na przykład skonfiguruj port 80 w zasobniku, na którym jest uruchomiony jeden z frontonów. Umożliwia to uzyskiwanie dostępu do frontonu za pośrednictwem adresu IP węzła i adresu portu. |
LoadBalancer | Moduł równoważenia obciążenia umożliwia rozkład obciążenia między węzłami, na których jest uruchomiona aplikacja, oraz uwidacznianie zasobnika na potrzeby dostępu w sieci publicznej. Moduły równoważenia obciążenia zazwyczaj konfiguruje się w przypadku korzystania z dostawców usług w chmurze. W takim przypadku ruch z zewnętrznego modułu równoważenia obciążenia jest kierowany do zasobników z uruchomioną aplikacją. |
W aplikacji do śledzenia dronów możesz zdecydować się na uwidocznienie witryny internetowej śledzenia i interfejsu API RESTful przy użyciu modułu LoadBalancer i usługi przetwarzania danych przy użyciu funkcji ClusterIP.
Jak grupować zasobniki
Zarządzanie zasobnikami według adresów IP jest niepraktyczne. Adresy IP zasobników zmieniają się w miarę ich tworzenia przez kontrolery, a liczba uruchomionych zasobników może być dowolna.
Obiekt usługi umożliwia namierzanie określonych zasobników w klastrze i zarządzanie nimi przy użyciu etykiet selektora. Etykieta selektora jest ustawiana w definicji usługi w taki sposób, aby była zgodna z etykietą zasobnika zdefiniowaną w pliku definicji zasobnika.
Załóżmy na przykład, że masz wiele uruchomionych zasobników. Tylko niektóre z tych zasobników to zasobniki frontonu. Chcesz ustawić usługę LoadBalancer, która jest przeznaczona tylko dla zasobników frontonu. Możesz zastosować swoją usługę, aby uwidocznić te zasobniki, odwołując się do etykiety zasobnika jako wartości selektora w pliku definicji usługi. Usługa grupuje tylko zasobniki zgodne z etykietą. Jeśli zasobnik zostanie usunięty i utworzony ponownie, nowy zasobnik zostanie automatycznie dodany do grupy usługi przy użyciu odpowiedniej etykiety.
Magazyn platformy Kubernetes
Platforma Kubernetes korzysta z tej samej koncepcji woluminu magazynu co platforma Docker. Woluminy platformy Docker są mniej zarządzane niż woluminy Kubernetes, ponieważ okresy istnienia woluminów platformy Docker nie są zarządzane. Okres istnienia woluminu platformy Kubernetes jest jawnym okresem istnienia, który jest zgodny z okresem istnienia zasobnika. To dopasowanie okresu istnienia oznacza, że wolumin istnieje dłużej, niż kontenery, które są uruchomione w zasobniku. Jeśli jednak zasobnik zostanie usunięty, wolumin także zostanie usunięty.
Platforma Kubernetes udostępnia opcje aprowizacji magazynu trwałego za pomocą elementu PersistentVolumes. Można także zażądać określonego magazynu dla zasobników przy użyciu elementu PersistentVolumeClaims.
W przypadku wdrażania składników aplikacji, które wymagają magazynu trwałego, takich jak kolejki komunikatów i bazy danych, należy wziąć pod uwagę obie te opcje.
Zagadnienia dotyczące integracji z chmurą
Platforma Kubernetes nie wymusza użycia konkretnego stosu technologii w aplikacji natywnej w chmurze. W środowisku chmury, takim jak platforma Azure, można użyć kilku usług spoza klastra Kubernetes.
Jak już wspomniano, platforma Kubernetes nie oferuje żadnej z następujących usług:
- Oprogramowanie pośredniczące
- Struktury przetwarzania danych
- Bazy danych
- Pamięci podręczne
- Systemy magazynu klastra
W tym rozwiązaniu do śledzenia dronów istnieją trzy usługi, które zapewniają funkcjonalność oprogramowania pośredniczącego: bazę danych NoSQL, usługę pamięci podręcznej w pamięci i kolejkę komunikatów. Możesz wybrać usługę MongoDB Atlas dla rozwiązania NoSQL, usługę Redis, aby zarządzać pamięcią podręczną w pamięci i, RabbitMQ lub Kafka w zależności od potrzeb związanych z kolejką komunikatów.
W przypadku korzystania ze środowiska chmury, takiego jak platforma Azure, najlepszym rozwiązaniem jest użycie usług spoza klastra Kubernetes. Ta decyzja może uprościć konfigurację klastra i zarządzanie nim. Możesz na przykład użyć usługi Azure cache for Redis na potrzeby wewnątrzpamięciowych usług buforowania, obsługi komunikatów usługi Azure Service Bus na potrzeby kolejki komunikatów i usługi Azure Cosmos DB na potrzeby bazy danych NoSQL.