Czy przygotowanie klastra Kubernetes jest łatwe i wygodne? Ogłaszanie operatora dodatku

Czy przygotowanie klastra Kubernetes jest łatwe i wygodne? Ogłaszanie operatora dodatku

Później operator powłoki przedstawiamy jego starszego brata - operator dodatków. Jest to projekt Open Source, który służy do instalowania komponentów systemu w klastrze Kubernetes, które można nazwać dodatkami.

Po co w ogóle jakieś dodatki?

Nie jest tajemnicą, że Kubernetes nie jest gotowym produktem typu „wszystko w jednym” i do zbudowania „dorosłego” klastra potrzebne będą różne dodatki. Addon-operator pomoże Ci zainstalować, skonfigurować i aktualizować te dodatki.

Zapotrzebowanie na dodatkowe komponenty w klastrze ujawniono w raport kolegia driusza. Krótko mówiąc, sytuacja z Kubernetesem w tej chwili jest taka, że ​​w przypadku prostej instalacji „pobaw się” można obejść się z gotowymi komponentami, w przypadku programistów i testerów można dodać Ingress, ale w przypadku pełnej instalacji, o której mowa możesz powiedzieć „twoja produkcja jest gotowa”, musisz dodać kilkanaście różnych dodatków: coś do monitorowania, coś do logowania, nie zapomnij o ingresie i menedżerze certyfikatów, wybierz grupy węzłów, dodaj zasady sieciowe, sezon z ustawieniami automatycznego skalowania sysctl i pod...

Czy przygotowanie klastra Kubernetes jest łatwe i wygodne? Ogłaszanie operatora dodatku

Jaka jest specyfika współpracy z nimi?

Jak pokazuje praktyka, sprawa nie ogranicza się do jednej instalacji. Aby wygodnie pracować z klastrem, dodatki będą musiały zostać zaktualizowane, wyłączone (usunięte z klastra), a niektóre z nich będziesz chciał przetestować przed zainstalowaniem ich w klastrze produkcyjnym.

Może więc Ansible będzie tutaj wystarczające? Może. Ale Ogólnie rzecz biorąc, pełnoprawne dodatki nie żyją bez ustawień. Ustawienia te mogą się różnić w zależności od wariantu klastra (aws, gce, lazur, bare-metal, do, ...). Niektórych ustawień nie można określić z wyprzedzeniem; należy je uzyskać z klastra. Klaster nie jest statyczny: w przypadku niektórych ustawień konieczne będzie monitorowanie zmian. A tutaj Ansible już brakuje: potrzebny jest program, który żyje w klastrze, czyli tzw. Operator Kubernetesa.

Ci, którzy próbowali tego w pracy operator powłoki, powiedzą, że zadania instalowania i aktualizowania dodatków oraz ustawień monitorowania można całkowicie rozwiązać za pomocą haki dla operatora powłoki. Możesz napisać skrypt, który wykona warunek kubectl apply i monitoruj np. ConfigMap, gdzie będą zapisywane ustawienia. To jest mniej więcej to, co zostało zaimplementowane w addon-operator.

Jak to jest zorganizowane w operatorze dodatków?

Tworząc nowe rozwiązanie kierowaliśmy się następującymi zasadami:

  • Instalator dodatku musi obsługiwać szablonowanie i konfiguracja deklaratywna. Nie tworzymy magicznych skryptów instalujących dodatki. Operator dodatków używa Helma do instalowania dodatków. Aby zainstalować, należy utworzyć wykres i wybrać wartości, które będą używane do konfiguracji.
  • Ustawienia mogą być wygenerować podczas instalacji, oni mogą być pobierz z klastraLub otrzymywać aktualizacje, monitorowanie zasobów klastra. Operacje te można zrealizować za pomocą haków.
  • Ustawienia mogą być przechowywać w klastrze. Aby przechowywać ustawienia w klastrze, tworzony jest operator ConfigMap/addon, a operator Addon monitoruje zmiany w tej ConfigMap. Operator Addon daje hookom dostęp do ustawień przy użyciu prostych konwencji.
  • Dodawanie zależy od ustawień. Jeśli ustawienia uległy zmianie, operator Addona rozwija wykres Helm z nowymi wartościami. Nazwaliśmy kombinację wykresu Helma, wartości dla niego i podpinamy moduł (więcej szczegółów poniżej).
  • Inscenizacja. Nie ma magicznych skryptów uwalniających. Mechanizm aktualizacji jest podobny do zwykłej aplikacji - zbieraj dodatki i operatory dodatków na obraz, oznaczaj je i wdrażaj.
  • Kontrola wyników. Operator dodatku może zapewnić metryki dla Prometheusa.

Co to jest dopełnienie w operatorze dodatku?

Za dodatek można uznać wszystko, co dodaje nowe funkcje do klastra. Na przykład instalacja Ingress jest doskonałym przykładem dodatku. Może to być dowolny operator lub kontroler z własnym CRD: prometheus-operator, cert-manager, kube-controller-manager itp. Lub coś małego, ale łatwiejszego w użyciu - na przykład tajna kopiarka, która kopiuje sekrety rejestru do nowych przestrzeni nazw lub sysctl tuner, który konfiguruje parametry sysctl na nowych węzłach.

Aby zaimplementować dodatki, operator Addon udostępnia kilka koncepcji:

  • Wykres steru służy do instalowania w klastrze różnego oprogramowania - na przykład Prometheus, Grafana, nginx-ingress. Jeśli wymagany komponent ma wykres Helma, wówczas instalacja go za pomocą operatora Addon będzie bardzo prosta.
  • Przechowywanie wartości. Wykresy Helm zazwyczaj mają wiele różnych ustawień, które mogą zmieniać się w czasie. Addon-operator obsługuje przechowywanie tych ustawień i może monitorować ich zmiany w celu ponownej instalacji wykresu Helm z nowymi wartościami.
  • Haczyki to pliki wykonywalne, które operator Addon uruchamia na zdarzeniach i które uzyskują dostęp do magazynu wartości. Hook może monitorować zmiany w klastrze i aktualizować wartości w magazynie wartości. Te. Za pomocą hooków można dokonywać wykrywania w celu zbierania wartości z klastra przy uruchomieniu lub zgodnie z harmonogramem, można też dokonywać wykrywania ciągłego, zbierając wartości z klastra na podstawie zmian w klastrze.
  • Moduł to połączenie wykresu Helma, magazynu wartości i haków. Moduły można włączyć lub wyłączyć. Wyłączenie modułu oznacza usunięcie wszystkich wydań wykresów Helma. Moduły mogą włączać się dynamicznie, na przykład jeśli wszystkie potrzebne moduły są włączone lub jeśli wykrywanie znalazło niezbędne parametry w hookach - odbywa się to za pomocą pomocniczego skryptu.
  • Globalne haki. Są to hooki „same w sobie”, nie są zawarte w modułach i mają dostęp do globalnego magazynu wartości, którego wartości są dostępne dla wszystkich hooków w modułach.

Jak te części współpracują ze sobą? Spójrzmy na zdjęcie z dokumentacji:

Czy przygotowanie klastra Kubernetes jest łatwe i wygodne? Ogłaszanie operatora dodatku

Istnieją dwa scenariusze pracy:

  1. Globalny hak jest wyzwalany przez zdarzenie — na przykład zmianę zasobu w klastrze. Ten hak przetwarza zmiany i zapisuje nowe wartości do globalnego magazynu wartości. Operator dodatku zauważa, że ​​globalna pamięć uległa zmianie i uruchamia wszystkie moduły. Każdy moduł za pomocą swoich hooków określa, czy należy go włączyć i aktualizuje swój magazyn wartości. Jeśli moduł jest włączony, operator Addon rozpoczyna instalację wykresu Helm. W tym przypadku wykres Helma ma dostęp do wartości z pamięci modułu i z pamięci globalnej.
  2. Drugi scenariusz jest prostszy: zaczep modułu jest wyzwalany przez zdarzenie i zmienia wartości w magazynie wartości modułu. Operator dodatku zauważa to i uruchamia wykres Helma ze zaktualizowanymi wartościami.

Dodatek można zaimplementować jako pojedynczy hak lub jako jeden wykres Helma lub nawet jako kilka zależnych modułów - zależy to od złożoności komponentu instalowanego w klastrze oraz od pożądanego poziomu elastyczności konfiguracji. Na przykład w repozytorium (/przykłady) istnieje dodatek sysctl-tuner, który jest zaimplementowany zarówno jako prosty moduł z hookiem i wykresem Helm, jak i wykorzystujący magazyn wartości, co umożliwia dodanie ustawień poprzez edycję ConfigMap.

Dostarczanie aktualizacji

Kilka słów o organizowaniu aktualizacji komponentów, które instaluje operator Addon.

Aby uruchomić Addon-operator w klastrze, potrzebujesz zbuduj wizerunek za pomocą dodatków w postaci plików wykresów haka i Helma, dodaj plik binarny addon-operator i wszystko co potrzebne do haczyków: bash, kubectl, jq, python itp. Następnie ten obraz można wdrożyć w klastrze jako zwykłą aplikację i najprawdopodobniej będziesz chciał zorganizować taki lub inny schemat tagowania. Jeśli klastrów jest niewiele, odpowiednie może być to samo podejście, co w przypadku aplikacji: nowa wersja, nowa wersja, przejdź do wszystkich klastrów i popraw obraz Podów. Jednak w przypadku rolloutu na znaczną liczbę klastrów bardziej odpowiednia była dla nas koncepcja samodzielnej aktualizacji z kanału.

Oto jak to robimy:

  • Kanał to zasadniczo identyfikator, który można ustawić na dowolną wartość (na przykład dev/stage/ea/stable).
  • Nazwa kanału to znacznik obrazu. Gdy zajdzie potrzeba wprowadzenia aktualizacji na kanale, tworzony jest nowy obraz i oznaczany nazwą kanału.
  • Kiedy w rejestrze pojawi się nowy obraz, operator Addon zostanie zrestartowany i uruchomiony z nowym obrazem.

Nie jest to najlepsza praktyka, jak napisano Dokumentacja Kubernetesa. Nie zaleca się tego robić, ale mówimy o tym zwykła aplikacja działająca w tym samym klastrze. W przypadku Addona-operatora aplikacja to wiele Wdrożeń rozproszonych po klastrach, a samoaktualizowanie bardzo pomaga i ułatwia życie.

Kanały pomagają i w testach: jeśli istnieje klaster pomocniczy, możesz go skonfigurować dla kanału stage i przesyłaj do niego aktualizacje przed udostępnieniem ich na kanałach ea и stable. Jeśli z klastrem na kanale ea wystąpił błąd, możesz go przełączyć na stable, podczas gdy problem z tym klastrem jest badany. Jeżeli klaster zostanie wyłączony z aktywnego wsparcia, przełącza się na swój „zamrożony” kanał – np. freeze-2019-03-20.

Oprócz aktualizacji haków i wykresów Helm, możesz potrzebować aktualizacja i komponent strony trzeciej. Na przykład zauważyłeś błąd w warunkowym eksporterze węzłów i nawet wymyśliłeś, jak go załatać. Następnie otworzyłeś PR i czekasz, aż nowa wersja przejdzie przez wszystkie klastry i zwiększy wersję obrazu. Aby nie czekać w nieskończoność, możesz zbudować eksportera węzłów i przełączyć się na niego przed zaakceptowaniem żądania PR.

Ogólnie rzecz biorąc, można to zrobić bez operatora Addon, ale z operatorem Addon moduł do instalowania eksportera węzłów będzie widoczny w jednym repozytorium, plik Dockerfile do budowania obrazu może być przechowywany właśnie tam, staje się to łatwiejsze dla wszystkich uczestników proces pozwalający zrozumieć, co się dzieje... A jeśli istnieje kilka klastrów, łatwiej jest zarówno przetestować swój PR, jak i wdrożyć nową wersję!

U nas taka organizacja aktualizacji komponentów sprawdza się pomyślnie, ale przecież można zastosować każdy inny odpowiedni schemat w tym przypadku operator Addon jest prostym plikiem binarnym.

wniosek

Zasady zaimplementowane w Addon-operator pozwalają zbudować przejrzysty proces tworzenia, testowania, instalowania i aktualizacji dodatków w klastrze, podobny do procesów rozwoju zwykłych aplikacji.

Dodatki dla Addon-operatora w formacie modułowym (mapa steru + haki) mogą być udostępniane publicznie. My, firma Flant, planujemy publikować nasze opracowania w postaci takich dodatków w okresie letnim. Dołącz do rozwoju w GitHub (operator powłoki, operator dodatków), spróbuj stworzyć własny dodatek na podstawie przykłady и dokumentacja, czekaj na wieści na temat Habré i na naszej Kanał Youtube!

PS

Przeczytaj także na naszym blogu:

Źródło: www.habr.com

Dodaj komentarz