Zestaw narzędzi AI Cloud Engineering: inżynieria platform w GKE z użyciem Gemini

1. Wprowadzenie

Rozwiązywanie problemów z uszkodzonymi wdrożeniami Kubernetes to powszechna i często frustrująca część codziennej pracy inżyniera platformy. Zwykle wymaga to wielu ręcznych czynności: przeglądania logów, uruchamiania poleceń kubectl describe i sprawdzania plików YAML w celu znalezienia pojedynczego błędu lub nieprawidłowej konfiguracji.

Ogólne chatboty AI mogą pomóc w wyjaśnianiu pojęć lub pisaniu podstawowego kodu, ale działają w oderwaniu od kontekstu. Nie mają one żadnych informacji o konkretnej bazie kodu ani o bieżącym stanie klastra, co prowadzi do konieczności ręcznego kopiowania i wklejania oraz przełączania kontekstu.

W tym module dowiesz się, jak zniwelować tę różnicę, korzystając z narzędzi AI o coraz większym poziomie kontekstu. Użyjesz interfejsu wiersza poleceń Gemini i protokołu Model Context Protocol (MCP), aby rozwiązać problem z uszkodzoną aplikacją w GKE. Po ukończeniu tego laboratorium dowiesz się, jak używać AI, która zna Twoje pliki i infrastrukturę, aby szybciej rozwiązywać złożone problemy, oraz jak przekształcać te przepływy pracy w wielokrotnego użytku „umiejętności” dla Twojego zespołu.

Podstawowe pojęcia

  • Inżynieria platformy: inżynieria platformy to praktyka tworzenia i utrzymywania wewnętrznych narzędzi i przepływów pracy, które umożliwiają programistom zarządzanie własną infrastrukturą bez konieczności bycia ekspertami w zakresie każdej bazowej usługi w chmurze. Celem jest zmniejszenie tarć technicznych przy zachowaniu spójności i bezpieczeństwa. Tworząc standardową ścieżkę postępowania, zespoły platformy zapewniają, że programiści aplikacji mogą bezpiecznie i szybko wdrażać aplikacje, a zespół platformy zachowuje kontrolę nad zarządzaniem i kosztami.
  • Interfejs wiersza poleceń Gemini: interfejs wiersza poleceń, który umożliwia interakcję z modelami Gemini bezpośrednio z poziomu terminala. W przeciwieństwie do standardowego czatbota internetowego interfejs wiersza poleceń został zaprojektowany do działania w środowisku programistycznym, co ułatwia integrację AI z dotychczasowymi przepływami pracy opartymi na powłoce. Umożliwia przekazywanie danych wyjściowych z innych poleceń bezpośrednio do modelu i wykonywanie instrukcji bez opuszczania terminala.
  • Model Context Protocol (MCP): MCP to otwarty standard, który umożliwia modelowi AI łączenie się z określonymi narzędziami lub źródłami danych. Bez MCP model AI zna tylko to, na czym został wytrenowany, i nie widzi Twoich konkretnych zasobów. Dzięki serwerowi GKE MCP interfejs wiersza poleceń Gemini może aktywnie wysyłać zapytania do interfejsu API projektu Google Cloud, sprawdzać stan klastrów i wykonywać polecenia w Twoim imieniu. Działa on jako pomost między silnikiem wnioskowania modelu a rzeczywistym interfejsem GKE API.
  • Umiejętności agenta: umiejętności to pakiety instrukcji, skryptów i zasobów, które rozszerzają możliwości agenta AI w zakresie specjalistycznych zadań. Umożliwiają one kodyfikowanie standardów organizacji i automatyzowanie złożonych przepływów pracy.

Cele modułu

W tym module:

  1. Sprawdź, jak rozwija się kontekst: zobacz, jak zwiększenie kontekstu poprawia rozwiązywanie problemów przez AI.
  2. Ręczne rozwiązywanie problemów a rozwiązywanie problemów wspomagane przez AI: porównaj trudność ręcznego debugowania z przepływami pracy wspomaganymi przez AI.
  3. Debugowanie w pełnym kontekście: używaj interfejsu wiersza poleceń Gemini z serwerem MCP GKE do debugowania aplikacji z pełną świadomością infrastruktury.
  4. Rozszerzanie możliwości: dowiedz się, jak pisać własne umiejętności, aby automatyzować przepływy pracy.

Uwaga dotycząca danych wyjściowych LLM

Ze względu na charakter tego modułu i sposób działania LLM uzyskane dane wyjściowe będą prawdopodobnie inne niż pokazane w przykładach. Jest to prawidłowe działanie generatywnej AI. Skup się na zrozumieniu kroków i uzasadnienia podanego przez model, a nie na odtworzeniu dokładnego tekstu lub formatowania w przykładach.

2. Konfigurowanie projektu

Zanim rozpoczniesz laboratorium, przygotuj środowisko. Otwórz Cloud Shell, wybierz projekt i uruchom skrypty konfiguracji. Zaczynajmy!

Otwieranie Cloud Shell

W tym laboratorium użyj Cloud Shell, środowiska terminalowego w przeglądarce udostępnianego przez Google Cloud. Jest ono wstępnie skonfigurowane i zawiera wszystkie potrzebne narzędzia, w tym Google Cloud CLI (gcloud), kubectl i interfejs wiersza poleceń Gemini, dzięki czemu nie musisz instalować ich na komputerze lokalnym.

  1. Otwórz konsolę Google Cloud.
  2. W prawym górnym rogu konsoli kliknij przycisk Aktywuj Cloud Shell (wygląda jak wiersz poleceń terminala >_).
  3. U dołu okna przeglądarki otworzy się sesja terminala. Jeśli pojawi się taka prośba, kliknij Dalej.

Wybierz projekt

W terminalu Cloud Shell upewnij się, że pracujesz w odpowiednim projekcie.

  1. Wybierz istniejący projekt lub utwórz nowy specjalnie na potrzeby tego laboratorium w konsoli.
  2. Zanotuj identyfikator projektu. Ustaw projekt w bieżącej powłoce, uruchamiając to polecenie: gcloud config set project [YOUR_PROJECT_ID]

Konfiguracja laboratorium

Teraz uruchom skrypty konfiguracji, aby przygotować środowisko i wprowadzić błędy do laboratorium.

  1. Sklonuj repozytorium:
    👉💻 Uruchom te polecenia, aby sklonować tylko katalog modułu:
    git clone --depth 1 --filter=blob:none --sparse https://github.com/GoogleCloudPlatform/devrel-demos ~/devrel-demos
    cd ~/devrel-demos
    git sparse-checkout set codelabs/ai-toolkit-lab-1
    
  2. Przejdź do katalogu laboratorium:
    👉💻 Uruchom:
    cd ~/devrel-demos/codelabs/ai-toolkit-lab-1/
    
  3. Ustaw zmienne środowiskowe:
    👉💻 Uruchom te polecenia, aby ustawić projekt i region:
    export PROJECT_ID=$(gcloud config get-value project)
    export REGION=us-central1
    
  4. Uruchom skrypt konfiguracji:
    ten skrypt włącza wymienione poniżej interfejsy API, tworzy klaster Autopilot w GKE i zapewnia zainstalowanie wymaganych narzędzi.
    👉💻 Uruchom skrypt z katalogu głównego:
    ./setup.sh
    
    Uwaga: tworzenie klastra może potrwać 5–10 minut.
  5. Zainicjuj stan uszkodzenia:
    aby zasymulować sytuację, w której współpracownicy zostawili Ci uszkodzone środowisko, uruchom skrypt break.sh. Skopiuje on uszkodzone manifesty do aktywnego katalogu bazy kodu.
    👉💻 Uruchom skrypt:
    ./break.sh
    
  6. Przygotuj się do ćwiczeń w module:
    aby zapobiec oszukiwaniu przez AI (widzeniu rozwiązań), przejdź do katalogu cymbal-bank na potrzeby pozostałej części modułu.
    👉💻 Uruchom:
    cd ~/devrel-demos/codelabs/ai-toolkit-lab-1/cymbal-bank
    

Włączone interfejsy API

Skrypt konfiguracji włącza kilka interfejsów Google Cloud API. Oto co robią:

  • container.googleapis.com::interfejs Google Kubernetes Engine API. Jest on wymagany w przypadku wszystkich operacji na poziomie klastra.
  • generativelanguage.googleapis.com::interfejs API, który umożliwia interfejsowi wiersza poleceń Gemini komunikację z modelami Gemini.
  • cloudresourcemanager.googleapis.com::wymagane do sprawdzania metadanych na poziomie projektu i zarządzania uprawnieniami.
  • logging.googleapis.com::niezbędna do rozwiązywania problemów, ponieważ umożliwia pobieranie i analizowanie logów z kontenerów.

3. Etap 0. Ręczne rozwiązywanie problemów (bez AI)

Teraz, gdy jesteś w katalogu cymbal-bank, spróbujmy ręcznie znaleźć błędy. To „trudny sposób”. Najpierw zapoznaj się z wersją podstawową, a potem pozwól AI wykonać za Ciebie ciężką pracę. Ręczne rozwiązywanie problemów polega na używaniu standardowych narzędzi, takich jak kubectl, do sprawdzania stanu klastra, pobierania logów i przeglądania plików YAML w celu wykrywania niespójności. Często jest to powolne, żmudne i wymaga specjalistycznej wiedzy, aby połączyć ze sobą wszystkie elementy. Stanowi to doskonały punkt odniesienia dla narzędzi AI, których będziesz używać później.

  1. Spróbuj wdrożyć: sprawdźmy, co Kubernetes sądzi o tych plikach manifestu.
    👉💻 Uruchom to polecenie, aby zastosować pliki manifestu:
    kubectl apply -f kubernetes-manifests/
    
    Uruchomienie podów może potrwać kilka sekund. Możesz sprawdzić, czy są aktywne, używając polecenia „watch kubectl get pods”. Gdy będą gotowe, naciśnij Ctrl+C, aby zakończyć polecenie watch.Na liście zobaczysz 2 pody, które nie działają:
    • Pod frontend wyświetla „CreateContainerConfigError”. Ten typ błędu zwykle oznacza, że kontener ma problem z wczytaniem wymaganej konfiguracji. Zastanów się, jakich zasobów zewnętrznych może potrzebować kontener do uruchomienia – czy są jakieś zmienne środowiskowe, obiekty tajne lub pliki ConfigMap, które mogą być nieprawidłowo skonfigurowane lub których może brakować? Aby znaleźć konkretną przyczynę problemu, sprawdź konfigurację urządzenia.
    • Pod userservice jest w stanie „ImagePullBackOff”. Zazwyczaj oznacza to, że klaster nie może pobrać obrazu kontenera, którego miał użyć. Sprawdź szczegóły prośby o obraz: czy nazwa i tag obrazu są prawidłowe? Czy w rejestrze mogą występować problemy z uprawnieniami? Sprawdź, skąd pochodzi obraz, aby dowiedzieć się, dlaczego żądanie nie powiodło się.
  2. Sprawdź uszkodzenia: użyj standardowych poleceń Kubernetes, aby sprawdzić, co nie działa.
    • 👉💻 Sprawdź stan i nazwy podów:
      kubectl get pods
      
      • Obserwacja: widzisz pody w ImagePullBackOff, CrashLoopBackOff, Pending lub CreateContainerConfigError.
      • Uwaga: stan Running nie musi oznaczać, że pod działa prawidłowo. Może na przykład brakować w nim wystarczającej liczby sond stanu (aktywności/gotowości), co powoduje, że jest oznaczony jako działający, nawet jeśli aplikacja w nim zawarta nie działa. Dzienniki mogą zawierać błędy, mimo że pod wydaje się działać. Łącznie jest 11 różnych błędów do naprawienia.
    • 👉💻 Opisz pod, który nie działa, aby zobaczyć zdarzenia (zastąp [POD_NAME] rzeczywistą nazwą poda):
      kubectl describe pod [POD_NAME]
      
    • 👉💻 Sprawdź logi poda, w którym występuje błąd, aby zobaczyć błędy aplikacji:
      kubectl logs [POD_NAME]
      

Zrzut ekranu przedstawiający dane wyjściowe polecenia kubectl get pods

  1. Praca detektywistyczna: otwórz pliki manifestu w kubernetes-manifests/ za pomocą edytora Cloud Shell lub cat w terminalu. Spróbuj powiązać błędy widoczne w dziennikach i zdarzeniach z konfiguracją w plikach YAML.Wyzwanie: spróbuj ręcznie naprawić TYLKO JEDEN błąd. Zwróć uwagę, że musisz przełączać się między plikami, aby poznać resztę łańcucha błędów.

4. Faza 1. Zadawanie pytań w internecie (interfejs internetowy Gemini)

Ręczne rozwiązywanie problemów jest powolne, więc spróbujmy użyć asystenta AI. Aplikacja internetowa Gemini to zaawansowany interfejs czatu do zwykłych obciążeń. Doskonale sprawdza się w wyjaśnianiu pojęć i generowaniu fragmentów kodu. Działa jednak w zerowym kontekście Twojego konkretnego środowiska. Nie może wyświetlać Twoich plików, sprawdzać klastra ani uruchamiać poleceń. Musisz ręcznie kopiować i wklejać komunikaty o błędach oraz zawartość plików.

Zrzut ekranu przedstawiający interfejs internetowy Gemini

  1. Otwórz Gemini: otwórz gemini.google.com w nowej karcie. Musisz zalogować się na swoje konto Google.
  2. Poproś o pomoc w przypadku konkretnego błędu: załóżmy, że na urządzeniu userservice widzisz błąd ImagePullBackOff.
    👉💬 Wpisz ten prompt w interfejsie internetowym Gemini:
    My Kubernetes deployment for 'userservice' is failing with ImagePullBackOff. Here is the image name: us-central1-docker.pkg.dev/bank-of-anthos-ci/bank-of-anthos/user-service:v0.6.9. What is wrong?
  3. Odpowiedź AI: Gemini podaje listę typowych przyczyn:
    • Obraz nie istnieje.
    • Nie masz uprawnień do jego pobrania.
    • Wystąpił błąd.
    Sugeruje sprawdzenie uprawnień rejestru lub IAM. Nie może jednak wiedzieć, że nazwa obrazu to userservice (bez łącznika), dopóki nie zobaczy Twojego projektu.

Głównym problemem jest to, że Gemini nie ma wglądu w Twoje środowisko lokalne. Aby uzyskać potrzebny kontekst, musisz podać go ręcznie (poprzez promptowanie i kopiowanie tekstu), co jest czasochłonne i podatne na błędy.

5. Etap 2. Potęga terminala (interfejs wiersza poleceń Gemini)

Teraz przejdź do terminala, korzystając z interfejsu wiersza poleceń Gemini. Interfejs wiersza poleceń Gemini udostępnia możliwości modeli Gemini bezpośrednio w terminalu. Interfejs wiersza poleceń działa w miejscu, w którym pracujesz. Odczytuje lokalne pliki, akceptuje dane wejściowe przesyłane potokowo, a nawet wykonuje w Twoim imieniu polecenia powłoki (za Twoją zgodą). Dzięki temu jest niezwykle przydatny do integrowania AI z przepływami pracy bez przełączania kontekstu. Więcej informacji i zaawansowane zastosowania znajdziesz w oficjalnej dokumentacji interfejsu wiersza poleceń Gemini.

Uwaga: interfejs wiersza poleceń Antigravity został już oficjalnie udostępniony i jest następcą interfejsu wiersza poleceń Gemini. W tym module nadal będziemy korzystać z interfejsu wiersza poleceń Gemini. Więcej informacji o Antigravity CLI znajdziesz w oficjalnej dokumentacji Antigravity CLI.

Kontekst i widoczność

Zanim przejdziesz do instrukcji, pamiętaj, że widoczność interfejsu wiersza poleceń Gemini w Twoim projekcie zależy od tego, gdzie go uruchomisz. Model może wyświetlać pliki i foldery w bieżącym katalogu roboczym. Jeśli uruchomisz go w katalogu głównym projektu, będzie miał dostęp do wszystkich plików w tym projekcie. Jeśli uruchomisz go z podkatalogu, widok będzie ograniczony do tego podkatalogu i jego elementów podrzędnych. Zanim poprosisz model o analizę lub modyfikację plików, zawsze upewnij się, że jesteś w odpowiednim katalogu.

Uruchamianie interfejsu wiersza poleceń Gemini

Cloud Shell domyślnie zawiera interfejs wiersza poleceń Gemini. Wystarczy go uruchomić, aby zacząć korzystać z plików lokalnych.

  1. Przejdź do katalogu Cymbal Bank:
    👉💻 Uruchom to polecenie, aby sprawdzić, czy jesteś we właściwym katalogu:
    cd ~/devrel-demos/codelabs/ai-toolkit-lab-1/cymbal-bank
    
  2. Uruchom interfejs wiersza poleceń Gemini:
    👉💻 Aby uruchomić interfejs wiersza poleceń Gemini, wykonaj to polecenie:
    gemini
    

Zrzut ekranu przedstawiający interfejs wiersza poleceń Gemini

Korzystanie z interfejsu wiersza poleceń Gemini

Wiesz tylko, gdzie znaleźć kod tej aplikacji i że nie działa ona prawidłowo. Dowiedz się więcej i zobacz, jak Gemini może Ci pomóc w naprawie aplikacji. Najpierw sprawdź, czy potrafi analizować kontekst, zadając pytanie o pliki aplikacji, które powinna widzieć.

  1. Poznaj bazę kodu: zapytaj Gemini o wyjaśnienie, czym jest ta aplikacja i co robi.
    👉💬 Wpisz w interfejsie wiersza poleceń Gemini ten prompt:
    What is this application and what does it do?
    Interfejs wiersza poleceń Gemini odczytuje pliki w bieżącym katalogu i przedstawia ogólny opis projektu.
  2. Spróbuj znaleźć problem w bazie kodu: ponieważ interfejs wiersza poleceń Gemini widzi Twoje pliki, poproś go o znalezienie niezgodności.
    👉💬 Wpisz w interfejsie wiersza poleceń Gemini ten prompt:
    The contacts service pod is running, but I can't reach the service. Review kubernetes-manifests/contacts.yaml and check for common issues
    Interfejs wiersza poleceń Gemini odczytuje pliki i wykrywa niezgodność między app: contacts-backendapp: contacts. To ogromna przewaga nad poprzednimi etapami.
  3. Poproś o naprawienie:
    👉💬 Wpisz ten prompt w interfejsie wiersza poleceń Gemini:
    Fix the label mismatch in contacts.yaml so the service matches the deployment.
    Interfejs wiersza poleceń Gemini wyświetli poprawiony kod YAML lub nawet zastosuje zmianę, jeśli zatwierdzisz polecenie.
  4. Ograniczenie: chociaż widzi pliki, nadal nie wie, co faktycznie działa w klastrze. Jeśli pod ulegnie awarii z powodu błędu środowiska wykonawczego, który nie jest oczywisty w statycznym pliku YAML, nie może pomóc bez dzienników ani stanu klastra.

Uwaga: interfejs wiersza poleceń Gemini poprosi Cię o zgodę podczas wykonywania poleceń lub wprowadzania zmian w plikach. Dzięki temu zachowasz kontrolę nad środowiskiem. Gdy zobaczysz prompt podobny do tego poniżej, możesz nacisnąć „Enter”, aby odpowiedzieć „1. Zezwól raz” w przypadku każdego żądania działania. Możesz też nacisnąć klawisz strzałki w dół i klawisz Enter, aby wybrać „2. Zezwól na tę sesję”. W takim przypadku interfejs wiersza poleceń Gemini będzie zawsze wykonywać to działanie samodzielnie, bez pytania o Twoją zgodę, przez cały czas trwania tej rozmowy. Jeśli jednak zamkniesz interfejs wiersza poleceń Gemini i otworzysz go ponownie, nie będzie on już miał tego uprawnienia i przed podjęciem jakichkolwiek działań ponownie poprosi Cię o zgodę.

Zrzut ekranu przedstawiający widok zgody w interfejsie wiersza poleceń Gemini

Uwaga: jeśli utkniesz lub chcesz spróbować jeszcze raz od początku, w dowolnym momencie możesz przywrócić początkowy, uszkodzony stan manifestów Kubernetes, uruchamiając polecenie ../break.sh w katalogu cymbal-bank.

Uwaga: jeśli osiągniesz limit wykorzystania, wybierz „Stop” (Zatrzymaj), a potem wpisz /model, aby sprawdzić, które modele osiągnęły limit, i przełączyć się na inny model, np. gemini-2.5-flash-lite. Następnie wpisz „continue” (kontynuuj), aby kontynuować moduł z użyciem nowego modelu.

6. Etap 3. Debugowanie w pełnym kontekście (interfejs wiersza poleceń Gemini + GKE MCP)

Faza 2 pokazała, jak potężna może być AI, gdy ma dostęp do Twoich plików, ale była też uciążliwa. Musiałeś ręcznie zatwierdzać każdy odczyt pliku i każdą czynność narzędzia, co powodowało znaczne utrudnienia podczas złożonej sesji debugowania. Faza 3 wprowadza serwer GKE MCP, aby to naprawić, zapewniając AI bezpośrednią „świadomość infrastruktury”. Dzięki temu Gemini może rozwiązywać problemy z logami, zdarzeniami i metadanymi przy mniejszej liczbie ręcznych przerw, co tworzy bardziej zautomatyzowany i spójny proces rozwiązywania problemów.

Co to jest MCP?

Aby zrozumieć MCP, warto najpierw poznać pojęcie narzędzi w świecie AI. Narzędzie to w zasadzie zewnętrzna funkcja lub aplikacja, której duży model językowy może używać do wykonywania działań lub pobierania danych, do których w inny sposób nie miałby dostępu – np. sprawdzania pogody, uruchamiania określonego skryptu lub wysyłania zapytań do bazy danych. Poszczególne narzędzia są bardzo przydatne, ale bezpieczne i spójne udostępnianie ich różnym agentom i środowiskom AI zawsze było wyzwaniem. MCP rozwiązuje ten problem, działając jako standardowa platforma, która może hostować te narzędzia i udostępniać je dowolnemu zgodnemu klientowi AI.

Protokół Model Context Protocol (MCP) to protokół open source, który umożliwia modelom AI bezpieczny dostęp do zewnętrznych źródeł danych i narzędzi. Zamiast kodować na stałe integracje z każdym konkretnym narzędziem lub bazą danych, MCP zapewnia ustandaryzowany sposób interakcji modeli z ich środowiskiem.

Dostępne narzędzia w interfejsie wiersza poleceń Gemini możesz wyświetlić, wpisując /mcp w interfejsie wiersza poleceń Gemini.

W tym ćwiczeniu serwer MCP GKE umożliwia interfejsowi wiersza poleceń Gemini bezpośrednią interakcję z klastrem GKE, dzięki czemu może on sprawdzać zasoby, odczytywać logi i pomagać w debugowaniu problemów z pełną świadomością bieżącego stanu klastra. Dzięki temu AI przekształca się ze statycznego narzędzia do analizy kodu w aktywnego asystenta do rozwiązywania problemów, który rozumie bieżący stan Twojej infrastruktury.

Konfigurowanie rozszerzenia MCP w GKE

Domyślnie interfejs wiersza poleceń Gemini jest narzędziem do zwykłych obciążeń. Skonfiguruj serwer MCP GKE, tworząc plik konfiguracji.

  1. 👉💻 Najpierw zamknij interfejs wiersza poleceń Gemini, jeśli nadal go używasz, wpisując /quit.
  2. 👉💻 Aby utworzyć katalog rozszerzenia, uruchom to polecenie:
    mkdir -p ~/.gemini/extensions/gke
    
  3. 👉💻 Aby utworzyć plik konfiguracyjny, uruchom to polecenie. To polecenie automatycznie wstawia do pliku Twój adres PROJECT_ID:
    cat << EOF > ~/.gemini/extensions/gke/gemini-extension.json
    {
      "name": "gke",
      "version": "1.0.0",
      "mcpServers": {
        "container": {
          "httpUrl": "https://container.googleapis.com/mcp",
          "authProviderType": "google_credentials",
          "oauth": {
            "scopes": ["https://www.googleapis.com/auth/container"]
          },
          "timeout": 30000,
          "headers": {
            "x-goog-user-project": "$PROJECT_ID"
          }
        }
      }
    }
    EOF
    
  4. 👉💻 Uruchom interfejs wiersza poleceń Gemini:
    gemini
    
  5. Sprawdź, czy serwer MCP jest włączony, wpisując /mcp w interfejsie wiersza poleceń Gemini.

Zapytaj Gemini o debugowanie na podstawie stanu klastra

  1. Debugowanie nieudanych wdrożeń: zapytaj Gemini o sprawdzenie klastra i naprawienie manifestów na podstawie znalezionych informacji.
    👉💬 Wpisz ten prompt w interfejsie wiersza poleceń Gemini:
    The frontend deployment is failing. Can you use your tools to check the logs and events of the pods, and then fix it?
    Gemini używa narzędzi MCP do wywoływania kubectl poleceń za kulisami. Wykrywa błąd ImagePullBackOff, wyjaśnia jego przyczynę i sugeruje prawidłowe rozwiązanie.
  2. Rozwiązywanie złożonych problemów: poproś o sprawdzenie logów pod kątem błędów na poziomie aplikacji.
    👉💬 Wpisz ten prompt w interfejsie wiersza poleceń Gemini:
    Check the logs for the 'contacts' pod. Why is it failing to connect to the database?
    Widzi błąd odmowy połączenia i śledzi go aż do niezgodności portu lub nazwy usługi w config.yaml!
  3. Powtarzaj: nadal proś Gemini o rozwiązanie innych problemów, które udało Ci się znaleźć w fazie 0.
    👉💬 Wpisz ten prompt w interfejsie wiersza poleceń Gemini:
    Check if the service 'contacts' is correctly routing traffic to its pods
    👉💬 Wpisz ten prompt w interfejsie wiersza poleceń Gemini:
    Are there any pods failing due to resource limits?

Uwaga: jeśli utkniesz lub chcesz spróbować jeszcze raz od początku, w dowolnym momencie możesz przywrócić początkowy, uszkodzony stan manifestów Kubernetes, uruchamiając polecenie ../break.sh w katalogu cymbal-bank.

7. Etap 4. Wzmocnienie pozycji zespołu (umiejętności agenta)

Na koniec możesz rozszerzyć możliwości AI, tworząc niestandardowe umiejętności agenta, które będą odpowiadać Twoim konkretnym potrzebom.

Czym są umiejętności agenta?

Umiejętności agenta to pakiety instrukcji, skryptów i zasobów, które rozszerzają możliwości agenta AI w zakresie specjalistycznych zadań. Umożliwiają one kodyfikowanie standardów organizacji i automatyzowanie złożonych przepływów pracy. Umiejętność znajduje się w określonym katalogu i zawiera plik SKILL.md, który definiuje jej działanie. Tworząc umiejętności, masz pewność, że AI będzie postępować zgodnie z spójnym, powtarzalnym procesem, a nie improwizować.

Typowy katalog umiejętności wygląda tak:

my-skill/
├── SKILL.md          # Main instruction file (Required)
├── scripts/           # Helper scripts (Optional)
└── resources/         # Templates or data files (Optional)

Tworzenie umiejętności rozwiązywania problemów z Kubernetes

Zamiast tworzyć te pliki ręcznie, interfejs wiersza poleceń Gemini umożliwia tworzenie szkieletów umiejętności za pomocą języka naturalnego.

Załóżmy, że chcesz utworzyć umiejętność o nazwie k8s-troubleshooter, aby zautomatyzować wykonane przed chwilą czynności.

  1. Utwórz umiejętność za pomocą promptów: możesz poprosić interfejs wiersza poleceń Gemini o utworzenie umiejętności na podstawie tego, czego się dziś nauczyłeś(-aś).
    👉💬 Wpisz tego prompta w interfejsie wiersza poleceń Gemini:
    Create a new skill called 'k8s-troubleshooter' that helps diagnose issues with Kubernetes manifests and cluster state. It should be able to analyze pod logs, events, and resource descriptions to identify common deployment problems and configuration errors.
    Podobnie jak w przypadku wywoływania narzędzia lub wykonywania działania interfejs wiersza poleceń Gemini powinien poinformować Cię, że Twój prompt aktywował jego umiejętność „tworzenia umiejętności”. Jest to wstępnie skonfigurowana umiejętność w interfejsie wiersza poleceń Gemini, która umożliwia Gemini tworzenie umiejętności agenta.
     Gemini powinno poprosić Cię o zgodę na utworzenie katalogu umiejętności. Zatwierdź, klikając „1. Zezwól raz”.
    Gemini automatycznie:
    • Tworzy katalog w lokalizacji ~/.gemini/skills/k8s-troubleshooter/.
    • Generuje plik SKILL.md z instrukcjami na podstawie prompta.
    • Tworzy standardowe katalogi zasobów.
  2. Uruchom ponownie interfejs wiersza poleceń Gemini:
    👉💻 Zamknij interfejs wiersza poleceń Gemini (/quit), a następnie uruchom go ponownie:
    gemini
    
  3. Sprawdź, czy umiejętność jest załadowana:
    👉💻 Sprawdź, czy umiejętność jest aktywna, wpisując /skills w interfejsie wiersza poleceń Gemini. Na liście powinna pojawić się pozycja k8s-troubleshooter.
  4. Jak to działa w praktyce: teraz wywołaj umiejętność:
    👉💬 Wpisz ten prompt w interfejsie wiersza poleceń Gemini:
    Use the k8s-troubleshooter skill to find out why the contacts service is failing.
    AI postępuje zgodnie ze strukturalnym planem w SKILL.md zamiast improwizować, co prowadzi do bardziej spójnych wyników.

Ćwiczenie: opracowywanie własnych umiejętności

Zastanów się nad swoją codzienną pracą. Jakie powtarzalne zadanie możesz zautomatyzować za pomocą umiejętności?

  • Pomysł: umiejętność sprawdzania plików manifestu pod kątem sprawdzonych metod zabezpieczeń przed wdrożeniem.
  • Pomysł: umiejętność generowania złożonych konfiguracji klastra GKE na podstawie typu zadania.

8. Podsumowanie

W tym module dowiesz się, jak wchodzić w interakcję z infrastrukturą w chmurze, przechodząc przez różne poziomy kontekstu AI. Przechodząc od braku kontekstu do pełnego kontekstu infrastruktury (interfejs wiersza poleceń Gemini + GKE MCP), zobaczysz, o ile skuteczniejszy staje się asystent AI, gdy widzi Twoje pliki i stan klastra.

Podsumowanie laboratorium

  • Kontekst ma znaczenie: widzisz, że narzędzia AI bez kontekstu nie mogą pomóc w rozwiązaniu konkretnych problemów z bazą kodu.
  • Kontekst terminala: za pomocą interfejsu wiersza poleceń Gemini możesz analizować pliki lokalne i identyfikować błędy konfiguracji bezpośrednio w przestrzeni roboczej.
  • Debugowanie w pełnym kontekście: używasz interfejsu wiersza poleceń Gemini z MCP, aby umożliwić AI diagnozowanie i rozwiązywanie złożonych problemów przez korelowanie plików bazy kodu ze stanem klastra na żywo.
  • Rozszerzalność: dowiesz się o umiejętnościach i o tym, jak ich używać do kodyfikowania wiedzy organizacji.

Czyszczenie

Aby uniknąć naliczania bieżących opłat, uruchom skrypt zamykający. Pamiętaj, że ten krok nie jest konieczny, jeśli wykonujesz to laboratorium na platformie Qwiklabs.

👉💻 W katalogu warsztatów uruchom to polecenie:

cd ~/devrel-demos/codelabs/ai-toolkit-lab-1/
./teardown.sh

Dalsze kroki

Oto kilka rekomendacji dotyczących dalszej lektury:

9. Dodatek: rozwiązanie problemów z plikiem manifestu

Jeśli utkniesz lub chcesz sprawdzić błędy, oto lista zmian wprowadzonych w katalogu manifests-broken/ i sposoby ich naprawienia:

  1. Nieprawidłowe adresy URL w config.yaml:
    • Błąd: TRANSACTIONS_API_ADDR: "ledgerwriter::8080" (podwójny dwukropek).
    • Przyczyna: aplikacja nie może przeanalizować adresu, co prowadzi do błędów połączenia.
    • Rozwiązanie: przywróć wartość "ledgerwriter:8080".
  2. Niezgodne etykiety w contacts.yaml:
    • Błąd: selektor usługi ustawiony na app: contacts-backend zamiast contacts.
    • Przyczyna: usługa nie może znaleźć zasobników (które nadal mają app: contacts), więc ruch nie będzie kierowany.
    • Rozwiązanie: przestaw selektor na app: contacts.
  3. Niezgodności portów w userservice.yaml:
    • Błąd: usługa targetPort została ustawiona na 8081 zamiast 8080.
    • Przyczyna: ruch wysyłany do usługi będzie przekazywany do niewłaściwego portu kontenera, co spowoduje odrzucenie połączenia.
    • Rozwiązanie: zmień znak targetPort z powrotem na 8080.
  4. Niezgodne nazwy usług w config.yaml:
    • Błąd: BALANCES_API_ADDR: "balance-reader:8080" (zamiast balancereader).
    • Przyczyna: nazwa hosta nie zostanie rozpoznana w DNS, ponieważ usługa ma nazwę balancereader.
    • Rozwiązanie: przywróć wartość "balancereader:8080".
  5. Zasady pobierania obrazów w contacts.yaml:
    • Błąd: imagePullPolicy: Never
    • Przyczyna: K8s nie pobierze obrazu z rejestru, ponieważ zakłada, że jest on lokalny. Nie powiedzie się z błędem ErrImagePull.
    • Rozwiązanie: usuń linię lub ustaw ją na IfNotPresent.
  6. Błędy sondy gotowości w userservice.yaml:
    • Błąd: ścieżka została zmieniona na /healthz zamiast /ready.
    • Przyczyna: kontener nie obsługuje /healthz, więc sonda kończy się niepowodzeniem, a pod nigdy nie jest oznaczany jako gotowy.
    • Rozwiązanie: zmień ścieżkę z powrotem na /ready.
  7. Limity zasobów w contacts.yaml:
    • Błąd: limit pamięci ustawiony na 10Mi zamiast 128Mi.
    • Dlaczego: aplikacja potrzebuje więcej pamięci, aby się uruchomić, co powoduje jej zamknięcie z powodu braku pamięci.
    • Rozwiązanie: przywróć limit pamięci.
  8. Brakujące zmienne środowiskowe w frontend.yaml:
    • Błąd: usunięto zmienną środowiskową REGISTERED_OAUTH_CLIENT_ID.
    • Przyczyna: aplikacja może ulec awarii lub wyłączyć funkcje, jeśli brakuje oczekiwanych zmiennych środowiskowych.
    • Rozwiązanie: przywróć definicję zmiennej środowiskowej.
  9. Niezgodność klucza ConfigMap w frontend.yaml:
    • Błąd: key: DEMO_USER zamiast DEMO_LOGIN_USERNAME.
    • Przyczyna: K8s nie może znaleźć klucza w pliku ConfigMap, co powoduje, że kontener nie może się uruchomić.
    • Rozwiązanie: zmień klucz z powrotem na DEMO_LOGIN_USERNAME.
  10. Błąd w nazwie obrazu w userservice.yaml:
    • Błąd: user-service zamiast userservice.
    • Przyczyna: obraz nie istnieje w rejestrze, co powoduje błąd ImagePullBackOff.
    • Rozwiązanie: popraw nazwę obrazu.
  11. Problemy z kontem usługi w contacts.yaml:
    • Błąd: bank-of-anthos-sa zamiast bank-of-anthos.
    • Uzasadnienie: konto usługi nie istnieje lub nie ma uprawnień.
    • Rozwiązanie: użyj prawidłowej nazwy ServiceAccount.