Jednostka 5 / 11

Kubernetes: manifest, hełm i orkiestracja oparta na sztucznej inteligencji

Zyski:

  • Umiejętność zrozumienia podstawowych obiektów (Pod, Deployment, Service, ConfigMap, Secret, Namespace) i deklaratywnej filozofii Kubernetes oraz tworzenia solidnych manifestów dla sztucznej inteligencji
  • Możliwość przygotowania manifestów do produkcji i zabezpieczenia ich za pomocą limitów zasobów, kontroli stanu (sond), stałych tagów obrazu i wąskiego zakresu RBAC
  • Możliwość sprawdzenia poprawnego kontekstu przed wykonaniem i zastosowania dyscypliny próbnej za pomocą próbnej pracy/różnicy

Łatwo jest uruchomić jeden kontener. Ale utworzenie systemu, który rozkłada setki kontenerów na dziesiątki serwerów, automatycznie uruchamia się ponownie, gdy jeden z nich ulegnie awarii, replikuje go, gdy obciążenie wzrasta i aktualizuje go bez przestojów? To orkiestracja, a standardowym narzędziem branżowym jest Kubernetes (w skrócie K8s) — platforma, która automatycznie wdraża, skaluje i zarządza kontenerami w klastrze. Kubernetes jest potężny, ale złożony: wszystko jest definiowane przez długie pliki YAML wrażliwe na wcięcia — zwane manifestami. To tutaj AI daje powiew świeżego powietrza; Przy odpowiednim kontekście szybko tworzy te manifesty i dekoduje ich tajemnicze błędy.

Jednak w Kubernetesie błędny manifest oznacza nieobsłużenie całej usługi, nieprawidłowe skalowanie lub pozostawienie luki w zabezpieczeniach. Twoim obowiązkiem jest zrozumienie i weryfikacja każdego manifestu generowanego przez sztuczną inteligencję — szczególnie przed zastosowaniem kubectl.

Podstawowe obiekty Kubernetes

Aby przeprowadzić audyt Kubernetesa, powinieneś znać główne pojęcia:

  • Pod: najmniejsza jednostka robocza; Zawiera jeden lub kilka pojemników. Ogólnie rzecz biorąc, kapsuła nie jest używana bezpośrednio, ale używane są obiekty nadrzędne, które nią zarządzają.
  • Wdrożenie: określa, ile kopii aplikacji będzie uruchomionych, jakiego obrazu będzie używać i w jaki sposób będzie aktualizowana. Jeśli Pod ulegnie awarii, automatycznie go odtworzy.
  • Usługa: zapewnia stały adres sieciowy i równoważenie obciążenia dla zasobników; Mimo że kapsuły przychodzą i odchodzą, adres dostępu się nie zmienia.
  • ConfigMap i Secret: przechowuje wartości konfiguracyjne i tajne informacje oddzielnie od Podów. ConfigMap dotyczy ustawień jawnych, Secret dotyczy wartości wrażliwych.
  • Przestrzeń nazw: obszar logicznie dzielący i izolujący zasoby (np. dev, prod).
  • Ingress: Zestaw reguł kierujący ruch HTTP ze świata zewnętrznego do usług w klastrze.

Helm to „menedżer pakietów” Kubernetesa: umożliwia szablonowanie powtarzających się manifestów (wykresów) i instalowanie ich z różnymi wartościami w różnych środowiskach za pomocą jednego polecenia. AI tworzy zarówno surowy manifest, jak i wykres Helma.

Dlaczego jest tak wiele obiektów? Ponieważ podstawowa filozofia Kubernetesa jest deklaratywna: definiujesz „jak chcesz, aby system ostatecznie wyglądał” (np. „zawsze miej uruchomione 3 kopie tej aplikacji”), podczas gdy Kubernetes stale przesuwa bieżący stan bliżej pożądanego stanu. Jeśli kapsuła umrze, tworzy nową; jeśli węzeł ulegnie awarii, obciążenie zostaje przeniesione do innego węzła. Dlatego manifesty nie są poleceniami „zrób”, ale receptami „niech tak będzie”. Uchwycenie tego rozróżnienia ma kluczowe znaczenie podczas czytania manifestów tworzonych przez sztuczną inteligencję: każda domena opisuje część pożądanego stanu systemu. Niewłaściwa domena oznacza, że ​​Kubernetes dąży do niewłaściwego celu — a cel ten jest dyskretnie i stale egzekwowany.

Wskazówka: w Kubernetesie najważniejszym bezpiecznym narzędziem do testowania jest kubectl Apply --dry-run=server -f file.yaml: pokazuje, czy serwer zaakceptuje i co zrobić bez faktycznego stosowania manifestu. Przed zastosowaniem manifestu do prod pamiętaj o uruchomieniu próbnego uruchomienia i kubectl diff.

Krok po kroku: Tworzenie manifestów za pomocą AI

  1. Opisz zastosowanie i potrzebę. Nazwa obrazu, port, liczba replik, limity zasobów (CPU/pamięć).
  2. Poproś o wdrożenie i usługę. Zwykle oba są wymagane razem.
  3. Oddzielna konfiguracja i sekret. Ustawienia na ConfigMap, wrażliwe wartości na Secret.
  4. Dodaj kontrole stanu. livenessProbe (czy działa) i ReadinessProbe (czy jest gotowy na ruch) są krytyczne.
  5. Ustaw limit zasobów. Bez żądań/ograniczeń Pod może wykorzystywać cały węzeł.
  6. Sprawdź za pomocą `--dry-run` i `diff`, a następnie zastosuj. Najpierw w testowej przestrzeni nazw.

Bezpieczeństwo: zagrożenia specyficzne dla Kubernetes

  1. Sekret nie jest tak naprawdę sekretem — to po prostu base64. Obiekt Kubernetes Secret base64 koduje wartości; To nie jest szyfrowanie, można je łatwo odszyfrować. Aby zapewnić prawdziwą prywatność, wymagane jest szyfrowanie itp. i zewnętrzny skarbiec (Vault, menedżer tajemnic w chmurze). Nigdy nie udostępniaj tajnych manifestów bezpośrednio Gitowi (istnieją na to rozwiązania, takie jak Sealed Secrets/External Secrets).
  2. Ustaw limit zasobów. Pod bez ograniczeń może spowodować awarię całego węzła z powodu wycieku pamięci.
  3. Uprawnienia minimalne (RBAC). Dzięki kontroli dostępu opartej na rolach każda usługa/użytkownik ma tylko takie uprawnienia, jakich potrzebuje. AI czasami daje dużego administratora klastra; zawęź to.
  4. Nie używaj tagu „najnowszego” obrazu. Nie wiesz, która wersja jest uruchomiona i nie możesz jej przywrócić.
Uwaga: usunięcie kubectl lub nieprawidłowe zastosowanie może zniszczyć aktywne wdrożenie. Przed uruchomieniem poleceń pamiętaj o sprawdzeniu, w której przestrzeni nazw się znajdujesz (kubectl config bieżący kontekst). Przypadkowa praca jest częstą katastrofą w kontekście produkcyjnym.

Surowy manifest a tabela Helm

kryterium

Surowy manifest YAML

Wykres steru

Instalacja

kubectl zastosuj -f

instalacja steru

Multimedia (programowanie/prod)

Kopiuj-wklej, podatne na błędy

Pojedynczy wykres, różne wartości.yaml

Wersja/przywrócenie

ręcznie

łatwe dzięki cofaniu steru

Krzywa uczenia się

niski

średni

kiedy

Małe, pojedyncze środowisko

Multimedialna, powtarzalna obsługa

trzy mini etui

Przypadek 1 — tajemnica awarii usługi. Pod ciągle uruchamiał się ponownie (CrashLoopBackOff). Zespół przekazał logi i manifest AI; Sztuczna inteligencja pokazała, że ​​Pod nigdy nie został uznany za „gotowy”, ponieważ ReadinessProbe patrzył na niewłaściwy port. Naprawili port, usługa ustabilizowała się w 10 minut. Ręczne ustanowienie tej relacji może zająć wiele godzin.

Przypadek 2 – nieustalanie limitów rozwiązało węzeł. Nie było żadnych ograniczeń we wdrożeniu; Wyciek pamięci spowodował rozdęcie kapsuły i awarię całego węzła, wyłączając także sąsiednie usługi. Po incydencie zmusili sztuczną inteligencję do powiedzenia „dodaj rozsądne żądania procesora/pamięci i ograniczenia do wszystkich wdrożeń” i uczynili to standardem. Jedna brakująca linia kosztuje wiele godzin przestojów.

Przypadek 3 — przechwycono duży RBAC. Podczas dochodzenia ustalono, że manifest ServiceAccount wygenerowany przez sztuczną inteligencję jest powiązany z rolą administratora klastra, co oznacza, że ​​usługa może zarządzać całym klastrem. Zespół zawęził uprawnienia do odczytu wyłącznie Podów w ich przestrzeni nazw. Zasada najmniejszych uprawnień zamknęła lukę w zabezpieczeniach.

Cztery szablony do kopiowania

1) Wdrożenie + Produkcja usług:

Napisz manifest wdrożenia i usługi dla Kubernetes. Aplikacja: [AD], obraz: [image: fix-version], port: [X], replika: [N]. Reguły: - Dodaj żądania i limity procesora/pamięci. - Zdefiniuj livenessProbe i ReadinessProbe. - Odczytaj konfigurację z ConfigMap, sekret z obiektu Secret; Nie osadzaj wartości w manifeście, użyj symboli zastępczych. - NIE używaj znacznika obrazu „:latest”. Podaj z opisem.

2) Oczywiste rozwiązywanie błędów:

Bieżący Pod jest w stanie [CrashLoopBackOff / Pending / ImagePullBackOff]. Zgodnie z następującym manifestem i wynikami polecenia „kubectl opisz”, wypisz możliwe przyczyny pierwotne w kolejności prawdopodobieństwa i dla każdej z nich wydaj polecenie weryfikacji. Manifest: [YAML] Opisz: [WYJŚCIE]

3) Kontrola bezpieczeństwa/integralności:

Sprawdź ten manifest Kubernetes: czy brakuje limitu zasobów, czy brakuje prawdopodobnie, czy istnieje tag :latest, czy istnieje zbyt szeroki zakres RBAC/pozwolenie, czy sekret jest osadzony w manifeście? Wyniki zapisz w kolejności ważności i z poprawką. Manifest: [YAML]

4) Konwersja na wykres steru:

Przekonwertuj następujące nieprzetworzone manifesty na wykres Helm do wielokrotnego użytku: które wartości powinny zostać przesłane do pliku wartości.yaml (obraz, replika, źródło, środowisko)? Pokaż strukturę wykresu i przykładowe wartości.yaml.Manifesty: [YAML]

Słaba zachęta/silna zachęta

Słabe: „Napisz Kubernetes YAML dla mojej aplikacji”.

Wynik: wdrożenie bez sondowania i bez ograniczeń ze znacznikiem :latest, osadzającym sekretną płaszczyznę; Niepewny i delikatny w prod.

Mocne: „Napisz Kubernetes Deployment + Service. Obraz myapp: 1.4.2, 3 repliki, 8080 portów. Procesor 100m-500m, pamięć 128Mi-512Mi dodaj żądania/limity. Umieść sondę żywotności dla /healthz, sondę gotowości dla /ready. Przeczytaj Sekret z obiektu Secret, nie osadzaj go w manifeście. Podaj z opisem.”

Różnica: druga wersja podpowiedzi podaje skalę, limity zasobów, kontrole stanu i tajną regułę; Wynik jest zbliżony do produkcyjnego i bezpieczny.

Typowe błędy

  • Nie ustawianie limitów zasobów. Pojedynczy Pod może zająć cały węzeł.
  • Brak dodania kontroli stanu (sondy). Kubernetes nie może wykryć uszkodzonego/niegotowego Poda.
  • Znacznik `:najnowszy`. Nie jest jasne, która wersja jest uruchomiona, nie można jej cofnąć.
  • Zatwierdzanie sekretu bezpośrednio do Gita. Base64 nie jest szyfrowaniem; każdy to rozwiązuje.
  • Uruchamianie poleceń w złym kontekście/przestrzeni nazw. Najczęstszy sposób awarii w prod.
  • pomijanie `--dry-run`/`diff`. Nie widząc, co się stanie przed wdrożeniem.

Podsumowując

Kubernetes to potężny, ale złożony orkiestrator, który automatycznie wdraża, skaluje i optymalizuje kontenery w klastrze; Wszystko jest definiowane przez manifest YAML, który Helm szablonuje. Sztuczna inteligencja szybko tworzy manifesty wdrożenia/usługi i wykresy Helm, rozwiązuje tajemnicze błędy — ale trzeba wyraźnie poprosić o limit zasobów, sprawdzenie stanu, niezmienny tag obrazu, wąskie RBAC i tajne reguły bezpieczeństwa. --dry-run, diff i poprawne sprawdzanie kontekstu to nawyki, które zapobiegają awariom prod.

Zadanie aplikacji

Niech sztuczna inteligencja wygeneruje manifest dla przykładowej aplikacji za pomocą szablonu „Wdrożenie + generowanie usługi”. Następnie: (1) Sprawdź limit zasobów, sondę, :latest i sekret za pomocą szablonu „Kontrola bezpieczeństwa/poczytalności”; (2) jeśli to możliwe, uruchom kubectl Apply --dry-run=server na klastrze testowym/minikube i przeczytaj wynik; (3) zanotuj dwa najważniejsze elementy dotyczące bezpieczeństwa/wytrzymałości, których Twoim zdaniem brakuje.

lista kontrolna

  • [ ] Do mojej prośby dodałem wersję obrazu, liczbę replik, limity portów i zasobów.
  • [ ] Dodałem do manifestu sondę żywotności i gotowości.
  • [ ] Naprawiono znacznik obrazu; Nie użyłem :najnowszego.
  • [ ] Sekret nie jest osadzony w manifeście; Użyłem tajnego obiektu/zewnętrznego skarbca.
  • [ ] Zawęziłem RBAC/uprawnienia do minimalnych uprawnień.
  • [ ] Przed zastosowaniem sprawdziłem, czy jestem we właściwym kontekście i czy wyświetla się wynik --dry-run/diff.