Cloud Engineering'in Yapay Zeka Araç Seti: Gemini ile GKE'de Platform Mühendisliği

1. Giriş

Bozuk Kubernetes dağıtımlarını gidermek, platform mühendislerinin günlük hayatının yaygın ve genellikle sinir bozucu bir parçasıdır. Genellikle çok fazla manuel inceleme gerektirir: Günlükleri inceleme, kubectl describe komutlarını çalıştırma ve tek bir uyuşmazlığı veya yanlış yapılandırmayı bulmak için YAML dosyalarını çapraz referanslama.

Genel amaçlı yapay zeka sohbet botları, kavramları açıklamaya veya temel kodlar yazmaya yardımcı olsa da bağımsız olarak çalışır. Kod tabanınız veya kümenizin canlı durumu hakkında hiçbir şey bilmezler. Bu da çok fazla manuel kopyalama ve bağlam değiştirme işlemine yol açar.

Bu laboratuvarda, bağlam düzeyleri artan yapay zeka araçlarını kullanarak bu boşluğu nasıl dolduracağınızı deneyimleyeceksiniz. GKE'de bozuk bir uygulamayla ilgili sorunları gidermek için Gemini CLI ve Model Context Protocol'ü (MCP) kullanacaksınız. Bu laboratuvarın sonunda, karmaşık sorunları daha hızlı çözmek için dosyalarınızın ve altyapınızın farkında olan yapay zekayı nasıl kullanacağınızı ve bu iş akışlarını ekibiniz için yeniden kullanılabilir "beceriler" olarak nasıl kodlayacağınızı anlayacaksınız.

Temel kavramlar

  • Platform mühendisliği: Platform mühendisliği, yazılım geliştiricilerin her temel bulut hizmetinde uzman olmalarına gerek kalmadan kendi altyapılarını yönetmelerini sağlayan dahili araçlar ve iş akışları oluşturma ve bunları sürdürme uygulamasıdır. Amaç, tutarlılığı ve güvenliği korurken teknik zorlukları azaltmaktır. Platform ekipleri, standartlaştırılmış bir altın yol oluşturarak uygulama geliştiricilerin güvenli ve hızlı bir şekilde dağıtım yapmasını sağlarken platform ekibi de yönetim ve maliyet üzerinde kontrolü korur.
  • Gemini CLI: Gemini CLI, Gemini modelleriyle doğrudan terminalinizden etkileşim kurmanızı sağlayan bir komut satırı arayüzüdür. Standart web tabanlı bir chatbot'un aksine CLI, geliştirme ortamınızda bulunacak şekilde tasarlanmıştır. Bu sayede, yapay zekayı mevcut kabuk tabanlı iş akışlarına entegre etmek kolaylaşır. Diğer komutlardan gelen çıkışı doğrudan modele yönlendirmenize ve terminalinizden ayrılmadan talimatları yürütmenize olanak tanır.
  • Model Context Protocol (MCP): MCP, bir yapay zeka modelinin belirli araçlara veya veri kaynaklarına bağlanmasını sağlayan açık bir standarttır. MCP olmadan, bir yapay zeka modeli yalnızca üzerinde eğitildiği bilgileri bilir ve belirli kaynaklarınızı göremez. Gemini CLI, GKE MCP sunucusu ile Google Cloud projenizin API'sini etkin bir şekilde sorgulayabilir, kümelerinizin durumunu inceleyebilir ve sizin adınıza komutlar yürütebilir. Modelin akıl yürütme motoru ile gerçek GKE API arasında köprü görevi görür.
  • Ajan becerileri: Beceriler, uzmanlık gerektiren görevler için yapay zeka ajanının özelliklerini genişleten talimat, komut dosyası ve kaynak paketleridir. Bu araçlar, kuruluş standartlarını kodlamanıza ve karmaşık iş akışlarını otomatikleştirmenize olanak tanır.

Laboratuvar hedefleri

Bu laboratuvarda şunları öğreneceksiniz:

  1. Bağlam ilerlemesini deneyimleyin: Bağlamın artırılmasının yapay zekanın sorun çözme becerisini nasıl geliştirdiğini görün.
  2. Manuel ve yapay zeka ile sorun giderme: Manuel hata ayıklamanın zorluğunu yapay zeka destekli iş akışlarıyla karşılaştırın.
  3. Tam bağlamda hata ayıklama: Tam altyapı farkındalığıyla uygulamalarda hata ayıklamak için GKE MCP sunucusuyla Gemini CLI'ı kullanın.
  4. İşlevleri genişletme: İş akışlarını otomatikleştirmek için özel beceriler yazmayı öğrenin.

LLM çıkışlarıyla ilgili not

Bu laboratuvarın doğası ve LLM'lerin çalışma şekli nedeniyle, elde ettiğiniz çıkışlar gösterilen örnek çıkışlardan farklı olabilir. Bu, üretken yapay zekanın beklenen davranışıdır. Örneklerdeki metni veya biçimlendirmeyi birebir kopyalamaya çalışmak yerine adımları ve modelin sağladığı gerekçeleri anlamaya odaklanın.

2. Proje kurulumu

Laboratuvara başlamadan önce ortamınızı hazırlayın. Cloud Shell'i açın, projenizi seçin ve kurulum komut dosyalarını çalıştırın. Haydi, başlayalım.

Cloud Shell'i açın

Bu laboratuvarda, Google Cloud tarafından sağlanan tarayıcı tabanlı bir terminal ortamı olan Cloud Shell'i kullanın. Google Cloud KSA (gcloud), kubectl ve Gemini CLI dahil olmak üzere ihtiyacınız olan tüm araçlarla önceden yapılandırılmış olarak gelir. Bu sayede, bunları yerel makinenize yüklemekle zaman kaybetmezsiniz.

  1. Google Cloud Console'a gidin.
  2. Konsolun sağ üstteki başlığına bakın ve Cloud Shell'i Etkinleştir düğmesini (terminal istemine benzer >_) tıklayın.
  3. Tarayıcı pencerenizin en altında bir terminal oturumu açılır. İstenirse, Devam'ı tıklayın.

Proje seçin

Cloud Shell terminalinde doğru proje içinde çalıştığınızdan emin olun.

  1. Console'da mevcut bir projeyi seçin veya bu laboratuvar için özel olarak yeni bir proje oluşturun.
  2. Proje kimliğinizi not edin. Şu komutu çalıştırarak mevcut kabuğunuzdaki projeyi ayarlayın: gcloud config set project [YOUR_PROJECT_ID]

Laboratuvar kurulumu

Şimdi ortamı hazırlamak ve laboratuvar için hataları tanıtmak üzere kurulum komut dosyalarını çalıştırın.

  1. Depoyu klonlayın:
    👉💻 Yalnızca laboratuvar dizinini klonlamak için aşağıdaki komutları çalıştırın:
    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. Laboratuvar dizinine gidin:
    👉💻 Çalıştırın:
    cd ~/devrel-demos/codelabs/ai-toolkit-lab-1/
    
  3. Ortam değişkenlerini ayarlayın:
    👉💻 Projenizi ve bölgenizi ayarlamak için aşağıdaki komutları çalıştırın:
    export PROJECT_ID=$(gcloud config get-value project)
    export REGION=us-central1
    
  4. Kurulum komut dosyasını çalıştırın:
    Bu komut dosyası, aşağıda listelenen API'leri etkinleştirir, bir GKE Autopilot kümesi oluşturur ve gerekli araçların yüklendiğinden emin olur.
    👉💻 Komut dosyasını kök dizinden çalıştırın:
    ./setup.sh
    
    Not: Küme oluşturma işlemi 5-10 dakika sürebilir.
  5. Bozuk durumu başlatın:
    İş arkadaşlarınızın sizi bozuk bir ortamla bıraktığı senaryoyu simüle etmek için break.sh komut dosyasını çalıştırın. Bozuk manifestleri etkin kod tabanı dizinine kopyalar.
    👉💻 Komut dosyasını çalıştırın:
    ./break.sh
    
  6. Laboratuvar alıştırmalarına hazırlanın:
    Yapay zekanın kopya çekmesini (çözümleri görmesini) önlemek için laboratuvarın geri kalanında cymbal-bank dizinine geçin.
    👉💻 Şu komutu çalıştırın:
    cd ~/devrel-demos/codelabs/ai-toolkit-lab-1/cymbal-bank
    

Etkin API'ler

Kurulum komut dosyası, çeşitli Google Cloud API'lerini etkinleştirir. Bu şirketlerin yaptıkları:

  • container.googleapis.com: Google Kubernetes Engine API. Küme düzeyindeki tüm işlemler için gereklidir.
  • generativelanguage.googleapis.com: Gemini KSA'nın Gemini modelleriyle iletişim kurmasına olanak tanıyan API.
  • cloudresourcemanager.googleapis.com: Proje düzeyindeki meta verileri incelemek ve izinleri yönetmek için gereklidir.
  • logging.googleapis.com: Kapsayıcılarınızdaki günlüklerin getirilip analiz edilmesine olanak tanıdığı için sorun giderme açısından önemlidir.

3. 0. aşama: Manuel sorun giderme (yapay zeka yok)

cymbal-bank dizininde olduğunuz için şimdi hataları manuel olarak bulmaya çalışalım. Bu, "zor yol"dur. Yapay zekanın işin zor kısmını yapmasına izin vermeden önce temel deneyimi yaşayın. Manuel sorun giderme, küme durumunu incelemek, günlükleri getirmek ve tutarsızlıkları tespit etmek için YAML dosyalarını okumak gibi standart araçların (ör. kubectl) kullanılması anlamına gelir. Bu işlem genellikle yavaş ve sıkıcıdır ve izleri birleştirmek için uzmanlık gerekir. Bu, daha sonra kullanacağınız yapay zeka araçları için mükemmel bir referans noktasıdır.

  1. Dağıtmayı deneyin: Kubernetes'in bu manifestler hakkında ne düşündüğüne bakalım.
    👉💻 Manifestleri uygulamak için aşağıdaki komutu çalıştırın:
    kubectl apply -f kubernetes-manifests/
    
    Pod'ların başlatılması birkaç saniye sürebilir. "watch kubectl get pods" komutunu kullanarak bunların hazır olmasını bekleyebilirsiniz. Pod'lar başlatıldıktan sonra watch'tan çıkmak için Ctrl+C tuşlarına basın.Listede iki başarısız pod görürsünüz:
    • Ön uç pod'unda "CreateContainerConfigError" gösteriliyor. Bu tür bir hata genellikle kapsayıcının gerekli yapılandırmayı yüklemekte sorun yaşadığını gösterir. Bir kapsayıcının başlatılması için hangi harici kaynaklara ihtiyaç duyabileceğini düşünün. Yanlış yapılandırılmış veya eksik olabilecek ortam değişkenleri, gizli anahtarlar ya da ConfigMap'ler var mı? Belirli bir hatayı bulmak için pod'un yapılandırmasını incelemeniz gerekir.
    • userservice pod'u "ImagePullBackOff" durumundadır. Bu mesajı gördüğünüzde genellikle kümenin, kullanması söylenen kapsayıcı görüntüsünü alamadığı anlaşılır. Resim isteğinin ayrıntılarını göz önünde bulundurun: Resim adı ve etiketi tamamen doğru mu? Kayıt otoritesiyle ilgili olası izin sorunları var mı? İsteğin neden başarısız olduğunu belirleyip belirleyemeyeceğinizi görmek için resmin nereden alındığına bakın.
  2. Hasarı inceleyin: Neyin başarısız olduğunu görmek için standart Kubernetes komutlarını kullanın.
    • 👉💻 Pod'ların durumunu ve adlarını kontrol edin:
      kubectl get pods
      
      • Gözlem: ImagePullBackOff, CrashLoopBackOff, Pending veya CreateContainerConfigError içinde kapsüller görüyorsunuz.
      • Not: Running durumundaki bir pod'un düzgün çalıştığı anlamına gelmez. Örneğin, yeterli sağlık yoklamaları (canlılık/hazırlık) eksik olabilir. Bu durumda, içindeki uygulama başarısız olsa bile çalışıyor olarak işaretlenir. Günlükler, çalışan bir pod olmasına rağmen hataları gösterebilir. Toplamda 11 farklı hata düzeltilmelidir.
    • 👉💻 Etkinlikleri görmek için başarısız olan bir pod'u açıklayın ([POD_NAME] yerine gerçek bir pod adı girin):
      kubectl describe pod [POD_NAME]
      
    • 👉💻 Uygulama hatalarını görmek için başarısız olan bir kapsülün günlüklerini kontrol edin:
      kubectl logs [POD_NAME]
      

kubectl get pods komutunun çıkışını gösteren ekran görüntüsü

  1. Araştırma: Manifestleri Cloud Shell Düzenleyici'de (kubernetes-manifests/) veya terminalde (cat) açın. Günlüklerde ve etkinliklerde gördüğünüz hataları YAML dosyalarındaki yapılandırmayla ilişkilendirmeye çalışın.Zorluk: Yalnızca BİR hatayı manuel olarak düzeltmeye çalışın. Hata zincirinin geri kalanını anlamak için dosyalar arasında nasıl geçiş yapmanız gerektiğini fark edin.

4. 1. aşama: Web'e sorma (Gemini web kullanıcı arayüzü)

Manuel sorun giderme yavaş olduğundan yapay zeka asistanı kullanmayı deneyelim. Gemini web uygulaması, güçlü bir genel amaçlı sohbet arayüzüdür. Kavramları açıklama ve kod snippet'leri oluşturma konusunda başarılıdır. Ancak, sıfır bağlamla çalışır. Dosyalarınızı göremez, kümenizi inceleyemez veya komut çalıştıramaz. Hata mesajlarını ve dosya içeriklerini manuel olarak kopyalayıp yapıştırmanız gerekir.

Gemini web kullanıcı arayüzünü gösteren ekran görüntüsü

  1. Gemini'a gidin: Yeni bir sekmede gemini.google.com'u açın. Kendi Google Hesabınızla oturum açmanız gerekir.
  2. Belirli bir hatayla ilgili yardım isteme: Örneğin, userservice bölmesinde ImagePullBackOff hatasını gördüğünüzü varsayalım.
    👉💬 Bu istemi Gemini web kullanıcı arayüzüne girin:
    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. Yapay zekanın yanıtı: Gemini, yaygın nedenlerin bir listesini sunuyor:
    • Resim mevcut değil.
    • Çekme izniniz yok.
    • Yazım hatası var.
    Kayıt defterinizi veya IAM izinlerinizi kontrol etmenizi önerir. Ancak projenizi görmediği sürece gerçek resim adının userservice (tire olmadan) olduğunu bilemez.

Buradaki temel sorun, Gemini'ın yerel ortamınızda görünürlüğünün olmamasıdır. İhtiyacı olan bağlamı almak için manuel olarak sağlamanız (istem girerek ve metinleri kopyalayıp yapıştırarak) gerekir. Bu işlem zaman alır ve hatalara yol açabilir.

5. 2. aşama: Terminal gücü (Gemini CLI)

Şimdi Gemini KSA'yı kullanarak terminale geçin. Gemini CLI, Gemini modellerinin gücünü doğrudan terminalinize getirir. CLI, çalıştığınız yerde bulunur. Yerel dosyaları okur, boruyla ayrılmış girişi kabul eder ve hatta sizin adınıza (onayınızla) kabuk komutlarını yürütür. Bu sayede, bağlam değiştirmeden yapay zekayı iş akışlarınıza entegre etmek son derece kolaylaşır. Daha ayrıntılı bilgi ve gelişmiş kullanım için resmi Gemini CLI belgelerine bakın.

Not: Antigravity CLI şu anda resmi olarak yayınlanmıştır ve Gemini CLI'ın yerini almıştır. Bu laboratuvarda Gemini CLI kullanılmaya devam edilmektedir. Antigravity CLI hakkında daha fazla bilgi için resmi Antigravity CLI belgelerine göz atın.

Bağlam ve görünürlük

Talimatlara geçmeden önce, Gemini CLI'nın projenizdeki görünürlüğünün, onu nereden başlattığınıza bağlı olduğunu unutmayın. Model, mevcut çalışma dizininize göre dosya ve klasörleri görebilir. Projenizin kökünden çalıştırırsanız bu projedeki tüm dosyalara erişebilir. Bir alt dizinden çalıştırırsanız görünümü bu alt dizin ve alt öğeleriyle sınırlı olur. Modelden dosyaları analiz etmesini veya değiştirmesini istemeden önce her zaman doğru dizinde olduğunuzdan emin olun.

Gemini KSA'yı başlatma

Cloud Shell, Gemini CLI'yı varsayılan olarak içerir. Yerel dosyalarınızla kullanmaya başlamak için uygulamayı başlatmanız yeterlidir.

  1. Cymbal Bank dizinine gidin:
    👉💻 Doğru dizinde olduğunuzdan emin olmak için aşağıdaki komutu çalıştırın:
    cd ~/devrel-demos/codelabs/ai-toolkit-lab-1/cymbal-bank
    
  2. Gemini KSA'yı başlatma:
    👉💻 Gemini KSA'yı başlatmak için şu komutu çalıştırın:
    gemini
    

Gemini CLI'ın görünümünü gösteren ekran görüntüsü

Gemini KSA'yı kullanma

Bu uygulama hakkında bildiğiniz tek şey kodun nerede bulunduğu ve başarısız olduğu. Daha fazla bilgi edinelim ve Gemini'ın uygulamayı düzeltmenize nasıl yardımcı olabileceğini görelim. İlk olarak, görebilmesi gereken uygulama dosyalarıyla ilgili bir soru sorarak bağlamı keşfetme yeteneğini test etmeyi deneyin.

  1. Kod tabanını keşfedin: Gemini'dan bu uygulamanın ne olduğunu ve ne yaptığını açıklamasını isteyin.
    👉💬 Gemini CLI'ya şu istemi girin:
    What is this application and what does it do?
    Gemini CLI, geçerli dizindeki dosyaları okur ve projeyle ilgili üst düzey bir genel bakış sunar.
  2. Kod tabanında bir sorun bulmaya çalışın: Gemini CLI dosyalarınızı gördüğünden, bir uyuşmazlık bulmasını isteyin.
    👉💬 Gemini CLI'ya şu istemi girin:
    The contacts service pod is running, but I can't reach the service. Review kubernetes-manifests/contacts.yaml and check for common issues
    Gemini CLI, dosyaları okur ve app: contacts-backend ile app: contacts arasındaki uyuşmazlığı tespit eder. Bu, önceki aşamalara kıyasla büyük bir avantajdır.
  3. Düzeltmesini isteyin:
    👉💬 Bu istemi Gemini CLI'a girin:
    Fix the label mismatch in contacts.yaml so the service matches the deployment.
    Gemini CLI, düzeltilmiş YAML'yi gösterir veya komutu onaylarsanız değişikliği uygular.
  4. Sınırlama: Dosyaları görse de kümenizde gerçekte neyin çalıştığını yine de bilemez. Bir pod, statik YAML'de açıkça görülmeyen bir çalışma zamanı hatası nedeniyle başarısız olursa günlükler veya küme durumu olmadan yardımcı olamaz.

Not: Gemini CLI, komutları çalıştırırken veya dosyalarda değişiklik yaparken sizden izin ister. Bu sayede ortamınız üzerinde kontrolünüzü koruyabilirsiniz. Aşağıdaki gibi bir istem gördüğünüzde "enter" tuşuna basarak "1. Her işlem isteği için "Bir kez izin ver"i seçin. Ayrıca, aşağı ok tuşuna dokunup Enter tuşuna basarak "2. Bu oturuma izin ver"i seçerseniz Gemini CLI, bu sohbet süresince izninizi istemeden her zaman bağımsız olarak bu işlemi gerçekleştirir. Ancak Gemini CLI'ı kapatıp yeniden açarsanız bu izin artık geçerli olmaz ve herhangi bir işlem yapmadan önce sizden tekrar izin istenir.

Gemini CLI izin görünümünü gösteren ekran görüntüsü

Not: Takılırsanız veya baştan tekrar denemek isterseniz cymbal-bank dizininden ../break.sh komutunu çalıştırarak Kubernetes manifestlerini istediğiniz zaman ilk bozuk durumlarına sıfırlayabilirsiniz.

Not: Kullanım sınırına ulaşırsanız "Durdur"u seçin ve ardından /model komutunu çalıştırarak hangi modellerin sınırlarına ulaştığını görün ve gemini-2.5-flash-lite gibi farklı bir modele geçin. Ardından, yeni modeli kullanarak laboratuvara devam etmek için modele "devam et" istemini girin.

6. 3. aşama: Tam bağlam hata ayıklama (Gemini CLI + GKE MCP)

2. Aşama, yapay zeka dosyalarınızı görebildiğinde ne kadar güçlü olabileceğini gösterse de bu aşamada çok fazla gürültü vardı. Okunan her dosyayı ve araç işlemini manuel olarak onaylamanız gerekiyordu. Bu durum, karmaşık bir hata ayıklama oturumu sırasında önemli bir sorun yaratıyordu. 3. aşamada, yapay zekaya doğrudan "altyapı farkındalığı" sağlayarak bu sorunu düzeltmeye yardımcı olmak için GKE MCP sunucusu kullanıma sunulur. Bu sayede Gemini, daha az manuel kesintiyle günlüklerde, etkinliklerde ve meta verilerde sorun giderebilir. Böylece daha otomatik ve tutarlı bir sorun giderme akışı oluşturulur.

MCP nedir?

MCP'yi anlamak için öncelikle yapay zeka dünyasındaki araçlar kavramını anlamak gerekir. Araç, temelde bir LLM'nin başka türlü erişemeyeceği işlemleri gerçekleştirmek veya verileri getirmek için kullanabileceği harici bir işlev ya da uygulamadır. Örneğin, hava durumunu kontrol etme, belirli bir komut dosyasını çalıştırma veya bir veritabanına sorgu gönderme. Ayrı ayrı araçlar güçlü olsa da bunları farklı yapay zeka aracıları ve ortamları arasında güvenli ve tutarlı bir şekilde paylaşmak her zaman zor olmuştur. MCP, bu araçları barındırabilen ve bunları uyumlu herhangi bir yapay zeka istemcisine sunabilen standartlaştırılmış bir platform olarak bu sorunu çözer.

Model Context Protocol (MCP), yapay zeka modellerinin harici veri kaynaklarına ve araçlarına güvenli bir şekilde erişmesini sağlayan açık kaynaklı bir protokoldür. MCP, her bir araç veya veritabanı için entegrasyonları sabit kodlamak yerine modellerin ortamlarıyla etkileşim kurması için standartlaştırılmış bir yol sağlar.

Gemini CLI'da /mcp komutunu çalıştırarak kullanılabilir araçları görüntüleyebilirsiniz.

Bu laboratuvarda, GKE MCP sunucusu, Gemini CLI'nın GKE kümenizle doğrudan etkileşim kurmasına olanak tanır. Böylece kaynakları inceleyebilir, günlükleri okuyabilir ve kümenin canlı durumunun tamamen farkında olarak sorunları ayıklamanıza yardımcı olabilir. Bu, yapay zekayı statik bir kod analizcisinden altyapınızın canlı durumunu anlayan aktif bir sorun giderme asistanına dönüştürür.

GKE MCP uzantısını yapılandırma

Gemini CLI, varsayılan olarak genel amaçlı bir araçtır. Yapılandırma dosyası oluşturarak GKE MCP sunucusunu yapılandırın.

  1. 👉💻 Öncelikle, /quit yazarak Gemini KSA'dan çıkın.
  2. 👉💻 Uzantı dizinini oluşturmak için aşağıdaki komutu çalıştırın:
    mkdir -p ~/.gemini/extensions/gke
    
  3. 👉💻 Yapılandırma dosyasını oluşturmak için aşağıdaki komutu çalıştırın. Bu komut, PROJECT_ID değerinizi dosyaya otomatik olarak ekler:
    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. 👉💻 Gemini KSA'yı başlatın:
    gemini
    
  5. Gemini CLI'da /mcp yazarak MCP sunucusunun etkin olduğunu doğrulayın.

Gemini'a küme durumunu kullanarak hata ayıklamasını sorun

  1. Başarısız dağıtımı ayıklama: Şimdi Gemini'dan kümeyi incelemesini ve bulgularına göre manifestleri düzeltmesini isteyin.
    👉💬 Gemini CLI'ya şu istemi girin:
    The frontend deployment is failing. Can you use your tools to check the logs and events of the pods, and then fix it?
    Gemini, arka planda kubectl komutlarını çağırmak için MCP araçlarını kullanır. ImagePullBackOff hatasını görür, nedenini açıklar ve doğru düzeltmeyi önerir.
  2. Karmaşık sorunları düzeltme: Uygulama düzeyindeki hatalar için günlükleri incelemesini isteyin.
    👉💬 Gemini CLI'ya şu istemi girin:
    Check the logs for the 'contacts' pod. Why is it failing to connect to the database?
    Bağlantı reddedildi hatasını görüyor ve config.yaml'deki bağlantı noktası uyuşmazlığına veya hizmet adı uyuşmazlığına kadar izliyor.
  3. Tekrar etme: Gemini'dan 0. Aşamada bulduğunuz diğer sorunları düzeltmesini istemeye devam edin.
    👉💬 Bu istemi Gemini CLI'ye girin:
    Check if the service 'contacts' is correctly routing traffic to its pods
    👉💬 Bu istemi Gemini CLI'ye girin:
    Are there any pods failing due to resource limits?

Not: Takılırsanız veya baştan tekrar denemek isterseniz cymbal-bank dizininden ../break.sh komutunu çalıştırarak Kubernetes manifestlerini istediğiniz zaman ilk bozuk durumlarına sıfırlayabilirsiniz.

7. 4. aşama: Ekibi güçlendirme (aracı becerileri)

Son olarak, özel Agent Skills oluşturarak yapay zekanın yeteneklerini kendi ihtiyaçlarınıza göre genişletin.

Ajan becerileri nelerdir?

Ajan becerileri, bir yapay zeka ajanını özel görevler için genişleten talimat, komut dosyası ve kaynak paketleridir. Bu beceriler, kuruluş standartlarını kodlamanıza ve karmaşık iş akışlarını otomatikleştirmenize olanak tanır. Beceri, belirli bir dizinde bulunur ve davranışını tanımlayan bir SKILL.md dosyası içerir. Beceri oluşturarak yapay zekanın doğaçlama yapmak yerine tutarlı ve tekrarlanabilir bir süreç izlemesini sağlarsınız.

Tipik bir beceri dizini şu şekilde görünür:

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

Kubernetes sorun giderme becerisi oluşturma

Bu dosyaları manuel olarak oluşturmak yerine, Gemini CLI doğal dil kullanarak becerileri yapılandırmak için güçlü bir yöntem sunar.

Az önce gerçekleştirdiğiniz adımları otomatikleştirmek için k8s-troubleshooter adlı bir beceri oluşturmak istediğinizi varsayalım.

  1. İstem yazarak beceri oluşturma: Gemini KSA'dan, bugün öğrendiklerinize göre sizin için beceri oluşturmasını isteyebilirsiniz.
    👉💬 Gemini CLI'ya şu istemi girin:
    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.
    Gemini CLI, bir aracı çağırdığında veya bir işlem gerçekleştirdiğinde olduğu gibi, isteminizin "beceri oluşturucu" becerisini etkinleştirdiğini size bildirmelidir. Bu, Gemini'ın Agent Skills oluşturmasını sağlayan, Gemini CLI'da önceden yapılandırılmış bir beceridir.
    Gemini, beceri dizini oluşturmak için sizden izin istemelidir. "1. Bir kereliğine izin ver"e dokunun.
    Gemini otomatik olarak:
    • ~/.gemini/skills/k8s-troubleshooter/ konumunda bir dizin oluşturur.
    • İsteminize göre talimatlar içeren bir SKILL.md dosyası oluşturur.
    • Standart kaynak dizinleri oluşturur.
  2. Gemini CLI'ı yeniden başlatma:
    👉💻 Gemini CLI'ı kapatın (/quit) ve yeniden başlatın:
    gemini
    
  3. Becerinin yüklendiğini doğrulayın:
    👉💻 Gemini KSA'da /skills yazarak becerinin etkin olduğunu doğrulayın. Listede k8s-troubleshooter simgesini görmeniz gerekir.
  4. Pratikte işleyiş şekli: Şimdi beceriyi çağırın:
    👉💬 Gemini CLI'ye şu istemi girin:
    Use the k8s-troubleshooter skill to find out why the contacts service is failing.
    Yapay zeka, doğaçlama yapmak yerine SKILL.md içindeki yapılandırılmış plana uyarak daha tutarlı sonuçlar verir.

Alıştırma: Kendi becerilerinizi kavramsallaştırma

Günlük iş akışınızı düşünün. Hangi tekrarlanan görevi beceriyle otomatikleştirebilirsiniz?

  • Fikir: Dağıtımdan önce güvenlikle ilgili en iyi uygulamalar açısından manifestleri denetleyen bir beceri.
  • Fikir: İş yükü türüne göre karmaşık GKE küme yapılandırmaları oluşturma becerisi.

8. Sonuç

Bu laboratuvarda, farklı yapay zeka bağlamı düzeylerinde ilerleyerek bulut altyapısıyla etkileşime geçmenin yeni bir yolu gösterilmektedir. Sıfır bağlamdan tam altyapı bağlamına (Gemini CLI + GKE MCP) geçerek, yapay zeka asistanının dosyalarınızı ve küme durumunuzu gördüğünde ne kadar daha etkili hale geldiğini görebilirsiniz.

Laboratuvar özeti

  • Bağlam önemlidir: Bağlamı olmayan yapay zeka araçlarının belirli kod tabanı sorunlarına yardımcı olamayacağını görürsünüz.
  • Terminal bağlamı: Yerel dosyaları analiz etmek ve yapılandırma hatalarını doğrudan çalışma alanınızdan belirlemek için Gemini CLI'yı kullanırsınız.
  • Tam bağlam hata ayıklama: Gemini CLI'yı MCP ile birlikte kullanarak yapay zekanın, kod tabanı dosyalarını canlı küme durumuyla ilişkilendirerek karmaşık sorunları teşhis etmesini ve düzeltmesini sağlayabilirsiniz.
  • Genişletilebilirlik: Beceriler ve bunları kullanarak kurumsal bilgileri nasıl kodlayacağınız hakkında bilgi edinirsiniz.

Temizleme

Devam eden ödemeleri önlemek için yıkım komut dosyasını çalıştırın. Laboratuvarı Qwiklabs'te çalıştırıyorsanız bu adımın gerekli olmadığını unutmayın.

👉💻 Atölyenin dizininden aşağıdaki komutu çalıştırın:

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

Sonraki adımlar

Daha fazla bilgi için aşağıdaki kaynakları inceleyebilirsiniz:

9. Ek: Manifest bozulmalarına çözüm

Takılırsanız veya hataları doğrulamak isterseniz manifests-broken/ dizininde kullanıma sunulan bozulmaların listesini ve bunların nasıl düzeltileceğini aşağıda bulabilirsiniz:

  1. config.yaml
      içinde yanlış biçimlendirilmiş URL'ler:
    • Hata: TRANSACTIONS_API_ADDR: "ledgerwriter::8080" (çift iki nokta).
    • Nedeni: Uygulama, adresi ayrıştıramadığından bağlantı hataları oluşuyor.
    • Düzeltme: "ledgerwriter:8080" olarak değiştirin.
    • contacts.yaml
    • Hata: Hizmet seçici, contacts yerine app: contacts-backend olarak ayarlanmış.
    • Neden: Hizmet, Pod'ları (hâlâ app: contacts olan) bulamadığı için trafik yönlendirilmez.
    • Düzeltme: Seçiciyi app: contacts olarak değiştirin.
  2. userservice.yaml
    • Hata: targetPort hizmeti, 8080 yerine 8081 olarak ayarlandı.
    • Neden: Hizmete gönderilen trafik yanlış kapsayıcı bağlantı noktasına yönlendirilir ve bağlantı reddedilir.
    • Düzeltme: targetPort simgesini tekrar 8080 olarak değiştirin.
  3. config.yaml içinde eşleşmeyen hizmet adları:
    • Hata: BALANCES_API_ADDR: "balance-reader:8080" (balancereader yerine).
    • Neden: Hizmetin adı balancereader olduğundan ana makine adı DNS'de çözümlenmez.
    • Düzeltme: "balancereader:8080" olarak değiştirin.
    • contacts.yaml
    • Hata: imagePullPolicy: Never.
    • Neden: K8s, yerel olduğunu varsayarak resmi kayıt defterinden çekmez. ErrImagePull ile başarısız olur.
    • Düzeltme: Satırı kaldırın veya IfNotPresent olarak ayarlayın.
  4. userservice.yaml içinde hazırlık durumu yoklama hataları:
    • Hata: Yol, /ready yerine /healthz olarak değiştirildi.
    • Neden: Kapsayıcı /healthz hizmeti vermediğinden, inceleme başarısız olur ve pod hiçbir zaman hazır olarak işaretlenmez.
    • Düzeltme: Yolu tekrar /ready olarak değiştirin.
    • contacts.yaml
    • Hata: Bellek sınırı 128Mi yerine 10Mi olarak ayarlandı.
    • Neden: Uygulamanın başlatılması için daha fazla bellek gerekir. Bu nedenle uygulama, OOMKilled olur.
    • Düzeltme: Bellek sınırını geri yükleyin.
  5. frontend.yaml içinde eksik ortam değişkenleri:
    • Hata: REGISTERED_OAUTH_CLIENT_ID ortam değişkeni kaldırıldı.
    • Neden: Beklenen ortam değişkenleri eksikse uygulama başarısız olabilir veya özellikleri devre dışı bırakabilir.
    • Düzeltme: Ortam değişkeni tanımını geri yükleyin.
  6. frontend.yaml içinde ConfigMap anahtarı uyuşmazlığı:
    • DEMO_LOGIN_USERNAME yerine Hata: key: DEMO_USER.
    • Neden: K8s, ConfigMap'teki anahtarı bulamadığı için kapsayıcı başlatılamıyor.
    • Düzeltme: Anahtarı tekrar DEMO_LOGIN_USERNAME olarak değiştirin.
  7. userservice.yaml
    • userservice yerine Hata: user-service.
    • Neden: Resim kayıt defterinde bulunmadığı için ImagePullBackOff hatası oluşuyor.
    • Düzeltme: Resim adını düzeltin.
  8. contacts.yaml'da hizmet hesabı sorunları:
    • bank-of-anthos yerine Hata: bank-of-anthos-sa.
    • Neden: ServiceAccount yok veya izinleri eksik.
    • Düzeltme: Doğru ServiceAccount adını kullanın.