Cloud Engineering का एआई टूलकिट: Gemini का इस्तेमाल करके, GKE पर प्लैटफ़ॉर्म इंजीनियरिंग

1. परिचय

Kubernetes डिप्लॉयमेंट से जुड़ी समस्याओं को हल करना, प्लैटफ़ॉर्म इंजीनियर के रोज़मर्रा के काम का एक सामान्य हिस्सा है. हालांकि, यह काम अक्सर काफ़ी मुश्किल होता है. आम तौर पर, इसमें मैन्युअल तरीके से काफ़ी जांच करनी पड़ती है. जैसे, लॉग की जांच करना, kubectl describe कमांड चलाना, और किसी एक गड़बड़ी या गलत कॉन्फ़िगरेशन का पता लगाने के लिए, YAML फ़ाइलों की तुलना करना.

सामान्य कामों के लिए उपलब्ध एआई चैटबॉट, कॉन्सेप्ट को समझने या बुनियादी कोड लिखने में मदद कर सकते हैं. हालांकि, वे किसी भी तरह के डेटा से कनेक्ट नहीं होते. उन्हें आपके कोडबेस या क्लस्टर की लाइव स्थिति के बारे में कोई जानकारी नहीं होती. इसलिए, आपको मैन्युअल तरीके से काफ़ी कॉन्टेंट कॉपी-पेस्ट करना पड़ता है और कॉन्टेक्स्ट स्विच करना पड़ता है.

इस लैब में, आपको यह पता चलेगा कि कॉन्टेक्स्ट के बढ़ते लेवल के साथ एआई टूल का इस्तेमाल करके, इस अंतर को कैसे कम किया जा सकता है. आपको GKE पर काम न करने वाले ऐप्लिकेशन की समस्या को हल करने के लिए, Gemini CLI और मॉडल कॉन्टेक्स्ट प्रोटोकॉल (एमसीपी) का इस्तेमाल करना होगा. इस लैब के आखिर तक, आपको यह समझ आ जाएगा कि अपनी फ़ाइलों और इन्फ़्रास्ट्रक्चर के बारे में जानकारी रखने वाले एआई का इस्तेमाल करके, मुश्किल समस्याओं को तेज़ी से कैसे हल किया जा सकता है. साथ ही, इन वर्कफ़्लो को अपनी टीम के लिए, दोबारा इस्तेमाल की जा सकने वाली ‘स्किल' में कैसे कोड किया जा सकता है.

मुख्य सिद्धांत

  • प्लैटफ़ॉर्म इंजीनियरिंग: प्लैटफ़ॉर्म इंजीनियरिंग, इंटरनल टूलिंग और वर्कफ़्लो बनाने और उन्हें बनाए रखने की प्रोसेस है. इससे सॉफ़्टवेयर डेवलपर, हर क्लाउड सेवा के विशेषज्ञ होने के बिना ही अपने इन्फ़्रास्ट्रक्चर को मैनेज कर पाते हैं. इसका मकसद, तकनीकी समस्याओं को कम करना है. साथ ही, यह पक्का करना है कि सुरक्षा और एक जैसा अनुभव बना रहे. स्टैंडर्डाइज़्ड गोल्डन पाथ बनाकर, प्लैटफ़ॉर्म टीमें यह पक्का करती हैं कि ऐप्लिकेशन डेवलपर सुरक्षित और तेज़ी से डिप्लॉय कर सकें. साथ ही, प्लैटफ़ॉर्म टीम, गवर्नेंस और लागत पर कंट्रोल बनाए रखती है.
  • Gemini CLI: Gemini CLI एक कमांड-लाइन इंटरफ़ेस है. इसकी मदद से, अपने टर्मिनल से सीधे Gemini मॉडल के साथ इंटरैक्ट किया जा सकता है. वेब पर काम करने वाले स्टैंडर्ड चैटबॉट के उलट, CLI को आपके डेवलपमेंट एनवायरमेंट में काम करने के लिए डिज़ाइन किया गया है. इससे, एआई को शेल पर आधारित मौजूदा वर्कफ़्लो में इंटिग्रेट करना आसान हो जाता है. इसकी मदद से, अन्य कमांड के आउटपुट को सीधे तौर पर मॉडल में पाइप किया जा सकता है. साथ ही, टर्मिनल छोड़े बिना निर्देशों को लागू किया जा सकता है.
  • मॉडल कॉन्टेक्स्ट प्रोटोकॉल (एमसीपी): एमसीपी एक ओपन स्टैंडर्ड है. इसकी मदद से, एआई मॉडल को कुछ टूल या डेटा सोर्स से कनेक्ट किया जा सकता है. एमसीपी के बिना, एआई मॉडल को सिर्फ़ उस डेटा के बारे में पता होता है जिस पर उसे ट्रेन किया गया है. वह आपके खास संसाधनों को नहीं देख सकता. GKE MCP सर्वर की मदद से, Gemini CLI आपके Google Cloud प्रोजेक्ट के एपीआई से क्वेरी कर सकता है. साथ ही, आपके क्लस्टर की स्थिति की जांच कर सकता है और आपकी ओर से कमांड एक्ज़ीक्यूट कर सकता है. यह मॉडल के रीज़निंग इंजन और असल GKE API के बीच एक पुल की तरह काम करता है.
  • एजेंट स्किल: स्किल, निर्देशों, स्क्रिप्ट, और संसाधनों के पैकेज होते हैं. ये किसी एआई एजेंट की क्षमताओं को खास कामों के लिए बढ़ाते हैं. इनकी मदद से, संगठन के मानकों को कोड में बदला जा सकता है और मुश्किल वर्कफ़्लो को ऑटोमेट किया जा सकता है.

लैब के मकसद

इस लैब में, आपको ये काम करने होंगे:

  1. कॉन्टेक्स्ट के हिसाब से जवाब देने की सुविधा: देखें कि कॉन्टेक्स्ट बढ़ाने से, एआई की समस्या हल करने की क्षमता कैसे बेहतर होती है.
  2. मैन्युअल तरीके से की जाने वाली समस्या हल करने की प्रोसेस बनाम एआई की मदद से की जाने वाली समस्या हल करने की प्रोसेस: मैन्युअल तरीके से डीबग करने की मुश्किलों की तुलना, एआई की मदद से किए जाने वाले वर्कफ़्लो से करें.
  3. पूरे कॉन्टेक्स्ट के साथ डीबग करना: पूरे इन्फ़्रास्ट्रक्चर की जानकारी के साथ ऐप्लिकेशन डीबग करने के लिए, GKE एमसीपी सर्वर के साथ Gemini CLI का इस्तेमाल करें.
  4. सुविधाएं बढ़ाना: वर्कफ़्लो को ऑटोमेट करने के लिए, कस्टम स्किल लिखने का तरीका जानें.

एलएलएम के आउटपुट के बारे में जानकारी

इस लैब के काम करने के तरीके और एलएलएम के काम करने के तरीके की वजह से, आपको मिलने वाले आउटपुट, दिखाए गए उदाहरणों से अलग हो सकते हैं. जनरेटिव एआई के लिए, ऐसा होना आम बात है. उदाहरणों में दिए गए टेक्स्ट या फ़ॉर्मैट को कॉपी करने के बजाय, मॉडल के बताए गए चरणों और तर्क को समझने पर ध्यान दें.

2. प्रोजेक्ट सेट-अप करना

लैब शुरू करने से पहले, अपना एनवायरमेंट तैयार करें. Cloud Shell खोलें, अपना प्रोजेक्ट चुनें, और सेटअप स्क्रिप्ट चलाएं. आइए, शुरू करें!

Cloud Shell खोलें

इस लैब के लिए, Cloud Shell का इस्तेमाल करें. यह ब्राउज़र पर आधारित टर्मिनल एनवायरमेंट है, जिसे Google Cloud ने उपलब्ध कराया है. यह पहले से ही उन सभी टूल के साथ कॉन्फ़िगर किया गया है जिनकी आपको ज़रूरत होती है. इनमें Google Cloud सीएलआई (gcloud), kubectl, और Gemini CLI शामिल हैं. इससे आपको अपनी लोकल मशीन पर इन्हें इंस्टॉल करने में लगने वाला समय बच जाता है.

  1. Google Cloud Console पर जाएं.
  2. कंसोल के सबसे ऊपर दाईं ओर मौजूद हेडर देखें. इसके बाद, Cloud Shell चालू करें बटन पर क्लिक करें. यह टर्मिनल प्रॉम्प्ट >_ जैसा दिखता है.
  3. आपके ब्राउज़र विंडो में सबसे नीचे एक टर्मिनल सेशन खुलता है. अगर कहा जाए, तो जारी रखें पर क्लिक करें.

कोई प्रोजेक्ट चुनें

Cloud Shell टर्मिनल में, पक्का करें कि आप सही प्रोजेक्ट में काम कर रहे हों.

  1. कोई मौजूदा प्रोजेक्ट चुनें या कंसोल में इस लैब के लिए नया प्रोजेक्ट बनाएं.
  2. अपना प्रोजेक्ट आईडी नोट करें. अपने मौजूदा शेल में प्रोजेक्ट सेट करने के लिए, यह कमांड चलाएं: gcloud config set project [YOUR_PROJECT_ID]

लैब सेटअप करना

अब सेटअप स्क्रिप्ट चलाकर, एनवायरमेंट तैयार करें और लैब के लिए बग जोड़ें.

  1. रिपॉज़िटरी को क्लोन करें:
    👉💻 सिर्फ़ लैब डायरेक्ट्री को क्लोन करने के लिए, यहां दिए गए निर्देश चलाएं:
    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. लैब डायरेक्ट्री पर जाएं:
    👉💻 रन करें:
    cd ~/devrel-demos/codelabs/ai-toolkit-lab-1/
    
  3. एनवायरमेंट वैरिएबल सेट करें:
    👉💻 अपने प्रोजेक्ट और क्षेत्र को सेट करने के लिए, ये निर्देश चलाएं:
    export PROJECT_ID=$(gcloud config get-value project)
    export REGION=us-central1
    
  4. सेटअप स्क्रिप्ट चलाएं:
    यह स्क्रिप्ट, यहां दी गई एपीआई को चालू करती है. साथ ही, GKE Autopilot क्लस्टर बनाती है और यह पक्का करती है कि ज़रूरी टूल इंस्टॉल हों.
    👉💻 स्क्रिप्ट को रूट डायरेक्ट्री से चलाएं:
    ./setup.sh
    
    ध्यान दें: क्लस्टर बनने में 5 से 10 मिनट लग सकते हैं.
  5. बदलावों को वापस पहले जैसा करें:
    अगर आपको यह देखना है कि आपके साथ काम करने वाले लोगों ने आपके एनवायरमेंट में कुछ बदलाव किए हैं, तो break.sh स्क्रिप्ट चलाएं. यह टूटी हुई मेनिफ़ेस्ट फ़ाइलों को ऐक्टिव कोडबेस डायरेक्ट्री में कॉपी करता है.
    👉💻 स्क्रिप्ट चलाएं:
    ./break.sh
    
  6. लैब की गतिविधियों के लिए तैयारी करें:
    एआई को जवाब देखने से रोकने के लिए, लैब के बाकी हिस्से के लिए cymbal-bank डायरेक्ट्री पर जाएं.
    👉💻 रन:
    cd ~/devrel-demos/codelabs/ai-toolkit-lab-1/cymbal-bank
    

चालू किए गए एपीआई

सेटअप स्क्रिप्ट, Google Cloud के कई एपीआई चालू करती है. ये कुकी क्या करती हैं:

  • container.googleapis.com: यह Google Kubernetes Engine API है. क्लस्टर-लेवल की किसी भी कार्रवाई के लिए इसकी ज़रूरत होती है.
  • generativelanguage.googleapis.com: यह ऐसा एपीआई है जिसकी मदद से Gemini CLI, Gemini मॉडल से कम्यूनिकेट कर पाता है.
  • cloudresourcemanager.googleapis.com: प्रोजेक्ट-लेवल के मेटाडेटा की जांच करने और अनुमतियां मैनेज करने के लिए ज़रूरी है.
  • logging.googleapis.com: यह कुकी, समस्या हल करने के लिए ज़रूरी है. इससे आपके कंटेनर से लॉग फ़ेच और उनका विश्लेषण किया जा सकता है.

3. पहला चरण: मैन्युअल तरीके से समस्या हल करना (एआई का इस्तेमाल नहीं किया जाता)

अब जब आप cymbal-bank डायरेक्ट्री में हैं, तो आइए गड़बड़ियों को मैन्युअल तरीके से ढूंढने की कोशिश करें. यह "मुश्किल तरीका" है. एआई की मदद लेने से पहले, बेसलाइन का अनुभव करें. मैन्युअल तरीके से समस्या हल करने का मतलब है कि क्लस्टर की स्थिति की जांच करने, लॉग फ़ेच करने, और YAML फ़ाइलों को पढ़कर गड़बड़ियों का पता लगाने के लिए, kubectl जैसे स्टैंडर्ड टूल का इस्तेमाल करना. यह प्रोसेस अक्सर धीमी और थकाऊ होती है. साथ ही, इसके लिए विशेषज्ञता की ज़रूरत होती है. यह आपके लिए एक बेहतरीन रेफ़रंस पॉइंट के तौर पर काम करता है. इसका इस्तेमाल बाद में एआई टूल के लिए किया जा सकता है.

  1. डिप्लॉय करने की कोशिश करें: आइए देखते हैं कि Kubernetes इन मेनिफ़ेस्ट के बारे में क्या सोचता है.
    👉💻 मेनिफ़ेस्ट लागू करने के लिए, यह कमांड चलाएं:
    kubectl apply -f kubernetes-manifests/
    
    पॉड को स्पिन अप होने में कुछ सेकंड लग सकते हैं. ‘watch kubectl get pods' कमांड का इस्तेमाल करके, यह देखा जा सकता है कि पॉड कब तक चालू होते हैं. जब ये चालू हो जाएं, तो ctrl+c का इस्तेमाल करके वॉच से बाहर निकलें.आपको सूची में दो पॉड फ़ेल होते हुए दिखेंगे:
    • फ़्रंटएंड पॉड में, "CreateContainerConfigError" दिखता है. आम तौर पर, इस तरह की गड़बड़ी से पता चलता है कि कंटेनर को ज़रूरी कॉन्फ़िगरेशन लोड करने में समस्या आ रही है. सोचें कि किसी कंटेनर को शुरू करने के लिए, किन बाहरी संसाधनों की ज़रूरत पड़ सकती है. क्या कोई एनवायरमेंट वैरिएबल, सीक्रेट या कॉन्फ़िगमैप गलत तरीके से कॉन्फ़िगर किया गया है या मौजूद नहीं है? आपको पॉड के कॉन्फ़िगरेशन की जांच करनी होगी, ताकि समस्या की वजह का पता लगाया जा सके.
    • userservice पॉड, "ImagePullBackOff" स्थिति में है. आम तौर पर, इसका मतलब यह होता है कि क्लस्टर, उस कंटेनर इमेज को वापस नहीं ला पा रहा है जिसका इस्तेमाल करने के लिए उसे कहा गया था. इमेज के अनुरोध की जानकारी देखें: क्या इमेज का नाम और टैग बिलकुल सही है? क्या रजिस्ट्री में अनुमति से जुड़ी कोई समस्या है? देखें कि इमेज कहां से ली जा रही है. इससे आपको यह पता चल सकता है कि अनुरोध पूरा क्यों नहीं किया जा सका.
  2. नुकसान की जांच करें: यह देखने के लिए कि क्या काम नहीं कर रहा है, Kubernetes के स्टैंडर्ड निर्देशों का इस्तेमाल करें.
    • 👉💻 पॉड के स्टेटस और उनके नाम देखें:
      kubectl get pods
      
      • जानकारी: आपको ImagePullBackOff, CrashLoopBackOff, Pending या CreateContainerConfigError में पॉड दिखते हैं.
      • ध्यान दें: Running स्थिति में मौजूद पॉड का मतलब यह नहीं है कि वह सही तरीके से काम कर रहा है. उदाहरण के लिए, हो सकता है कि इसमें सेहत की जांच करने वाले ज़रूरी टूल (लाइवनेस/रेडीनेस) मौजूद न हों. इस वजह से, इसे चालू के तौर पर मार्क किया जा सकता है, भले ही ऐप्लिकेशन काम न कर रहा हो. पॉड के चालू होने के बावजूद, लॉग से हमें गड़बड़ियों के बारे में पता चल सकता है. कुल 11 अलग-अलग गड़बड़ियां ठीक करनी हैं.
    • 👉💻 इवेंट देखने के लिए, फ़ेल हो रहे पॉड के बारे में बताएं ([POD_NAME] को पॉड के असली नाम से बदलें):
      kubectl describe pod [POD_NAME]
      
    • 👉💻 ऐप्लिकेशन से जुड़ी गड़बड़ियां देखने के लिए, गड़बड़ी वाले पॉड के लॉग देखें:
      kubectl logs [POD_NAME]
      

kubectl get pods का आउटपुट दिखाने वाला स्क्रीनशॉट

  1. समस्या का पता लगाना: Cloud Shell Editor का इस्तेमाल करके, kubernetes-manifests/ में मेनिफ़ेस्ट खोलें या टर्मिनल में cat का इस्तेमाल करें. लॉग और इवेंट में दिखने वाली गड़बड़ियों को YAML फ़ाइलों में मौजूद कॉन्फ़िगरेशन से जोड़ने की कोशिश करें.चुनौती: सिर्फ़ एक गड़बड़ी को मैन्युअल तरीके से ठीक करने की कोशिश करें. ध्यान दें कि गड़बड़ियों की पूरी चेन का पता लगाने के लिए, आपको एक फ़ाइल से दूसरी फ़ाइल पर जाना होगा.

4. पहला चरण: वेब से जानकारी पाना (Gemini का वेब यूज़र इंटरफ़ेस)

मैन्युअल तरीके से समस्या हल करने में समय लगता है. इसलिए, हम एआई असिस्टेंट का इस्तेमाल करके देखते हैं. Gemini का वेब ऐप्लिकेशन, सामान्य कामों के लिए चैट करने का एक बेहतरीन इंटरफ़ेस है. यह कॉन्सेप्ट को समझाने और कोड स्निपेट जनरेट करने में माहिर है. हालांकि, यह आपके एनवायरमेंट के किसी भी कॉन्टेक्स्ट के बिना काम करता है. यह आपकी फ़ाइलें नहीं देख सकता, आपके क्लस्टर की जांच नहीं कर सकता या कमांड नहीं चला सकता. आपको गड़बड़ी के मैसेज और फ़ाइल के कॉन्टेंट को मैन्युअल तरीके से कॉपी करके चिपकाना होगा.

Gemini के वेब यूज़र इंटरफ़ेस (यूआई) को दिखाने वाला स्क्रीनशॉट

  1. Gemini पर जाएं: एक नए टैब में gemini.google.com खोलें. आपको अपने Google खाते से साइन इन करना होगा.
  2. किसी गड़बड़ी के बारे में मदद मांगें: मान लें कि आपको userservice पॉड पर ImagePullBackOff गड़बड़ी दिखती है.
    👉💬 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. एआई का जवाब: Gemini आपको सामान्य वजहों की सूची देता है:
    • इमेज मौजूद नहीं है.
    • आपके पास इसे पुल करने की अनुमतियां नहीं हैं.
    • टाइपिंग की कोई गलती है.
    इसमें, अपनी रजिस्ट्री या IAM अनुमतियों की जांच करने का सुझाव दिया गया है. हालांकि, जब तक यह आपके प्रोजेक्ट को नहीं देखता, तब तक इसे यह पता नहीं चल सकता कि इमेज का असली नाम userservice (बिना हाइफ़न के) है.

यहां मुख्य समस्या यह है कि Gemini को आपके लोकल एनवायरमेंट के बारे में कोई जानकारी नहीं है. इसे ज़रूरी कॉन्टेक्स्ट देने के लिए, आपको मैन्युअल तरीके से कॉन्टेक्स्ट देना होगा. इसके लिए, आपको प्रॉम्प्ट देना होगा और टेक्स्ट को कॉपी करके चिपकाना होगा. इसमें समय लगता है और गड़बड़ियां होने की संभावना होती है.

5. दूसरा चरण: टर्मिनल की सुविधा (Gemini CLI)

अब Gemini CLI का इस्तेमाल करके, टर्मिनल पर जाएं. Gemini CLI की मदद से, Gemini मॉडल की सुविधाओं को सीधे अपने टर्मिनल में इस्तेमाल किया जा सकता है. सीएलआई, आपके काम करने की जगह पर मौजूद होता है. यह लोकल फ़ाइलों को पढ़ता है, पाइप किए गए इनपुट को स्वीकार करता है, और आपकी अनुमति से आपकी ओर से शेल कमांड भी चलाता है. इससे, कॉन्टेक्स्ट स्विच किए बिना एआई को अपने वर्कफ़्लो में इंटिग्रेट करना बहुत आसान हो जाता है. ज़्यादा जानकारी और बेहतर तरीके से इस्तेमाल करने के लिए, Gemini CLI का आधिकारिक दस्तावेज़ देखें.

नोट: फ़िलहाल, Antigravity सीएलआई को आधिकारिक तौर पर रिलीज़ कर दिया गया है. यह Gemini सीएलआई की जगह लेगा. इस लैब में, Gemini CLI का इस्तेमाल जारी रहेगा. Antigravity CLI के बारे में ज़्यादा जानने के लिए, Antigravity CLI का आधिकारिक दस्तावेज़ देखें.

कॉन्टेक्स्ट और विज़िबिलिटी

निर्देशों को पढ़ने से पहले, ध्यान दें कि Gemini CLI को आपके प्रोजेक्ट की जानकारी कहां से मिलती है. यह इस बात पर निर्भर करता है कि आपने इसे कहां से लॉन्च किया है. मॉडल, आपकी मौजूदा वर्किंग डायरेक्ट्री से जुड़ी फ़ाइलें और फ़ोल्डर देख सकता है. अगर इसे प्रोजेक्ट के रूट से चलाया जाता है, तो इसके पास उस प्रोजेक्ट की सभी फ़ाइलों का ऐक्सेस होता है. अगर इसे किसी सबडायरेक्ट्री से चलाया जाता है, तो इसका व्यू सिर्फ़ उस सबडायरेक्ट्री और उसकी उप-डायरेक्ट्री तक सीमित होता है. मॉडल से फ़ाइलों का विश्लेषण करने या उनमें बदलाव करने के लिए कहने से पहले, हमेशा पक्का करें कि आप सही डायरेक्ट्री में हों!

Gemini CLI शुरू करना

Cloud Shell में, Gemini CLI डिफ़ॉल्ट रूप से शामिल होता है. इसका इस्तेमाल शुरू करने के लिए, इसे चालू करें.

  1. Cymbal Bank डायरेक्ट्री पर जाएं:
    👉💻 पक्का करें कि आप सही डायरेक्ट्री में हों. इसके लिए, यह कमांड चलाएं:
    cd ~/devrel-demos/codelabs/ai-toolkit-lab-1/cymbal-bank
    
  2. Gemini CLI शुरू करें:
    👉💻 Gemini CLI शुरू करने के लिए, यह निर्देश चलाएं:
    gemini
    

Gemini CLI का स्क्रीनशॉट

Gemini CLI का इस्तेमाल करना

आपको इस ऐप्लिकेशन के बारे में सिर्फ़ इतना पता है कि कोड कहां मिलेगा और यह काम नहीं कर रहा है. आइए, इसके बारे में ज़्यादा जानें और देखें कि Gemini, ऐप्लिकेशन को ठीक करने में आपकी कैसे मदद कर सकता है. सबसे पहले, इसकी कॉन्टेक्स्ट एक्सप्लोर करने की क्षमता को टेस्ट करें. इसके लिए, ऐप्लिकेशन की उन फ़ाइलों के बारे में सवाल पूछें जिन्हें यह देख सकता है.

  1. कोडबेस एक्सप्लोर करें: Gemini से पूछें कि यह ऐप्लिकेशन क्या है और यह क्या करता है.
    👉💬 Gemini CLI में यह प्रॉम्प्ट डालें:
    What is this application and what does it do?
    Gemini CLI, मौजूदा डायरेक्ट्री में मौजूद फ़ाइलों को पढ़ता है और प्रोजेक्ट की खास जानकारी देता है.
  2. कोडबेस में कोई समस्या ढूंढने की कोशिश करें: Gemini CLI आपकी फ़ाइलें देख सकता है. इसलिए, इससे बेमेल जानकारी ढूंढने के लिए कहें.
    👉💬 Gemini CLI में यह प्रॉम्प्ट डालें:
    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, फ़ाइलें पढ़कर app: contacts-backend और app: contacts के बीच बेमेल जानकारी का पता लगाता है. यह पिछले चरणों की तुलना में एक बड़ी सफलता है.
  3. इसे ठीक करने के लिए कहें:
    👉💬 Gemini CLI में यह प्रॉम्प्ट डालें:
    Fix the label mismatch in contacts.yaml so the service matches the deployment.
    Gemini CLI, आपको सही किया गया YAML दिखाता है. साथ ही, अगर आपने कमांड को मंज़ूरी दी है, तो वह बदलाव भी लागू करता है.
  4. सीमाएं: यह फ़ाइलों को देख सकता है, लेकिन इसे यह नहीं पता कि आपके क्लस्टर में असल में क्या चल रहा है. अगर किसी पॉड में रनटाइम की ऐसी गड़बड़ी होती है जो स्टैटिक YAML में नहीं दिखती है, तो लॉग या क्लस्टर की स्थिति के बिना उसकी मदद नहीं की जा सकती.

ध्यान दें: Gemini CLI, कमांड चलाने या फ़ाइलों में बदलाव करने के दौरान आपसे सहमति मांगेगा. इससे यह पक्का किया जाता है कि आपके पास अपने एनवायरमेंट का कंट्रोल बना रहे. जब आपको नीचे दिए गए जैसा कोई प्रॉम्प्ट दिखे, तो "enter" दबाकर "1. हर कार्रवाई के अनुरोध के लिए, "सिर्फ़ एक बार अनुमति दें" को चुनें. "2. इस सेशन के लिए अनुमति दें" पर टैप करें. इससे Gemini CLI, इस बातचीत के दौरान हमेशा वह कार्रवाई खुद ही करेगा. इसके लिए, वह आपसे अनुमति नहीं मांगेगा. हालांकि, Gemini CLI को बंद करके फिर से खोलने पर, उसके पास यह अनुमति नहीं रहेगी. साथ ही, वह कोई भी कार्रवाई करने से पहले, आपसे अनुमति माँगेगा.

Gemini CLI में सहमति लेने के लिए दिखने वाले व्यू का स्क्रीनशॉट

ध्यान दें: अगर आपको कोई समस्या आ रही है या आपको शुरू से फिर से कोशिश करनी है, तो Kubernetes मेनिफ़ेस्ट को कभी भी उनकी शुरुआती स्थिति में रीसेट किया जा सकता है. इसके लिए, cymbal-bank डायरेक्ट्री से ../break.sh चलाएं.

ध्यान दें: अगर इस्तेमाल की सीमा पूरी हो जाती है, तो "बंद करें" को चुनें. इसके बाद, /model चलाकर देखें कि किन मॉडल के इस्तेमाल की सीमा पूरी हो गई है. साथ ही, किसी दूसरे मॉडल पर स्विच करने के लिए, जैसे कि gemini-2.5-flash-lite. इसके बाद, मॉडल को "जारी रखें" प्रॉम्प्ट दें, ताकि नए मॉडल का इस्तेमाल करके लैब को जारी रखा जा सके.

6. तीसरा चरण: पूरे कॉन्टेक्स्ट के साथ डिबग करना (Gemini CLI + GKE MCP)

दूसरे फ़ेज़ में यह दिखाया गया कि एआई आपकी फ़ाइलों को ऐक्सेस करके, कितना बेहतर काम कर सकता है. हालांकि, इसमें काफ़ी आवाज़ भी थी. आपको पढ़ी गई हर फ़ाइल और टूल ऐक्शन को मैन्युअल तरीके से अनुमति देनी होती है. इससे जटिल डीबग सेशन के दौरान काफ़ी परेशानी होती है. तीसरे फ़ेज़ में, इस समस्या को ठीक करने के लिए GKE एमसीपी सर्वर को लॉन्च किया गया है. इससे एआई को सीधे तौर पर "इन्फ़्रास्ट्रक्चर की जानकारी" मिलती है. इससे Gemini को लॉग, इवेंट, और मेटाडेटा से जुड़ी समस्याओं को कम मैन्युअल रुकावटों के साथ हल करने में मदद मिलती है. इससे समस्या हल करने की प्रोसेस ज़्यादा अपने-आप और एक साथ हो पाती है.

एमसीपी क्या है?

एमसीपी को समझने के लिए, एआई की दुनिया में टूल के कॉन्सेप्ट को समझना ज़रूरी है. टूल, असल में एक बाहरी फ़ंक्शन या ऐप्लिकेशन होता है. एलएलएम इसका इस्तेमाल, ऐसी कार्रवाइयां करने या ऐसा डेटा पाने के लिए कर सकता है जिसे वह किसी और तरीके से ऐक्सेस नहीं कर सकता. जैसे, मौसम की जानकारी देखना, कोई स्क्रिप्ट चलाना या डेटाबेस से क्वेरी करना. अलग-अलग टूल बहुत काम के होते हैं. हालांकि, इन्हें अलग-अलग एआई एजेंट और एनवायरमेंट के बीच सुरक्षित और लगातार शेयर करना हमेशा से एक चुनौती रही है. एमसीपी, इस समस्या को हल करता है. यह एक स्टैंडर्ड प्लैटफ़ॉर्म के तौर पर काम करता है. इस पर इन टूल को होस्ट किया जा सकता है और इन्हें किसी भी एआई क्लाइंट के लिए उपलब्ध कराया जा सकता है.

मॉडल कॉन्टेक्स्ट प्रोटोकॉल (एमसीपी) एक ओपन-सोर्स प्रोटोकॉल है. इसकी मदद से एआई मॉडल, बाहरी डेटा सोर्स और टूल को सुरक्षित तरीके से ऐक्सेस कर सकते हैं. हर टूल या डेटाबेस के लिए इंटिग्रेशन को हार्डकोड करने के बजाय, MCP, मॉडल को अपने एनवायरमेंट के साथ इंटरैक्ट करने का एक स्टैंडर्ड तरीका उपलब्ध कराता है.

Gemini CLI में उपलब्ध टूल देखने के लिए, Gemini CLI में /mcp चलाएं.

इस लैब में, GKE एमसीपी सर्वर, Gemini CLI को आपके GKE क्लस्टर के साथ सीधे तौर पर इंटरैक्ट करने की अनुमति देता है. इससे, Gemini CLI को संसाधनों की जांच करने, लॉग पढ़ने, और क्लस्टर की मौजूदा स्थिति के बारे में पूरी जानकारी के साथ समस्याओं को डीबग करने में मदद मिलती है. इससे एआई, स्टैटिक कोड का विश्लेषण करने वाले टूल से बदलकर, समस्या हल करने में मदद करने वाले ऐसे टूल में बदल जाता है जो आपके इन्फ़्रास्ट्रक्चर की मौजूदा स्थिति को समझता है.

GKE MCP एक्सटेंशन कॉन्फ़िगर करना

डिफ़ॉल्ट रूप से, Gemini सीएलआई एक अलग-अलग कामों के लिए इस्तेमाल की जाने वाली मशीन है. कॉन्फ़िगरेशन फ़ाइल बनाकर, GKE एमसीपी सर्वर को कॉन्फ़िगर करें.

  1. 👉💻 अगर आपने अब भी Gemini CLI का इस्तेमाल बंद नहीं किया है, तो सबसे पहले /quit टाइप करके इसे बंद करें.
  2. 👉💻 एक्सटेंशन डायरेक्ट्री बनाने के लिए, यह कमांड चलाएं:
    mkdir -p ~/.gemini/extensions/gke
    
  3. 👉💻 कॉन्फ़िगरेशन फ़ाइल बनाने के लिए, यह कमांड चलाएं. यह कमांड, आपकी 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. 👉💻 Gemini CLI शुरू करें:
    gemini
    
  5. पुष्टि करें कि एमसीपी सर्वर चालू है. इसके लिए, Gemini CLI में /mcp टाइप करें.

क्लस्टर की स्थिति का इस्तेमाल करके, Gemini से डीबग करने के लिए कहें

  1. डिप्लॉयमेंट से जुड़ी गड़बड़ियों को ठीक करना: अब Gemini से क्लस्टर की जांच करने के लिए कहें. साथ ही, जांच के नतीजों के आधार पर मेनिफ़ेस्ट में मौजूद गड़बड़ियों को ठीक करने के लिए कहें.
    👉💬 Gemini CLI में यह प्रॉम्प्ट डालें:
    The frontend deployment is failing. Can you use your tools to check the logs and events of the pods, and then fix it?
    Gemini, बैकग्राउंड में kubectl कमांड को कॉल करने के लिए, एमसीपी टूल का इस्तेमाल करता है. इसे ImagePullBackOff गड़बड़ी दिखती है. यह इसकी वजह बताती है और इसे ठीक करने का सही तरीका सुझाती है.
  2. जटिल समस्याओं को ठीक करना: इसे ऐप्लिकेशन-लेवल की गड़बड़ियों के लॉग देखने के लिए कहें.
    👉💬 Gemini CLI में यह प्रॉम्प्ट डालें:
    Check the logs for the 'contacts' pod. Why is it failing to connect to the database?
    यह कनेक्शन अस्वीकार किए जाने की गड़बड़ी को देखता है और इसे config.yaml में पोर्ट के न मिलने या सेवा के नाम के न मिलने की वजह से हुई गड़बड़ी के तौर पर ट्रैक करता है!
  3. दोहराएं: Gemini से उन अन्य समस्याओं को ठीक करने के लिए कहें जो आपको पहले चरण में मिली हैं.
    👉💬 Gemini CLI में यह प्रॉम्प्ट डालें:
    Check if the service 'contacts' is correctly routing traffic to its pods
    👉💬 Gemini CLI में यह प्रॉम्प्ट डालें:
    Are there any pods failing due to resource limits?

ध्यान दें: अगर आपको कोई समस्या आ रही है या आपको शुरू से फिर से कोशिश करनी है, तो Kubernetes मेनिफ़ेस्ट को कभी भी उनकी शुरुआती स्थिति में रीसेट किया जा सकता है. इसके लिए, cymbal-bank डायरेक्ट्री से ../break.sh चलाएं.

7. चौथा चरण: टीम को बेहतर बनाना (एजेंट की स्किल)

आखिर में, अपनी ज़रूरतों के हिसाब से एआई की क्षमताओं को बढ़ाएं. इसके लिए, कस्टम एजेंट स्किल बनाएं.

एजेंट स्किल क्या होती हैं?

एजेंट स्किल, निर्देशों, स्क्रिप्ट, और संसाधनों के पैकेज होते हैं. ये किसी एआई एजेंट की क्षमताओं को खास कामों के लिए बढ़ाते हैं. इनकी मदद से, संगठन के मानकों को कोड में बदला जा सकता है और मुश्किल वर्कफ़्लो को ऑटोमेट किया जा सकता है. कोई स्किल किसी डायरेक्ट्री में मौजूद होती है. इसमें एक SKILL.md फ़ाइल होती है, जो स्किल के काम करने के तरीके के बारे में बताती है. स्किल बनाने से, यह पक्का किया जा सकता है कि एआई, सुधार करने के बजाय एक जैसी और बार-बार दोहराई जाने वाली प्रोसेस का पालन करे.

आम तौर पर, स्किल डायरेक्ट्री ऐसी दिखती है:

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

Kubernetes से जुड़ी समस्या हल करने की स्किल बनाना

इन फ़ाइलों को मैन्युअल तरीके से बनाने के बजाय, Gemini CLI का इस्तेमाल करके नैचुरल लैंग्वेज में स्किल बनाई जा सकती हैं.

मान लें कि आपको अभी किए गए चरणों को अपने-आप पूरा करने के लिए, k8s-troubleshooter नाम की एक स्किल बनानी है.

  1. प्रॉम्प्ट के ज़रिए स्किल बनाना: Gemini सीएलआई से, आज आपने जो कुछ भी सीखा है उसके आधार पर, आपके लिए स्किल बनाने के लिए कहा जा सकता है.
    👉💬 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.
    किसी टूल को कॉल करने या कोई कार्रवाई करने के दौरान, Gemini सीएलआई को आपको यह बताना चाहिए कि आपके प्रॉम्प्ट से "स्किल-क्रिएटर" स्किल चालू हो गई है. यह Gemini सीएलआई में पहले से कॉन्फ़िगर की गई एक स्किल है. इससे Gemini को एजेंट स्किल बनाने में मदद मिलती है.
    Gemini को आपसे स्किल डायरेक्ट्री बनाने की अनुमति मांगनी चाहिए. "1. एक बार अनुमति दें" को चुनकर अनुमति दें.
    Gemini अपने-आप ये काम करेगा:
    • इससे ~/.gemini/skills/k8s-troubleshooter/ पर एक डायरेक्ट्री बनती है.
    • यह नोड, आपके प्रॉम्प्ट के आधार पर निर्देशों वाली SKILL.md फ़ाइल जनरेट करता है.
    • स्टैंडर्ड रिसॉर्स डायरेक्ट्री बनाता है.
  2. Gemini CLI को रीस्टार्ट करें:
    👉💻 Gemini CLI (/quit) को बंद करें. इसके बाद, इसे रीस्टार्ट करें:
    gemini
    
  3. पुष्टि करें कि स्किल लोड हो गई है:
    👉💻 पुष्टि करें कि स्किल चालू है. इसके लिए, Gemini CLI में /skills टाइप करें. आपको सूची में k8s-troubleshooter दिखेगा.
  4. यह सुविधा कैसे काम करती है: अब इस स्किल को चालू करें:
    👉💬 Gemini CLI में यह प्रॉम्प्ट डालें:
    Use the k8s-troubleshooter skill to find out why the contacts service is failing.
    एआई, SKILL.md में दिए गए स्ट्रक्चर्ड प्लान को फ़ॉलो करता है. इससे आपको ज़्यादा सटीक नतीजे मिलते हैं.

एक्सरसाइज़: अपनी स्किल के बारे में सोचें

अपने रोज़ाना के काम के बारे में सोचें. बार-बार किए जाने वाले किस टास्क को किसी स्किल की मदद से ऑटोमेट किया जा सकता है?

  • सुझाव: सुरक्षा के सबसे सही तरीकों के लिए, डिप्लॉयमेंट से पहले मेनिफ़ेस्ट की ऑडिट करने की सुविधा.
  • आइडिया: यह स्किल, वर्कलोड टाइप के आधार पर जटिल GKE क्लस्टर कॉन्फ़िगरेशन जनरेट करती है.

8. नतीजा

इस लैब में, एआई कॉन्टेक्स्ट के अलग-अलग लेवल के ज़रिए, क्लाउड इन्फ़्रास्ट्रक्चर के साथ इंटरैक्ट करने का नया तरीका दिखाया गया है. ज़्यादा जानकारी न होने से लेकर पूरी जानकारी होने तक (Gemini CLI + GKE MCP), आपको पता चलता है कि एआई असिस्टेंट, आपकी फ़ाइलों और क्लस्टर की स्थिति को देखने पर कितना ज़्यादा असरदार हो जाता है.

लैब की खास जानकारी

  • कॉन्टेक्स्ट ज़रूरी है: आपको पता चलेगा कि बिना कॉन्टेक्स्ट वाले एआई टूल, कोडबेस से जुड़ी खास समस्याओं को हल करने में मदद नहीं कर सकते.
  • टर्मिनल का कॉन्टेक्स्ट: Gemini CLI का इस्तेमाल करके, लोकल फ़ाइलों का विश्लेषण किया जा सकता है. साथ ही, अपने वर्कस्पेस से सीधे कॉन्फ़िगरेशन से जुड़ी गड़बड़ियों का पता लगाया जा सकता है.
  • पूरे कॉन्टेक्स्ट के साथ डीबग करना: एमसीपी के साथ Gemini CLI का इस्तेमाल करके, एआई को मुश्किल समस्याओं का पता लगाने और उन्हें ठीक करने की अनुमति दी जा सकती है. इसके लिए, एआई को कोडबेस फ़ाइलों को लाइव क्लस्टर की स्थिति के साथ जोड़ना होता है.
  • एक्सटेंसिबिलिटी: आपको Skills के बारे में जानकारी मिलती है. साथ ही, यह भी पता चलता है कि संगठन के ज्ञान को कोड में बदलने के लिए, इनका इस्तेमाल कैसे किया जाता है.

साफ़-सफ़ाई सेवा

लगातार लगने वाले शुल्क को रोकने के लिए, टियरडाउन स्क्रिप्ट चलाएं. ध्यान दें कि अगर Qwiklabs पर लैब चलाया जा रहा है, तो इस चरण को पूरा करना ज़रूरी नहीं है.

👉💻 वर्कशॉप की डायरेक्ट्री से यह कमांड चलाएं:

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

अगले चरण

ज़्यादा जानकारी के लिए यहां कुछ सुझाव दिए गए हैं:

9. अपेंडिक्स: मेनिफ़ेस्ट फ़ाइल के काम न करने की समस्या को ठीक करना

अगर आपको कोई समस्या आ रही है या गड़बड़ियों की पुष्टि करनी है, तो यहां manifests-broken/ डायरेक्ट्री में हुई गड़बड़ियों की सूची दी गई है. साथ ही, उन्हें ठीक करने का तरीका भी बताया गया है:

  1. config.yaml में मौजूद गलत फ़ॉर्मैट वाले यूआरएल:
    • गड़बड़ी: TRANSACTIONS_API_ADDR: "ledgerwriter::8080" (डबल कोलन).
    • वजह: ऐप्लिकेशन, पते को पार्स नहीं कर पाता. इस वजह से, कनेक्शन में गड़बड़ियां होती हैं.
    • ठीक करें: इसे वापस "ledgerwriter:8080" पर सेट करें.
  2. contacts.yaml में लेबल मैच नहीं हो रहे हैं:
    • गड़बड़ी: सर्विस सिलेक्टर को contacts के बजाय app: contacts-backend पर सेट किया गया है.
    • वजह: सेवा को ऐसे पॉड नहीं मिल रहे हैं जिनमें अब भी app: contacts है. इसलिए, ट्रैफ़िक को रूट नहीं किया जाएगा.
    • ठीक करें: सिलेक्टर को app: contacts पर सेट करें.
  3. userservice.yaml में पोर्ट मैच न होना:
    • गड़बड़ी: सेवा targetPort को 8080 के बजाय 8081 पर सेट किया गया है.
    • वजह: सेवा को भेजा गया ट्रैफ़िक, कंटेनर के गलत पोर्ट पर फ़ॉरवर्ड किया जाएगा. इस वजह से, कनेक्शन अस्वीकार कर दिया जाएगा.
    • ठीक करें: targetPort को वापस 8080 पर सेट करें.
  4. config.yaml में सेवा के नाम मैच नहीं हो रहे हैं:
    • गड़बड़ी: BALANCES_API_ADDR: "balance-reader:8080" (balancereader के बजाय).
    • वजह: डीएनएस में होस्टनेम को हल नहीं किया जा सकेगा, क्योंकि सेवा का नाम balancereader है.
    • ठीक करें: इसे वापस "balancereader:8080" पर सेट करें.
  5. contacts.yaml में इमेज पुल करने से जुड़ी नीतियां:
    • गड़बड़ी: imagePullPolicy: Never.
    • वजह: K8s, इमेज को रजिस्ट्री से पुल नहीं करेगा. ऐसा इसलिए, क्योंकि वह इसे लोकल इमेज मान रहा है. यह ErrImagePull के साथ फ़ेल हो जाएगा.
    • ठीक करें: लाइन हटाएं या उसे IfNotPresent पर सेट करें.
  6. userservice.yaml में रेडीनेस जांच पूरी नहीं हो सकी:
    • गड़बड़ी: पाथ को /ready के बजाय /healthz पर सेट किया गया है.
    • क्यों: कंटेनर, /healthz को नहीं दिखाता है. इसलिए, जांच पूरी नहीं हो पाती और पॉड को कभी भी 'तैयार है' के तौर पर मार्क नहीं किया जाता.
    • ठीक करें: पाथ को वापस /ready पर सेट करें.
  7. contacts.yaml में संसाधन इस्तेमाल करने की सीमाएं:
    • गड़बड़ी: मेमोरी की सीमा 128Mi के बजाय 10Mi पर सेट की गई है.
    • क्यों: ऐप्लिकेशन को शुरू करने के लिए ज़्यादा मेमोरी की ज़रूरत होती है. इस वजह से, इसे OOMKilled कर दिया जाता है.
    • ठीक करें: मेमोरी की सीमा को पहले जैसा करें.
  8. frontend.yaml में एनवायरमेंट वैरिएबल मौजूद नहीं हैं:
    • गड़बड़ी: REGISTERED_OAUTH_CLIENT_ID एनवायरमेंट वैरिएबल हटा दिया गया है.
    • वजह: अगर ज़रूरी एनवायरमेंट वैरिएबल मौजूद नहीं हैं, तो हो सकता है कि ऐप्लिकेशन काम न करे या उसकी सुविधाएं बंद हो जाएं.
    • ठीक करें: एनवायरमेंट वैरिएबल की परिभाषा को वापस लाएं.
  9. frontend.yaml में ConfigMap की कुंजी मैच नहीं हुई:
    • गड़बड़ी: DEMO_LOGIN_USERNAME के बजाय key: DEMO_USER.
    • वजह: K8s को ConfigMap में कुंजी नहीं मिल रही है. इस वजह से, कंटेनर शुरू नहीं हो पा रहा है.
    • हल करें: कुंजी को वापस DEMO_LOGIN_USERNAME पर सेट करें.
  10. userservice.yaml में इमेज के नाम में टाइपोग्राफ़िकल गड़बड़ी है:
    • गड़बड़ी: userservice के बजाय user-service.
    • वजह: इमेज, रजिस्ट्री में मौजूद नहीं है. इस वजह से, ImagePullBackOff की समस्या आ रही है.
    • ठीक करें: इमेज का नाम सही करें.
  11. contacts.yaml में सेवा खाते से जुड़ी समस्याएं:
    • गड़बड़ी: bank-of-anthos के बजाय bank-of-anthos-sa.
    • वजह: ServiceAccount मौजूद नहीं है या उसके पास ज़रूरी अनुमतियां नहीं हैं.
    • ठीक करें: ServiceAccount का सही नाम इस्तेमाल करें.