ชุดเครื่องมือ AI ของ Cloud Engineering: วิศวกรรมแพลตฟอร์มใน GKE โดยใช้ Gemini

1. บทนำ

การแก้ปัญหาการติดตั้งใช้งาน Kubernetes ที่ใช้งานไม่ได้เป็นส่วนหนึ่งในชีวิตประจำวันของวิศวกรแพลตฟอร์ม ซึ่งมักจะสร้างความหงุดหงิด โดยปกติแล้วจะต้องมีการตรวจสอบด้วยตนเองเป็นจำนวนมาก เช่น การค้นหาในบันทึก การเรียกใช้คำสั่ง kubectl describe และการอ้างอิงโยงไฟล์ YAML เพื่อค้นหาความไม่ตรงกันหรือการกำหนดค่าที่ไม่ถูกต้องเพียงรายการเดียว

แม้ว่าแชทบ็อต AI แบบอเนกประสงค์จะช่วยอธิบายแนวคิดหรือเขียนโค้ดพื้นฐานได้ แต่ก็ทำงานในสภาพแวดล้อมที่ไม่มีข้อมูลอื่น ซึ่งไม่ทราบเกี่ยวกับโค้ดเบสที่เฉพาะเจาะจงหรือสถานะที่ใช้งานจริงของคลัสเตอร์ จึงต้องคัดลอกและวางด้วยตนเอง รวมถึงสลับบริบทเป็นจำนวนมาก

ในแล็บนี้ คุณจะได้สัมผัสวิธีเชื่อมช่องว่างนี้โดยใช้เครื่องมือ AI ที่มีระดับบริบทเพิ่มขึ้น คุณจะใช้ Gemini CLI และ Model Context Protocol (MCP) เพื่อแก้ปัญหาแอปพลิเคชันที่ใช้งานไม่ได้ใน GKE เมื่อสิ้นสุดแล็บนี้ คุณจะเข้าใจวิธีใช้ AI ที่รับรู้ไฟล์และโครงสร้างพื้นฐานของคุณเพื่อแก้ปัญหาที่ซับซ้อนได้เร็วขึ้น และวิธีแปลงเวิร์กโฟลว์เหล่านี้เป็น "ทักษะ" ที่นำกลับมาใช้ใหม่ได้สำหรับทีม

แนวคิดหลัก

  • วิศวกรรมแพลตฟอร์ม: วิศวกรรมแพลตฟอร์มคือแนวทางปฏิบัติในการสร้างและบำรุงรักษาเครื่องมือและเวิร์กโฟลว์ภายในที่ช่วยให้นักพัฒนาซอฟต์แวร์จัดการโครงสร้างพื้นฐานของตนเองได้โดยไม่ต้องเป็นผู้เชี่ยวชาญในบริการคลาวด์พื้นฐานทุกอย่าง เป้าหมายคือการลดความยุ่งยากทางเทคนิคในขณะที่ยังคงความสอดคล้องและความปลอดภัยไว้ การสร้างเส้นทางทองคำที่ได้มาตรฐานจะช่วยให้ทีมแพลตฟอร์มมั่นใจได้ว่านักพัฒนาแอปพลิเคชันจะสามารถติดตั้งใช้งานได้อย่างปลอดภัยและรวดเร็ว ในขณะที่ทีมแพลตฟอร์มจะยังคงควบคุมการกำกับดูแลและต้นทุนได้
  • Gemini CLI: Gemini CLI เป็นอินเทอร์เฟซบรรทัดคำสั่งที่ช่วยให้คุณโต้ตอบกับโมเดล Gemini ได้โดยตรงจากเทอร์มินัล CLI ได้รับการออกแบบมาให้ทำงานภายในสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ ซึ่งต่างจากแชทบ็อตบนเว็บมาตรฐาน จึงผสานรวม AI เข้ากับเวิร์กโฟลว์ที่ใช้เชลล์ที่มีอยู่ได้ง่ายขึ้น ซึ่งช่วยให้คุณส่งเอาต์พุตจากคำสั่งอื่นๆ ไปยังโมเดลโดยตรงและเรียกใช้คำสั่งได้โดยไม่ต้องออกจากเทอร์มินัล
  • Model Context Protocol (MCP): MCP เป็นมาตรฐานแบบเปิดที่ช่วยให้โมเดล AI เชื่อมต่อกับเครื่องมือหรือแหล่งข้อมูลที่เฉพาะเจาะจงได้ หากไม่มี MCP โมเดล AI จะทราบเฉพาะสิ่งที่ได้รับการฝึกมาเท่านั้น และไม่สามารถดูทรัพยากรเฉพาะของคุณได้ เมื่อใช้เซิร์ฟเวอร์ GKE MCP แล้ว Gemini CLI จะค้นหา API ของโปรเจ็กต์ Google Cloud, ตรวจสอบสถานะของคลัสเตอร์ และเรียกใช้คำสั่งในนามของคุณได้ โดยจะทำหน้าที่เป็นตัวเชื่อมระหว่างเครื่องมือให้เหตุผลของโมเดลกับ GKE API จริง
  • ทักษะ Agent: ทักษะคือแพ็กเกจคำสั่ง สคริปต์ และทรัพยากรที่ขยายความสามารถของ AI Agent สำหรับงานเฉพาะทาง ซึ่งช่วยให้คุณกำหนดมาตรฐานขององค์กรและทำให้เวิร์กโฟลว์ที่ซับซ้อนเป็นแบบอัตโนมัติได้

วัตถุประสงค์ของ Lab

ในแล็บนี้ คุณจะได้ทำสิ่งต่อไปนี้

  1. ดูความคืบหน้าของบริบท: ดูว่าการเพิ่มบริบทช่วยปรับปรุงการแก้ปัญหาของ AI ได้อย่างไร
  2. การแก้ปัญหาด้วยตนเองเทียบกับการแก้ปัญหาด้วย AI: เปรียบเทียบความยากของการแก้ไขข้อบกพร่องด้วยตนเองกับเวิร์กโฟลว์ที่ AI ช่วย
  3. การแก้ไขข้อบกพร่องในบริบททั้งหมด: ใช้ Gemini CLI กับเซิร์ฟเวอร์ MCP ของ GKE เพื่อแก้ไขข้อบกพร่องของแอปพลิเคชันโดยมีความตระหนักถึงโครงสร้างพื้นฐานทั้งหมด
  4. ขยายความสามารถ: เรียนรู้วิธีเขียนทักษะที่กำหนดเองเพื่อทำให้เวิร์กโฟลว์เป็นอัตโนมัติ

หมายเหตุเกี่ยวกับเอาต์พุตของ LLM

เนื่องจากลักษณะของห้องทดลองนี้และวิธีการทำงานของ LLM เอาต์พุตที่คุณได้รับจึงอาจแตกต่างจากเอาต์พุตตัวอย่างที่แสดง นี่คือลักษณะการทำงานปกติของ Generative AI มุ่งเน้นที่การทำความเข้าใจขั้นตอนและการให้เหตุผลที่โมเดลระบุไว้ แทนที่จะพยายามจำลองข้อความหรือการจัดรูปแบบที่ตรงกันในตัวอย่าง

2. การตั้งค่าโปรเจ็กต์

โปรดเตรียมสภาพแวดล้อมก่อนเริ่มแล็บ เปิด Cloud Shell เลือกโปรเจ็กต์ แล้วเรียกใช้สคริปต์การตั้งค่า มาเริ่มกันเลย

เปิด Cloud Shell

สำหรับแล็บนี้ ให้ใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมเทอร์มินัลบนเบราว์เซอร์ที่ Google Cloud จัดเตรียมให้ โดยมีการกำหนดค่าล่วงหน้าด้วยเครื่องมือทั้งหมดที่คุณต้องการ ซึ่งรวมถึง Google Cloud CLI (gcloud), kubectl และ Gemini CLI ซึ่งช่วยประหยัดเวลาในการติดตั้งเครื่องมือเหล่านี้ในเครื่องของคุณ

  1. ไปที่ คอนโซล Google Cloud
  2. ดูที่ส่วนหัวด้านขวาบนของคอนโซล แล้วคลิกปุ่มเปิดใช้งาน Cloud Shell (ปุ่มนี้มีลักษณะเหมือนพรอมต์เทอร์มินัล >_)
  3. เซสชันเทอร์มินัลจะเปิดขึ้นที่ด้านล่างของหน้าต่างเบราว์เซอร์ หากได้รับข้อความแจ้ง ให้คลิกต่อไป

เลือกโปรเจ็กต์

ในเทอร์มินัล Cloud Shell ให้ตรวจสอบว่าคุณกำลังทำงานในโปรเจ็กต์ที่ถูกต้อง

  1. เลือกโปรเจ็กต์ที่มีอยู่หรือสร้างโปรเจ็กต์ใหม่สำหรับ Lab นี้โดยเฉพาะในคอนโซล
  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. เรียกใช้สคริปต์การตั้งค่า:
    สคริปต์นี้จะเปิดใช้ API ที่ระบุไว้ด้านล่าง สร้างคลัสเตอร์ GKE Autopilot และตรวจสอบว่าได้ติดตั้งเครื่องมือที่จำเป็นแล้ว
    👉💻 เรียกใช้สคริปต์จากไดเรกทอรีราก
    ./setup.sh
    
    หมายเหตุ: การสร้างคลัสเตอร์อาจใช้เวลา 5-10 นาที
  5. เริ่มต้นสถานะที่ใช้งานไม่ได้:
    หากต้องการจำลองสถานการณ์ที่เพื่อนร่วมงานทิ้งสภาพแวดล้อมที่ใช้งานไม่ได้ไว้ให้ ให้เรียกใช้สคริปต์ break.sh โดยจะคัดลอกไฟล์ Manifest ที่เสียไปยังไดเรกทอรีโค้ดเบสที่ใช้งานอยู่
    👉💻 เรียกใช้สคริปต์
    ./break.sh
    
  6. เตรียมพร้อมสำหรับแบบฝึกหัดในแล็บ:
    หากต้องการป้องกันไม่ให้ AI โกง (ดูเฉลย) ให้เปลี่ยนไปที่ไดเรกทอรี cymbal-bank สำหรับแล็บที่เหลือ
    👉💻 เรียกใช้:
    cd ~/devrel-demos/codelabs/ai-toolkit-lab-1/cymbal-bank
    

API ที่เปิดใช้แล้ว

สคริปต์การตั้งค่าจะเปิดใช้ Google Cloud API หลายรายการ โดยสิ่งที่ผู้ดูแลระบบทำได้มีดังนี้

  • container.googleapis.com: Google Kubernetes Engine API จำเป็นสำหรับการดำเนินการระดับคลัสเตอร์
  • generativelanguage.googleapis.com: API ที่อนุญาตให้ Gemini CLI สื่อสารกับโมเดล Gemini
  • cloudresourcemanager.googleapis.com: จำเป็นสำหรับการตรวจสอบข้อมูลเมตาระดับโปรเจ็กต์และการจัดการสิทธิ์
  • logging.googleapis.com: จำเป็นอย่างยิ่งสำหรับการแก้ปัญหา เนื่องจากช่วยให้ดึงและวิเคราะห์บันทึกจากคอนเทนเนอร์ได้

3. ระยะที่ 0: การแก้ปัญหาด้วยตนเอง (ไม่มี AI)

ตอนนี้คุณอยู่ในไดเรกทอรี cymbal-bank แล้ว ลองค้นหาข้อผิดพลาดด้วยตนเองกัน ซึ่งเป็น "วิธีที่ยาก" สัมผัสประสบการณ์พื้นฐานก่อนที่จะให้ AI ช่วยจัดการภาระหนัก การแก้ปัญหาด้วยตนเองหมายถึงการใช้เครื่องมือมาตรฐาน เช่น kubectl เพื่อตรวจสอบสถานะคลัสเตอร์ ดึงข้อมูลบันทึก และอ่านไฟล์ YAML เพื่อหาความไม่สอดคล้องกัน ซึ่งมักจะช้า น่าเบื่อ และต้องใช้ความเชี่ยวชาญในการเชื่อมโยงข้อมูล ซึ่งจะเป็นจุดอ้างอิงที่สมบูรณ์แบบสำหรับเครื่องมือ AI ที่คุณใช้ในภายหลัง

  1. ลองติดตั้งใช้งาน: มาดูกันว่า Kubernetes คิดอย่างไรกับไฟล์ Manifest เหล่านี้
    👉💻 เรียกใช้คำสั่งต่อไปนี้เพื่อใช้ไฟล์ Manifest
    kubectl apply -f kubernetes-manifests/
    
    พ็อดอาจใช้เวลาสักครู่ในการหมุน คุณสามารถตรวจสอบว่าพ็อดพร้อมใช้งานแล้วหรือไม่โดยใช้คำสั่ง "watch kubectl get pods" เมื่อพร้อมแล้ว ให้ใช้ ctrl+c เพื่อออกจากฟีเจอร์ดู คุณจะเห็นพ็อด 2 รายการที่ล้มเหลวในรายการ ดังนี้
    • พ็อดฟรอนท์เอนด์แสดง "CreateContainerConfigError" โดยทั่วไปแล้ว ข้อผิดพลาดประเภทนี้บ่งบอกว่าคอนเทนเนอร์มีปัญหาในการโหลดการกำหนดค่าที่จำเป็น พิจารณาว่าคอนเทนเนอร์อาจต้องใช้ทรัพยากรภายนอกใดในการเริ่มต้น มีตัวแปรสภาพแวดล้อม ข้อมูลลับ หรือ ConfigMap ที่อาจกำหนดค่าผิดหรือขาดหายไปหรือไม่ คุณจะต้องตรวจสอบการกำหนดค่าพ็อดเพื่อหาตัวการที่เฉพาะเจาะจง
    • พ็อด 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. การสืบหา: เปิดไฟล์ Manifest ใน kubernetes-manifests/ โดยใช้ Cloud Shell Editor หรือ cat ในเทอร์มินัล ลองเชื่อมโยงข้อผิดพลาดที่คุณเห็นในบันทึกและเหตุการณ์กับการกำหนดค่าในไฟล์ YAMLความท้าทาย: ลองแก้ไขข้อผิดพลาดเพียง 1 รายการด้วยตนเอง สังเกตว่าคุณต้องสลับไปมาระหว่างไฟล์เพื่อดูว่าส่วนที่เหลือของห่วงโซ่ความล้มเหลวคืออะไร

4. เฟส 1: ถามเว็บ (UI ของ Gemini บนเว็บ)

เนื่องจากการแก้ปัญหาด้วยตนเองใช้เวลานาน เรามาลองใช้ผู้ช่วย AI กัน เว็บแอปพลิเคชัน Gemini เป็นอินเทอร์เฟซแชทอเนกประสงค์ที่มีประสิทธิภาพ มีความเชี่ยวชาญในการอธิบายแนวคิดและสร้างข้อมูลโค้ด แต่จะทำงานโดยไม่มีบริบทของสภาพแวดล้อมที่เฉพาะเจาะจงของคุณ โดยจะดูไฟล์ ตรวจสอบคลัสเตอร์ หรือเรียกใช้คำสั่งไม่ได้ คุณต้องคัดลอกและวางข้อความแสดงข้อผิดพลาดและเนื้อหาของไฟล์ด้วยตนเอง

ภาพหน้าจอที่แสดง UI ของเว็บ Gemini

  1. ไปที่ Gemini: เปิด gemini.google.com ในแท็บใหม่ คุณจะต้องลงชื่อเข้าใช้ด้วยบัญชี Google ของคุณเอง
  2. ขอความช่วยเหลือเกี่ยวกับข้อผิดพลาดที่เฉพาะเจาะจง: สมมติว่าคุณเห็นข้อผิดพลาด ImagePullBackOff ในพ็อด userservice
    👉💬 ป้อนพรอมต์นี้ลงในเว็บ UI ของ 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. คำตอบของ AI: Gemini จะแสดงรายการสาเหตุที่พบบ่อยให้คุณ
    • ไม่มีรูปภาพ
    • คุณไม่มีสิทธิ์ดึงข้อมูล
    • มีการพิมพ์ผิด
    โดยแนะนำให้ตรวจสอบรีจิสทรีหรือสิทธิ์ IAM แต่จะทราบชื่อรูปภาพจริงว่า userservice (ไม่มีขีดกลาง) ไม่ได้ เว้นแต่จะเห็นโปรเจ็กต์ของคุณ

จุดที่ทำให้เกิดความยุ่งยากหลักๆ ในที่นี้คือ Gemini ไม่สามารถมองเห็นสภาพแวดล้อมในเครื่องของคุณได้ หากต้องการรับบริบทที่จำเป็น คุณจะต้องระบุบริบทด้วยตนเอง (โดยการป้อนพรอมต์และคัดลอกวางข้อความ) ซึ่งใช้เวลานานและมีโอกาสเกิดข้อผิดพลาดได้

5. ระยะที่ 2: พลังของเทอร์มินัล (Gemini CLI)

ตอนนี้ให้ไปที่เทอร์มินัลโดยใช้ Gemini CLI Gemini CLI นำความสามารถของโมเดล Gemini มาไว้ในเทอร์มินัลของคุณโดยตรง CLI จะอยู่ในที่ที่คุณทำงาน โดยจะอ่านไฟล์ในเครื่อง รับอินพุตที่ส่งผ่านท่อ และแม้แต่เรียกใช้คำสั่งเชลล์ในนามของคุณ (เมื่อคุณอนุมัติ) ซึ่งทำให้มีประโยชน์อย่างยิ่งในการผสานรวม AI เข้ากับเวิร์กโฟลว์โดยไม่ต้องสลับบริบท ดูข้อมูลโดยละเอียดและการใช้งานขั้นสูงได้ที่เอกสารประกอบอย่างเป็นทางการของ Gemini CLI

หมายเหตุ: ปัจจุบัน Antigravity CLI ได้รับการเปิดตัวอย่างเป็นทางการแล้วและเป็นรุ่นต่อจาก Gemini CLI แล็บนี้จะใช้ 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. อนุญาตครั้งเดียว" สำหรับคำขอการดำเนินการแต่ละรายการ นอกจากนี้ คุณยังแตะแป้นลูกศรลงแล้วกด Enter เพื่อเลือก "2. อนุญาตสำหรับเซสชันนี้" ซึ่งจะทำให้ Gemini CLI ดำเนินการดังกล่าวโดยอิสระเสมอโดยไม่ต้องขอสิทธิ์จากคุณตลอดระยะเวลาของการสนทนานี้ อย่างไรก็ตาม หากคุณปิด Gemini CLI แล้วเปิดอีกครั้ง CLI จะไม่มีสิทธิ์ดังกล่าวอีกต่อไป และจะขอสิทธิ์จากคุณอีกครั้งก่อนที่จะดำเนินการใดๆ

ภาพหน้าจอที่แสดงมุมมองความยินยอมของ Gemini CLI

หมายเหตุ: หากติดขัดหรือต้องการลองอีกครั้งตั้งแต่ต้น ให้รีเซ็ตไฟล์ Manifest ของ Kubernetes กลับไปเป็นสถานะเริ่มต้นที่ใช้งานไม่ได้ได้ทุกเมื่อโดยเรียกใช้ ../break.sh จากไดเรกทอรี cymbal-bank

หมายเหตุ: หากใช้เกินขีดจำกัดการใช้งาน ให้เลือก "หยุด" แล้วเรียกใช้ /model เพื่อดูว่าโมเดลใดที่ใช้เกินขีดจำกัดและเพื่อเปลี่ยนไปใช้โมเดลอื่น เช่น gemini-2.5-flash-lite จากนั้นแจ้งโมเดลด้วยคำว่า "ต่อไป" เพื่อทำการทดลองต่อโดยใช้โมเดลใหม่

6. ระยะที่ 3: การแก้ไขข้อบกพร่องแบบเต็มบริบท (Gemini CLI + GKE MCP)

แม้ว่าเฟส 2 จะแสดงให้เห็นถึงประสิทธิภาพของ AI เมื่อสามารถดูไฟล์ของคุณได้ แต่ก็มีข้อเสียเช่นกัน คุณต้องอนุมัติการอ่านไฟล์และการดำเนินการของเครื่องมือทุกรายการด้วยตนเอง ซึ่งสร้างความยุ่งยากอย่างมากในระหว่างเซสชันการแก้ไขข้อบกพร่องที่ซับซ้อน เฟส 3 จึงเปิดตัวเซิร์ฟเวอร์ GKE MCP เพื่อช่วยแก้ไขปัญหานี้ โดยให้ "การรับรู้โครงสร้างพื้นฐาน" โดยตรงแก่ AI ซึ่งจะช่วยให้ Gemini แก้ไขข้อบกพร่องในบันทึก เหตุการณ์ และข้อมูลเมตาได้โดยมีการขัดจังหวะด้วยตนเองน้อยลง ทำให้ขั้นตอนการแก้ไขข้อบกพร่องเป็นไปโดยอัตโนมัติและสอดคล้องกันมากขึ้น

MCP คืออะไร

หากต้องการทำความเข้าใจ MCP คุณควรทำความเข้าใจแนวคิดของเครื่องมือในโลกของ AI ก่อน โดยพื้นฐานแล้ว เครื่องมือคือฟังก์ชันหรือแอปพลิเคชันภายนอกที่ LLM ใช้เพื่อดำเนินการหรือดึงข้อมูลที่ LLM จะเข้าถึงไม่ได้ในกรณีอื่นๆ เช่น การตรวจสอบสภาพอากาศ การเรียกใช้สคริปต์ที่เฉพาะเจาะจง หรือการค้นหาฐานข้อมูล แม้ว่าเครื่องมือแต่ละอย่างจะมีประสิทธิภาพ แต่การแชร์เครื่องมืออย่างปลอดภัยและสม่ำเสมอระหว่างเอเจนต์และสภาพแวดล้อม AI ต่างๆ ก็เป็นเรื่องที่ท้าทายมาโดยตลอด MCP แก้ปัญหานี้ด้วยการทำหน้าที่เป็นแพลตฟอร์มมาตรฐานที่สามารถโฮสต์เครื่องมือเหล่านี้และแสดงต่อไคลเอ็นต์ AI ที่เข้ากันได้

Model Context Protocol (MCP) เป็นโปรโตคอลโอเพนซอร์สที่ช่วยให้โมเดล AI เข้าถึงแหล่งข้อมูลและเครื่องมือภายนอกได้อย่างปลอดภัย MCP มีวิธีมาตรฐานสำหรับโมเดลในการโต้ตอบกับสภาพแวดล้อมของตนเอง แทนที่จะต้องเขียนโค้ดการผสานรวมสำหรับเครื่องมือหรือฐานข้อมูลแต่ละรายการ

คุณดูเครื่องมือที่พร้อมใช้งานใน Gemini CLI ได้โดยเรียกใช้ /mcp ภายใน Gemini CLI

ในแล็บนี้ เซิร์ฟเวอร์ GKE MCP จะช่วยให้ Gemini CLI โต้ตอบกับคลัสเตอร์ GKE ได้โดยตรง ซึ่งจะช่วยให้ตรวจสอบทรัพยากร อ่านบันทึก และช่วยคุณแก้ไขข้อบกพร่องได้โดยรับรู้สถานะปัจจุบันของคลัสเตอร์อย่างเต็มที่ ซึ่งจะเปลี่ยน AI จากเครื่องมือวิเคราะห์โค้ดแบบคงที่ให้เป็นผู้ช่วยในการแก้ปัญหาที่ใช้งานได้จริงซึ่งเข้าใจสถานะปัจจุบันของโครงสร้างพื้นฐาน

กำหนดค่าส่วนขยาย GKE MCP

โดยค่าเริ่มต้น Gemini CLI เป็นเครื่องมืออเนกประสงค์ กำหนดค่าเซิร์ฟเวอร์ GKE MCP โดยสร้างไฟล์การกำหนดค่า

  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. ตรวจสอบว่าได้เปิดใช้เซิร์ฟเวอร์ MCP โดยพิมพ์ /mcp ใน Gemini CLI

ขอความช่วยเหลือจาก Gemini เพื่อแก้ไขข้อบกพร่องโดยใช้สถานะคลัสเตอร์

  1. แก้ไขข้อบกพร่องในการทำให้ใช้งานได้ที่ไม่สำเร็จ: ตอนนี้คุณสามารถขอความช่วยเหลือจาก Gemini เพื่อตรวจสอบคลัสเตอร์และแก้ไขไฟล์ Manifest ตามสิ่งที่พบได้แล้ว
    👉💬 ป้อนพรอมต์นี้ลงใน 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 ใช้เครื่องมือ MCP เพื่อเรียกใช้คำสั่ง kubectl เบื้องหลัง โดยจะเห็นข้อผิดพลาด ImagePullBackOff อธิบายสาเหตุ และแนะนำวิธีแก้ไขที่ถูกต้อง
  2. แก้ไขปัญหาที่ซับซ้อน: ขอให้ดูบันทึกข้อผิดพลาดระดับแอปพลิเคชัน
    👉💬 ป้อนพรอมต์นี้ลงใน Gemini CLI:
    Check the logs for the 'contacts' pod. Why is it failing to connect to the database?
    Gemini จะเห็นข้อผิดพลาด "ปฏิเสธการเชื่อมต่อ" และติดตามกลับไปยังการไม่ตรงกันของพอร์ตหรือชื่อบริการใน config.yaml!
  3. ทำซ้ำ: ถาม Gemini ต่อไปเพื่อแก้ไขปัญหาอื่นๆ ที่คุณพบในเฟส 0
    👉💬 ป้อนพรอมต์นี้ใน 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?

หมายเหตุ: หากติดขัดหรือต้องการลองอีกครั้งตั้งแต่ต้น ให้รีเซ็ตไฟล์ Manifest ของ Kubernetes กลับไปเป็นสถานะเริ่มต้นที่ใช้งานไม่ได้ได้ทุกเมื่อโดยเรียกใช้ ../break.sh จากไดเรกทอรี cymbal-bank

7. ระยะที่ 4: เพิ่มศักยภาพให้ทีม (ทักษะของตัวแทน)

สุดท้ายนี้ ขยายความสามารถของ AI ให้ตรงกับความต้องการเฉพาะของคุณโดยการสร้างทักษะของ Agent ที่กำหนดเอง

ทักษะของ Agent คืออะไร

ทักษะ Agent คือแพ็กเกจคำสั่ง สคริปต์ และทรัพยากรที่ขยาย AI Agent สำหรับงานเฉพาะทาง ซึ่งช่วยให้คุณกำหนดมาตรฐานขององค์กรและทำให้เวิร์กโฟลว์ที่ซับซ้อนเป็นแบบอัตโนมัติได้ ทักษะจะอยู่ในไดเรกทอรีที่เฉพาะเจาะจงและมีไฟล์ SKILL.md ที่กำหนดลักษณะการทำงานของทักษะ การสร้างทักษะจะช่วยให้มั่นใจได้ว่า AI จะทำตามกระบวนการที่สอดคล้องกันและทำซ้ำได้ แทนที่จะด้นสด

ไดเรกทอรีทักษะทั่วไปจะมีลักษณะดังนี้

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 CLI ให้สร้างทักษะให้คุณได้โดยอิงตามสิ่งที่คุณได้เรียนรู้ในวันนี้
    👉💬 ป้อนพรอมต์นี้ลงใน Gemini CLI:
    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 ควรแจ้งให้คุณทราบว่าพรอมต์ของคุณได้เปิดใช้งานทักษะ "ผู้สร้างทักษะ" แล้ว ซึ่งเป็นทักษะที่กำหนดค่าไว้ล่วงหน้าใน Gemini CLI ที่ช่วยให้ Gemini สร้างทักษะของเอเจนต์ได้
    Gemini ควรขอสิทธิ์จากคุณในการสร้างไดเรกทอรีทักษะ อนุมัติโดยเลือก "1. อนุญาตครั้งเดียว"
    Gemini จะดำเนินการต่อไปนี้โดยอัตโนมัติ
    • สร้างไดเรกทอรีที่ ~/.gemini/skills/k8s-troubleshooter/
    • สร้างไฟล์ SKILL.md ที่มีวิธีการตามพรอมต์ของคุณ
    • สร้างไดเรกทอรีทรัพยากรมาตรฐาน
  2. รีสตาร์ท Gemini CLI:
    👉💻 ปิด Gemini CLI (/quit) แล้วรีสตาร์ท
    gemini
    
  3. ตรวจสอบว่าโหลดทักษะแล้ว:
    👉💻 ตรวจสอบว่าทักษะทำงานอยู่โดยพิมพ์ /skills ใน Gemini CLI คุณควรเห็น k8s-troubleshooter ในรายการ
  4. วิธีการทำงานในทางปฏิบัติ: ตอนนี้ให้เรียกใช้ทักษะ
    👉💬 ป้อนพรอมต์นี้ลงใน Gemini CLI:
    Use the k8s-troubleshooter skill to find out why the contacts service is failing.
    AI จะทำตามแผนที่มีโครงสร้างใน SKILL.md แทนที่จะด้นสด ซึ่งจะทำให้ได้ผลลัพธ์ที่สอดคล้องกันมากขึ้น

แบบฝึกหัด: สร้างทักษะของคุณเอง

ลองนึกถึงเวิร์กโฟลว์ประจำวันของคุณ คุณจะเปลี่ยนงานที่ต้องทำซ้ำๆ ให้เป็นระบบอัตโนมัติด้วยทักษะใดได้บ้าง

  • ไอเดีย: ทักษะในการตรวจสอบไฟล์ Manifest เพื่อดูแนวทางปฏิบัติแนะนำด้านความปลอดภัยก่อนการติดตั้งใช้งาน
  • แนวคิด: ทักษะในการสร้างการกำหนดค่าคลัสเตอร์ GKE ที่ซับซ้อนตามประเภทภาระงาน

8. บทสรุป

แล็บนี้แสดงวิธีใหม่ในการโต้ตอบกับโครงสร้างพื้นฐานของระบบคลาวด์โดยการเลื่อนผ่านบริบท AI ระดับต่างๆ การเปลี่ยนจากบริบทที่ไม่มีเลยไปเป็นบริบทโครงสร้างพื้นฐานทั้งหมด (Gemini CLI + GKE MCP) จะช่วยให้คุณเห็นว่าผู้ช่วย AI มีประสิทธิภาพมากขึ้นเพียงใดเมื่อเห็นไฟล์และสถานะคลัสเตอร์

สรุปเกี่ยวกับ Labs

  • บริบทมีความสำคัญ: คุณจะเห็นว่าเครื่องมือ AI ที่ไม่มีบริบทไม่สามารถช่วยแก้ไขปัญหาในโค้ดเบสที่เฉพาะเจาะจงได้
  • บริบทของเทอร์มินัล: คุณใช้ Gemini CLI เพื่อวิเคราะห์ไฟล์ในเครื่องและระบุข้อผิดพลาดในการกำหนดค่าจากพื้นที่ทำงานโดยตรง
  • การแก้ไขข้อบกพร่องแบบมีบริบทครบถ้วน: คุณใช้ Gemini CLI กับ MCP เพื่อให้ AI วินิจฉัยและแก้ไขปัญหาที่ซับซ้อนโดยการเชื่อมโยงไฟล์ในฐานของโค้ดกับสถานะคลัสเตอร์ที่ใช้งานจริง
  • ความสามารถในการขยาย: คุณจะได้เรียนรู้เกี่ยวกับทักษะและวิธีใช้ทักษะเพื่อจัดระเบียบความรู้ขององค์กร

ล้างข้อมูล

เรียกใช้สคริปต์การแยกเพื่อป้องกันการเรียกเก็บเงินอย่างต่อเนื่อง โปรดทราบว่าคุณไม่จำเป็นต้องทำตามขั้นตอนนี้หากเรียกใช้แล็บใน Qwiklabs

👉💻 เรียกใช้คำสั่งต่อไปนี้จากไดเรกทอรีของเวิร์กช็อป

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

ขั้นตอนถัดไป

คำแนะนำสำหรับการอ่านเพิ่มเติมมีดังนี้

9. ภาคผนวก: วิธีแก้ไขปัญหาไฟล์ Manifest

หากคุณติดขัดหรือต้องการยืนยันข้อผิดพลาด โปรดดูรายการการหยุดทำงานที่เกิดขึ้นในไดเรกทอรี manifests-broken/ และวิธีแก้ไข

  1. URL ที่มีรูปแบบไม่ถูกต้องในconfig.yaml:
    • ข้อผิดพลาด: TRANSACTIONS_API_ADDR: "ledgerwriter::8080" (เครื่องหมายทวิภาคคู่)
    • สาเหตุ: แอปพลิเคชันแยกวิเคราะห์ที่อยู่ไม่สำเร็จ จึงทำให้เกิดข้อผิดพลาดในการเชื่อมต่อ
    • วิธีแก้ไข: เปลี่ยนกลับเป็น "ledgerwriter:8080"
  2. ป้ายกำกับไม่ตรงกันใน contacts.yaml
    • ข้อผิดพลาด: ตั้งค่าตัวเลือกบริการเป็น app: contacts-backend แทน contacts
    • สาเหตุ: บริการไม่พบพ็อด (ซึ่งยังคงมี app: contacts) จึงไม่สามารถกำหนดเส้นทางการรับส่งข้อมูลได้
    • วิธีแก้ไข: เปลี่ยนตัวเลือกเป็น app: contacts
  3. พอร์ตไม่ตรงกันใน userservice.yaml:
    • ข้อผิดพลาด: ตั้งค่าบริการ targetPort เป็น 8081 แทนที่จะเป็น 8080
    • สาเหตุ: ระบบจะส่งต่อการรับส่งข้อมูลที่ส่งไปยังบริการไปยังพอร์ตคอนเทนเนอร์ที่ไม่ถูกต้อง ซึ่งทำให้การเชื่อมต่อถูกปฏิเสธ
    • แก้ไข: เปลี่ยน targetPort กลับเป็น 8080
  4. ชื่อบริการไม่ตรงกันใน config.yaml:
    • ข้อผิดพลาด: BALANCES_API_ADDR: "balance-reader:8080" (แทนที่จะเป็น balancereader)
    • สาเหตุ: ชื่อโฮสต์จะไม่ได้รับการแก้ไขใน DNS เนื่องจากบริการมีชื่อว่า balancereader
    • วิธีแก้ไข: เปลี่ยนกลับเป็น "balancereader:8080"
  5. นโยบายการพุลอิมเมจใน contacts.yaml:
    • ข้อผิดพลาด: imagePullPolicy: Never
    • สาเหตุ: K8s จะไม่ดึงรูปภาพจากรีจิสทรีเนื่องจากถือว่าเป็นรูปภาพในเครื่อง โดยจะล้มเหลวพร้อมกับ ErrImagePull
    • แก้ไข: นำบรรทัดออกหรือตั้งค่าเป็น IfNotPresent
  6. การตรวจสอบความพร้อมดำเนินการไม่สำเร็จใน userservice.yaml:
    • ข้อผิดพลาด: เปลี่ยนเส้นทางเป็น /healthz แทนที่จะเป็น /ready
    • สาเหตุ: คอนเทนเนอร์ไม่แสดง /healthz การตรวจสอบจึงล้มเหลวและระบบจะไม่ทำเครื่องหมายว่าพ็อดพร้อมใช้งาน
    • วิธีแก้ไข: เปลี่ยนเส้นทางกลับเป็น /ready
  7. ขีดจำกัดของทรัพยากรใน contacts.yaml
    • ข้อผิดพลาด: ตั้งค่าขีดจำกัดหน่วยความจำเป็น 10Mi แทน 128Mi
    • สาเหตุ: แอปต้องการหน่วยความจำมากขึ้นเพื่อเริ่มต้น ทำให้ระบบปิดแอปเนื่องจากหน่วยความจำไม่เพียงพอ (OOMKilled)
    • แก้ไข: กู้คืนขีดจำกัดของหน่วยความจำ
  8. ไม่มีตัวแปรสภาพแวดล้อมใน frontend.yaml:
    • ข้อผิดพลาด: นำตัวแปรสภาพแวดล้อม REGISTERED_OAUTH_CLIENT_ID ออกแล้ว
    • สาเหตุ: แอปอาจล้มเหลวหรือปิดใช้ฟีเจอร์หากไม่มีตัวแปรสภาพแวดล้อมที่คาดไว้
    • แก้ไข: กู้คืนคำจำกัดความของตัวแปรสภาพแวดล้อม
  9. คีย์ ConfigMap ไม่ตรงกันใน frontend.yaml:
    • ข้อผิดพลาด: key: DEMO_USER แทนที่จะเป็น DEMO_LOGIN_USERNAME
    • สาเหตุ: K8s ไม่พบคีย์ใน ConfigMap ทำให้คอนเทนเนอร์เริ่มทำงานไม่ได้
    • วิธีแก้ไข: เปลี่ยนแป้นกลับเป็น DEMO_LOGIN_USERNAME
  10. การสะกดชื่อรูปภาพผิดใน userservice.yaml:
    • ข้อผิดพลาด: user-service แทนที่จะเป็น userservice
    • สาเหตุ: ไม่มีรูปภาพในรีจิสทรี ทำให้เกิด ImagePullBackOff
    • วิธีแก้ไข: แก้ไขชื่อรูปภาพ
  11. ปัญหาเกี่ยวกับบัญชีบริการใน contacts.yaml
    • ข้อผิดพลาด: bank-of-anthos-sa แทนที่จะเป็น bank-of-anthos
    • เหตุผล: ไม่มี ServiceAccount หรือไม่มีสิทธิ์
    • แก้ไข: ใช้ชื่อ ServiceAccount ที่ถูกต้อง