Jak połączyć klastry Kubernetes w różnych centrach danych
Witamy w naszej serii Kubernetes Szybki start. To stała rubryka z najciekawszymi pytaniami, jakie otrzymujemy online i na naszych szkoleniach. Odpowiedzi ekspertów Kubernetes.
Dzisiejszym ekspertem jest Daniel Polenchik (Daniele Polenc). Daniel pracuje jako instruktor i programista w firmie Dowiedz się8s.
Dość często infrastruktura jest replikowana i dystrybuowana w różnych regionach, zwłaszcza w kontrolowanych środowiskach.
Jeśli jeden region jest niedostępny, ruch jest przekierowywany do innego, aby uniknąć przerw.
Dzięki Kubernetes możesz zastosować podobną strategię i dystrybuować obciążenia w różnych regionach.
Na zespół, region, środowisko lub kombinację tych elementów można utworzyć jeden lub więcej klastrów.
Twoje klastry mogą być hostowane w różnych chmurach i lokalnie.
Ale jak zaplanować infrastrukturę pod kątem takiego rozmieszczenia geograficznego?
Czy potrzebujesz utworzyć jeden duży klaster dla kilku środowisk chmurowych w ramach jednej sieci?
A może masz wiele małych klastrów i szukasz sposobu na ich kontrolowanie i synchronizację?
Jeden klaster przywódczy
Utworzenie jednego klastra w ramach jednej sieci nie jest takie proste.
Wyobraź sobie, że masz wypadek i łączność między segmentami klastra zostaje utracona.
Jeśli masz jeden serwer główny, połowa zasobów nie będzie mogła otrzymać nowych poleceń, ponieważ nie będzie mogła skontaktować się z serwerem głównym.
A jednocześnie masz stare tablice routingu (kube-proxy nie można pobrać nowych) i żadnych dodatkowych podów (kubelet nie może żądać aktualizacji).
Co gorsza, jeśli Kubernetes nie widzi węzła, oznacza go jako osierocony i dystrybuuje brakujące pody do istniejących węzłów.
W rezultacie masz dwa razy więcej strąków.
Jeśli utworzysz jeden serwer główny dla każdego regionu, wystąpią problemy z algorytmem konsensusu w bazie danych etcd. (około. wyd. — Tak naprawdę baza danych etcd nie musi koniecznie znajdować się na serwerach głównych. Można go uruchomić na osobnej grupie serwerów w tym samym regionie. To prawda, jednocześnie uzyskując punkt awarii klastra. Ale szybko.)
itp. używa algorytm tratwyaby wynegocjować wartość przed zapisaniem jej na dysku.
Oznacza to, że większość instancji musi osiągnąć konsensus, zanim będzie można zapisać stan w itd.
Jeśli opóźnienie pomiędzy instancjami ettd drastycznie wzrasta, jak ma to miejsce w przypadku trzech instancji ettd w różnych regionach, wynegocjowanie wartości i zapisanie jej na dysku zajmuje dużo czasu.
Znajduje to odzwierciedlenie w kontrolerach Kubernetes.
Menedżer kontrolera potrzebuje więcej czasu, aby dowiedzieć się o zmianie i zapisać odpowiedź do bazy danych.
A ponieważ nie ma jednego kontrolera, ale kilka, następuje reakcja łańcuchowa i cały klaster zaczyna działać bardzo powoli.
Obecnie nie ma dobrych przykładów dużej sieci dla pojedynczego klastra.
Zasadniczo społeczność programistów i grupa klastrów SIG próbują znaleźć sposób na orkiestrację klastrów w taki sam sposób, w jaki Kubernetes organizuje kontenery.
Po raz pierwszy próbowaliśmy zarządzać kolekcją klastrów jako pojedynczym obiektem za pomocą narzędzia kube Federation.
Początek był dobry, ale ostatecznie federacja kube nigdy nie zyskała popularności, ponieważ nie wspierała wszystkich zasobów.
Obsługuje stowarzyszone dostawy i usługi, ale nie na przykład StatefulSets.
Ponadto konfiguracja federacji była przekazywana w formie adnotacji i nie była elastyczna.
Wyobraź sobie, jak możesz opisać partycjonowanie replik dla każdego klastra w federacji, używając samych adnotacji.
To był kompletny bałagan.
Klaster SIG wykonał dużo pracy po Kubefed v1 i zdecydował się podejść do problemu z innej perspektywy.
Zamiast adnotacji postanowiono wypuścić kontroler instalowany na klastrach. Można go dostosować za pomocą niestandardowych definicji zasobów (CRD).
Dla każdego zasobu, który będzie częścią federacji, masz niestandardową definicję CRD z trzema sekcjami:
standardowa definicja zasobu, na przykład wdrożenie;
sekcja placement, gdzie definiujesz sposób dystrybucji zasobu w federacji;
sekcja override, gdzie dla konkretnego zasobu możesz zastąpić wagę i parametry z miejsca docelowego.
Oto przykład łączonego wyświetlania z sekcjami umieszczania i zastępowania.
Zamiast jednak wymyślać nowy sposób interakcji z klastrem i zawijania zasobów w niestandardowe definicje, harmonogram wieloklastrowy jest osadzony w standardowym cyklu życia Kubernetes i przechwytuje wszystkie wywołania tworzące pody.
Każdy stworzony kapsuła jest natychmiast zastępowany manekinem.
wykorzystuje harmonogram wieloklastrowy webhooki do modyfikacji dostępuaby przechwycić połączenie i utworzyć bezczynną fikcyjną kapsułę.
Oryginalna kapsuła przechodzi kolejny cykl planowania, w którym po przeprowadzeniu ankiety w całej federacji podejmowana jest decyzja o rozmieszczeniu.
Na koniec kapsuła jest dostarczana do klastra docelowego.
W rezultacie masz dodatkową kapsułę, która nic nie robi, po prostu zajmuje miejsce.
Zaletą jest to, że nie trzeba pisać nowych zasobów, aby połączyć zasoby.
Każdy zasób tworzący pod jest automatycznie gotowy do połączenia.
To interesujące, ponieważ nagle masz zapasy rozproszone w kilku regionach i nawet tego nie zauważyłeś. Jest to jednak dość ryzykowne, gdyż wszystko tutaj opiera się na magii.
Jednak podczas gdy nadawca stara się głównie złagodzić wpływ dostaw, harmonogram wieloklastrowy obsługuje bardziej ogólne zadania i być może lepiej nadaje się do zadań wsadowych.
Nie ma zaawansowanego mechanizmu stopniowego dostarczania.
Więcej informacji na temat harmonogramu wieloklastrowego można znaleźć pod adresem oficjalna strona repozytorium.
Jeśli chcesz przeczytać o harmonogramie wieloklastrowym w działaniu, Admiralicja to zrobiła ciekawy przypadek użycia z Argo — przepływy pracy, zdarzenia, CI i CD Kubernetes.
Inne narzędzia i rozwiązania
Łączenie i zarządzanie wieloma klastrami jest zadaniem złożonym i nie ma uniwersalnego rozwiązania.
Jeśli chcesz bliżej zgłębić ten temat, oto kilka zasobów:
Submariner od Ranchera to narzędzie łączące sieci nakładkowe różnych klastrów Kubernetes.
Oferuje Cilium, wtyczkę interfejsu sieciowego kontenera funkcja siatki klastrów, co umożliwia łączenie kilku klastrów
To wszystko na dzisiaj
Dziękuję za przeczytanie do końca!
Jeśli wiesz, jak efektywniej łączyć wiele klastrów, Powiedz nam.
Dodamy Twoją metodę do linków.
Specjalne podziękowania dla Chrisa Nesbitta-Smitha (Chrisa Nesbitta-Smitha) i Vincenta de Sme (Vincenta De Smeta) (inżynier niezawodności w swatmobile.io) za przeczytanie artykułu i podzielenie się przydatnymi informacjami na temat działania federacji.