Bộ công cụ AI của Cloud Engineering: Kỹ thuật nền tảng trên GKE bằng Gemini

1. Giới thiệu

Khắc phục sự cố triển khai Kubernetes bị lỗi là một phần thường gặp và thường gây khó chịu trong cuộc sống hằng ngày của kỹ sư nền tảng. Việc này thường đòi hỏi nhiều hoạt động điều tra thủ công: xem xét kỹ nhật ký, chạy các lệnh kubectl describe và tham chiếu chéo các tệp YAML để tìm ra một điểm không khớp hoặc cấu hình sai duy nhất.

Mặc dù chatbot AI đa năng có thể giúp giải thích các khái niệm hoặc viết mã cơ bản, nhưng chúng hoạt động độc lập. Chúng không biết gì về cơ sở mã cụ thể của bạn hoặc trạng thái trực tiếp của cụm, dẫn đến việc phải sao chép và dán thủ công cũng như chuyển đổi ngữ cảnh rất nhiều.

Trong phòng thí nghiệm này, bạn sẽ trải nghiệm cách thu hẹp khoảng cách này bằng cách sử dụng các công cụ AI với mức độ ngữ cảnh ngày càng tăng. Bạn sẽ sử dụng Gemini CLI và Giao thức ngữ cảnh mô hình (MCP) để khắc phục sự cố cho một ứng dụng bị lỗi trên GKE. Khi kết thúc lớp học này, bạn sẽ hiểu cách sử dụng AI có thể nhận biết các tệp và cơ sở hạ tầng của bạn để giải quyết các vấn đề phức tạp nhanh hơn, cũng như cách hệ thống hoá các quy trình này thành "Kỹ năng" có thể tái sử dụng cho nhóm của bạn.

Các khái niệm cốt lõi

  • Kỹ thuật nền tảng: Kỹ thuật nền tảng là hoạt động xây dựng và duy trì các công cụ cũng như quy trình nội bộ giúp nhà phát triển phần mềm quản lý cơ sở hạ tầng của riêng họ mà không cần phải là chuyên gia về mọi dịch vụ đám mây cơ bản. Mục tiêu là giảm thiểu các rào cản kỹ thuật trong khi vẫn duy trì tính nhất quán và bảo mật. Bằng cách tạo một lộ trình chuẩn hoá, các nhóm nền tảng đảm bảo rằng nhà phát triển ứng dụng có thể triển khai một cách an toàn và nhanh chóng, trong khi nhóm nền tảng vẫn duy trì quyền kiểm soát đối với hoạt động quản trị và chi phí.
  • Gemini CLI: Gemini CLI là một giao diện dòng lệnh cho phép bạn tương tác trực tiếp với các mô hình Gemini từ cửa sổ dòng lệnh. Không giống như chatbot dựa trên web thông thường, CLI được thiết kế để tồn tại trong môi trường phát triển của bạn, giúp bạn dễ dàng tích hợp AI vào các quy trình công việc hiện có dựa trên shell. Công cụ này cho phép bạn chuyển hướng đầu ra từ các lệnh khác trực tiếp vào mô hình và thực thi các chỉ dẫn mà không cần rời khỏi thiết bị đầu cuối.
  • Giao thức ngữ cảnh mô hình (MCP): MCP là một tiêu chuẩn mở cho phép mô hình AI kết nối với các công cụ hoặc nguồn dữ liệu cụ thể. Nếu không có MCP, mô hình AI chỉ biết những gì đã được huấn luyện và không thể xem các tài nguyên cụ thể của bạn. Với máy chủ GKE MCP, Gemini CLI có thể chủ động truy vấn API của dự án trên Google Cloud, kiểm tra trạng thái của các cụm và thay mặt bạn thực thi các lệnh. Nó đóng vai trò là cầu nối giữa công cụ suy luận của mô hình và API GKE thực tế.
  • Kỹ năng của tác nhân: Kỹ năng là các gói hướng dẫn, tập lệnh và tài nguyên giúp mở rộng khả năng của một tác nhân AI cho các tác vụ chuyên biệt. Kỹ năng cho phép bạn hệ thống hoá các tiêu chuẩn của tổ chức và tự động hoá các quy trình công việc phức tạp.

Mục tiêu của Labs

Trong lớp học lập trình này, bạn sẽ:

  1. Trải nghiệm tiến trình ngữ cảnh: Xem cách tăng ngữ cảnh giúp cải thiện khả năng giải quyết vấn đề của AI.
  2. Khắc phục sự cố theo cách thủ công so với bằng AI: So sánh mức độ khó của việc gỡ lỗi theo cách thủ công với quy trình công việc được hỗ trợ bằng AI.
  3. Gỡ lỗi toàn bộ ngữ cảnh: Sử dụng Gemini CLI với máy chủ GKE MCP để gỡ lỗi ứng dụng với khả năng nhận biết toàn bộ cơ sở hạ tầng.
  4. Mở rộng các chức năng: Tìm hiểu cách viết các Kỹ năng tuỳ chỉnh để tự động hoá quy trình công việc.

Lưu ý về kết quả đầu ra của LLM

Do tính chất của phòng thí nghiệm này và cách LLM hoạt động, đầu ra bạn nhận được có thể sẽ khác với đầu ra ví dụ được hiển thị. Đây là hành vi dự kiến đối với AI tạo sinh. Tập trung vào việc tìm hiểu các bước và suy luận mà mô hình đưa ra, thay vì cố gắng sao chép chính xác văn bản hoặc định dạng trong các ví dụ.

2. Thiết lập dự án

Trước khi bắt đầu thực hành, hãy chuẩn bị môi trường của bạn. Mở Cloud Shell, chọn dự án của bạn rồi chạy các tập lệnh thiết lập. Hãy bắt đầu!

Mở Cloud Shell

Trong phòng thí nghiệm này, hãy sử dụng Cloud Shell, một môi trường thiết bị đầu cuối dựa trên trình duyệt do Google Cloud cung cấp. Môi trường này được định cấu hình sẵn với tất cả các công cụ bạn cần, bao gồm cả Google Cloud CLI (gcloud), kubectl và Gemini CLI. Nhờ đó, bạn không cần phải cài đặt các công cụ này trên máy cục bộ.

  1. Chuyển đến Google Cloud Console.
  2. Nhìn vào tiêu đề ở trên cùng bên phải của bảng điều khiển rồi nhấp vào nút Activate Cloud Shell (Kích hoạt Cloud Shell) (nút này trông giống như một dấu nhắc của thiết bị đầu cuối >_).
  3. Một phiên dòng lệnh sẽ mở ra ở cuối cửa sổ trình duyệt. Nếu được nhắc, hãy nhấp vào Tiếp tục.

Chọn dự án

Trong thiết bị đầu cuối Cloud Shell, hãy đảm bảo rằng bạn đang làm việc trong đúng dự án.

  1. Chọn một dự án hiện có hoặc tạo một dự án mới dành riêng cho phòng thí nghiệm này trong Bảng điều khiển.
  2. Ghi lại Mã dự án. Đặt dự án trong trình bao hiện tại bằng cách chạy: gcloud config set project [YOUR_PROJECT_ID]

Thiết lập phòng thí nghiệm

Bây giờ, hãy chạy các tập lệnh thiết lập để chuẩn bị môi trường và đưa các lỗi vào phòng thí nghiệm.

  1. Sao chép kho lưu trữ:
    👉💻 Chạy các lệnh sau để chỉ sao chép thư mục phòng thí nghiệm:
    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. Chuyển đến thư mục phòng thí nghiệm:
    👉💻 Chạy:
    cd ~/devrel-demos/codelabs/ai-toolkit-lab-1/
    
  3. Đặt biến môi trường:
    👉💻 Chạy các lệnh sau để đặt dự án và khu vực của bạn:
    export PROJECT_ID=$(gcloud config get-value project)
    export REGION=us-central1
    
  4. Chạy tập lệnh thiết lập:
    Tập lệnh này sẽ bật các API được liệt kê bên dưới, tạo một cụm GKE Autopilot và đảm bảo bạn đã cài đặt các công cụ cần thiết.
    👉💻 Chạy tập lệnh từ thư mục gốc:
    ./setup.sh
    
    Lưu ý: Quá trình tạo cụm có thể mất từ 5 đến 10 phút.
  5. Khởi động trạng thái bị lỗi:
    Để mô phỏng tình huống đồng nghiệp để lại cho bạn một môi trường bị lỗi, hãy chạy tập lệnh break.sh. Thao tác này sẽ sao chép các tệp kê khai bị hỏng vào thư mục cơ sở mã đang hoạt động.
    👉💻 Chạy tập lệnh:
    ./break.sh
    
  6. Chuẩn bị cho các bài tập thực hành:
    Để ngăn AI gian lận (xem các giải pháp), hãy chuyển sang thư mục cymbal-bank cho phần còn lại của bài tập.
    👉💻 Chạy:
    cd ~/devrel-demos/codelabs/ai-toolkit-lab-1/cymbal-bank
    

Các API đã bật

Tập lệnh thiết lập cho phép một số API Google Cloud. Sau đây là những việc họ làm:

  • container.googleapis.com: Google Kubernetes Engine API. API này là bắt buộc đối với mọi thao tác ở cấp cụm.
  • generativelanguage.googleapis.com: API cho phép Gemini CLI giao tiếp với các mô hình Gemini.
  • cloudresourcemanager.googleapis.com: Cần thiết để kiểm tra siêu dữ liệu ở cấp dự án và quản lý quyền.
  • logging.googleapis.com: Cần thiết cho việc khắc phục sự cố, vì miền này cho phép tìm nạp và phân tích nhật ký từ các vùng chứa của bạn.

3. Giai đoạn 0: Khắc phục sự cố theo cách thủ công (không có AI)

Bây giờ bạn đã ở trong thư mục cymbal-bank, hãy thử tìm lỗi theo cách thủ công. Đây là "cách khó". Trải nghiệm phiên bản cơ sở trước khi để AI xử lý phần việc khó. Khắc phục sự cố theo cách thủ công có nghĩa là sử dụng các công cụ tiêu chuẩn như kubectl để kiểm tra trạng thái cụm, tìm nạp nhật ký và đọc các tệp YAML để phát hiện điểm không nhất quán. Việc này thường mất nhiều thời gian, tẻ nhạt và đòi hỏi chuyên môn để kết nối các điểm dữ liệu. Đây là điểm tham chiếu hoàn hảo cho các công cụ AI mà bạn sẽ sử dụng sau này.

  1. Thử triển khai: Hãy xem Kubernetes nghĩ gì về các tệp kê khai này.
    👉💻 Chạy lệnh sau để áp dụng các tệp kê khai:
    kubectl apply -f kubernetes-manifests/
    
    Các pod có thể mất vài giây để khởi động. Bạn có thể theo dõi để biết các pod đã hoạt động bằng cách sử dụng "watch kubectl get pods". Sau khi các pod này hoạt động, hãy dùng tổ hợp phím ctrl+c để thoát lệnh watch.Bạn sẽ thấy 2 pod không hoạt động trong danh sách:
    • Pod giao diện người dùng cho thấy "CreateContainerConfigError". Loại lỗi này thường cho thấy rằng vùng chứa đang gặp sự cố khi tải cấu hình bắt buộc. Hãy nghĩ về những tài nguyên bên ngoài mà một vùng chứa có thể cần để khởi động – có biến môi trường, bí mật hoặc ConfigMap nào có thể bị định cấu hình sai hoặc bị thiếu không? Bạn sẽ muốn điều tra cấu hình của pod để tìm ra nguyên nhân cụ thể.
    • Pod userservice đang ở trạng thái "ImagePullBackOff". Khi bạn thấy thông báo này, điều đó thường có nghĩa là cụm không thể truy xuất hình ảnh vùng chứa mà cụm được yêu cầu sử dụng. Hãy xem xét thông tin chi tiết của yêu cầu về hình ảnh: tên và thẻ của hình ảnh có hoàn toàn chính xác không? Có vấn đề nào về quyền tiềm ẩn với sổ đăng ký không? Hãy xem hình ảnh được lấy từ đâu để biết lý do yêu cầu không thành công.
  2. Kiểm tra thiệt hại: Sử dụng các lệnh Kubernetes tiêu chuẩn để xem lỗi xảy ra ở đâu.
    • 👉💻 Kiểm tra trạng thái của các pod cũng như tên của chúng:
      kubectl get pods
      
      • Quan sát: Bạn thấy các nhóm quảng cáo trong ImagePullBackOff, CrashLoopBackOff, Pending hoặc CreateContainerConfigError.
      • Lưu ý: Một nhóm trong trạng thái Running không nhất thiết có nghĩa là nhóm đó đang hoạt động bình thường. Ví dụ: có thể thiếu đủ các lệnh kiểm tra tình trạng (trạng thái hoạt động/sẵn sàng), khiến nó được đánh dấu là đang chạy ngay cả khi ứng dụng bên trong đang gặp lỗi. Nhật ký có thể cho chúng ta biết các lỗi, mặc dù có vẻ như nhóm đang chạy. Bạn cần khắc phục tổng cộng 11 lỗi.
    • 👉💻 Mô tả một pod không hoạt động để xem các sự kiện (thay thế [POD_NAME] bằng tên pod thực tế):
      kubectl describe pod [POD_NAME]
      
    • 👉💻 Kiểm tra nhật ký của một pod không thành công để xem lỗi ứng dụng:
      kubectl logs [POD_NAME]
      

Ảnh chụp màn hình cho thấy đầu ra của lệnh kubectl get pods

  1. Công việc điều tra: Mở các tệp kê khai trong kubernetes-manifests/ bằng Cloud Shell Editor hoặc cat trong cửa sổ dòng lệnh. Hãy thử liên kết các lỗi mà bạn thấy trong nhật ký và sự kiện với cấu hình trong tệp YAML.Thử thách: Hãy thử khắc phục CHỈ MỘT lỗi theo cách thủ công. Hãy chú ý cách bạn phải chuyển đổi giữa các tệp để tìm ra phần còn lại của chuỗi lỗi.

4. Giai đoạn 1: Hỏi trên web (Giao diện người dùng Gemini trên web)

Vì việc khắc phục sự cố theo cách thủ công rất chậm, nên hãy thử dùng một trợ lý AI. Ứng dụng web Gemini là một giao diện trò chuyện đa năng và mạnh mẽ. Ứng dụng này có khả năng giải thích các khái niệm và tạo đoạn mã. Tuy nhiên, ứng dụng này hoạt động mà không có ngữ cảnh về môi trường cụ thể của bạn. Ứng dụng này không thể xem tệp, kiểm tra cụm hoặc chạy lệnh. Bạn phải sao chép và dán thông báo lỗi cũng như nội dung tệp theo cách thủ công.

Ảnh chụp màn hình cho thấy giao diện người dùng web của Gemini

  1. Truy cập Gemini: Mở gemini.google.com trong một thẻ mới. Bạn cần đăng nhập bằng Tài khoản Google của riêng mình.
  2. Yêu cầu trợ giúp về một lỗi cụ thể: Giả sử bạn thấy lỗi ImagePullBackOff trên pod userservice.
    👉💬 Nhập câu lệnh sau vào giao diện người dùng web của 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. Câu trả lời của AI: Gemini đưa ra cho bạn danh sách các nguyên nhân phổ biến:
    • Hình ảnh không tồn tại.
    • Bạn không có quyền kéo tệp đó.
    • Có lỗi chính tả.
    Bạn nên kiểm tra sổ đăng ký hoặc quyền IAM. Nhưng nó không thể biết tên hình ảnh thực tế là userservice (không có dấu gạch ngang) trừ phi nó thấy dự án của bạn.

Điểm khó khăn chính ở đây là Gemini không thể nhìn thấy môi trường cục bộ của bạn. Để có được ngữ cảnh cần thiết, bạn sẽ phải cung cấp ngữ cảnh theo cách thủ công (bằng cách nhắc và sao chép-dán văn bản xung quanh). Việc này tốn thời gian và dễ xảy ra lỗi.

5. Giai đoạn 2: Sức mạnh của cửa sổ dòng lệnh (Gemini CLI)

Bây giờ, hãy chuyển sang cửa sổ dòng lệnh bằng Gemini CLI. Gemini CLI khai thác sức mạnh của các mô hình Gemini ngay trên cửa sổ dòng lệnh. CLI nằm ngay tại nơi bạn làm việc. Nó đọc các tệp cục bộ, chấp nhận dữ liệu đầu vào được chuyển hướng và thậm chí thực thi các lệnh shell thay cho bạn (với sự phê duyệt của bạn). Điều này giúp bạn tích hợp AI vào quy trình làm việc mà không cần chuyển đổi bối cảnh. Để biết thêm thông tin chi tiết và cách sử dụng nâng cao, hãy tham khảo tài liệu chính thức về Gemini CLI.

Lưu ý: Hiện tại, Antigravity CLI đã được phát hành chính thức và là phiên bản kế nhiệm của Gemini CLI. Phòng thí nghiệm này tiếp tục sử dụng Gemini CLI. Để biết thêm thông tin về Antigravity CLI, hãy xem tài liệu chính thức về Antigravity CLI.

Bối cảnh và khả năng hiển thị

Trước khi xem hướng dẫn, xin lưu ý rằng khả năng hiển thị của Gemini CLI đối với dự án của bạn phụ thuộc vào nơi bạn chạy công cụ này. Mô hình có thể xem các tệp và thư mục liên quan đến thư mục đang hoạt động của bạn. Nếu bạn kích hoạt công cụ này từ thư mục gốc của dự án, thì công cụ này sẽ có quyền truy cập vào tất cả các tệp trong dự án đó. Nếu bạn kích hoạt ứng dụng này từ một thư mục con, thì chế độ xem của ứng dụng sẽ bị hạn chế ở thư mục con đó và các thư mục con của thư mục con đó. Luôn đảm bảo bạn đang ở đúng thư mục trước khi yêu cầu mô hình phân tích hoặc sửa đổi tệp!

Khởi động Gemini CLI

Cloud Shell có Gemini CLI theo mặc định. Bạn chỉ cần khởi động ứng dụng này để bắt đầu sử dụng với các tệp trên thiết bị.

  1. Chuyển đến thư mục Cymbal Bank:
    👉💻 Chạy lệnh sau để đảm bảo bạn đang ở đúng thư mục:
    cd ~/devrel-demos/codelabs/ai-toolkit-lab-1/cymbal-bank
    
  2. Khởi động Gemini CLI:
    👉💻 Chạy lệnh sau để khởi động Gemini CLI:
    gemini
    

Ảnh chụp màn hình cho thấy giao diện của Gemini CLI

Sử dụng Gemini CLI

Tất cả những gì bạn thực sự biết về ứng dụng này là nơi tìm thấy mã và ứng dụng đang gặp lỗi. Hãy tìm hiểu thêm và xem Gemini có thể giúp bạn khắc phục ứng dụng này như thế nào. Trước tiên, hãy thử kiểm tra khả năng khám phá bối cảnh của Gemini bằng cách đặt câu hỏi về các tệp ứng dụng mà Gemini có thể xem.

  1. Khám phá cơ sở mã: Yêu cầu Gemini giải thích ứng dụng này là gì và làm gì.
    👉💬 Nhập câu lệnh này vào Gemini CLI:
    What is this application and what does it do?
    Gemini CLI sẽ đọc các tệp trong thư mục hiện tại và cung cấp thông tin tổng quan cấp cao về dự án.
  2. Cố gắng tìm vấn đề trong cơ sở mã: Vì Gemini CLI có thể xem các tệp của bạn, hãy yêu cầu công cụ này tìm điểm không khớp.
    👉💬 Nhập câu lệnh sau vào 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 sẽ đọc các tệp và phát hiện sự không khớp giữa app: contacts-backendapp: contacts. Đây là một bước tiến lớn so với các giai đoạn trước.
  3. Yêu cầu Gemini sửa lỗi:
    👉💬 Nhập câu lệnh này vào Gemini CLI:
    Fix the label mismatch in contacts.yaml so the service matches the deployment.
    Gemini CLI sẽ cho bạn thấy tệp YAML đã được sửa hoặc thậm chí áp dụng thay đổi nếu bạn phê duyệt lệnh.
  4. Hạn chế: Mặc dù thấy các tệp, nhưng công cụ này vẫn không biết thực sự đang chạy trong cụm của bạn. Nếu một nhóm không thành công do lỗi thời gian chạy không rõ ràng trong YAML tĩnh, thì công cụ này không thể trợ giúp nếu không có nhật ký hoặc trạng thái cụm.

Lưu ý: Gemini CLI sẽ yêu cầu bạn đồng ý khi chạy các lệnh hoặc sửa đổi tệp. Điều này giúp bạn duy trì quyền kiểm soát đối với môi trường của mình. Khi thấy một lời nhắc như bên dưới, bạn có thể nhấn phím "enter" để trả lời "1. Cho phép một lần" cho mỗi yêu cầu hành động. Bạn cũng có thể nhấn phím mũi tên xuống rồi nhấn phím Enter để chọn "2. Cho phép cho phiên này". Khi đó, Gemini CLI sẽ luôn thực hiện hành động đó một cách độc lập mà không cần xin phép bạn trong suốt cuộc trò chuyện này. Tuy nhiên, nếu bạn đóng Gemini CLI rồi mở lại, thì Gemini CLI sẽ không còn quyền đó nữa và sẽ yêu cầu bạn cấp quyền một lần nữa trước khi thực hiện bất kỳ hành động nào.

Ảnh chụp màn hình cho thấy chế độ xem về sự đồng ý của Gemini CLI

Lưu ý: Nếu gặp khó khăn hoặc muốn thử lại từ đầu, bạn có thể đặt lại các tệp kê khai Kubernetes về trạng thái ban đầu bất cứ lúc nào bằng cách chạy ../break.sh từ thư mục cymbal-bank.

Lưu ý: Nếu bạn đạt đến hạn mức sử dụng, hãy chọn "Dừng" rồi chạy /model để xem những mô hình nào đã đạt đến hạn mức và chuyển sang một mô hình khác, chẳng hạn như gemini-2.5-flash-lite. Sau đó, hãy nhắc mô hình bằng lệnh "tiếp tục" để tiếp tục thực hành bằng mô hình mới.

6. Giai đoạn 3: Gỡ lỗi toàn bộ ngữ cảnh (Gemini CLI + GKE MCP)

Mặc dù Giai đoạn 2 cho thấy sức mạnh của AI khi có thể xem các tệp của bạn, nhưng giai đoạn này cũng có nhiều điểm bất tiện. Bạn phải phê duyệt từng tệp đọc và hành động của công cụ theo cách thủ công, điều này gây ra nhiều khó khăn trong một phiên gỡ lỗi phức tạp. Giai đoạn 3 giới thiệu máy chủ GKE MCP để giúp khắc phục vấn đề này, cung cấp cho AI "khả năng nhận biết cơ sở hạ tầng" trực tiếp. Nhờ đó, Gemini có thể khắc phục sự cố nhật ký, sự kiện và siêu dữ liệu mà ít bị gián đoạn theo cách thủ công hơn, tạo ra một quy trình khắc phục sự cố tự động và mạch lạc hơn.

MCP là gì?

Để hiểu về MCP, trước tiên, bạn cần hiểu khái niệm về công cụ trong thế giới AI. Về cơ bản, công cụ là một hàm hoặc ứng dụng bên ngoài mà LLM có thể dùng để thực hiện các hành động hoặc tìm nạp dữ liệu mà nếu không có công cụ này thì LLM sẽ không thể truy cập được, chẳng hạn như kiểm tra thời tiết, chạy một tập lệnh cụ thể hoặc truy vấn cơ sở dữ liệu. Mặc dù các công cụ riêng lẻ rất mạnh mẽ, nhưng việc chia sẻ chúng một cách an toàn và nhất quán giữa các môi trường và tác nhân AI khác nhau luôn là một thách thức. MCP giải quyết vấn đề này bằng cách đóng vai trò là một nền tảng tiêu chuẩn có thể lưu trữ các công cụ này và cung cấp chúng cho mọi ứng dụng AI tương thích.

Giao thức ngữ cảnh mô hình (MCP) là một giao thức nguồn mở cho phép các mô hình AI truy cập một cách an toàn vào các nguồn dữ liệu và công cụ bên ngoài. Thay vì mã hoá cứng các hoạt động tích hợp cho mọi công cụ hoặc cơ sở dữ liệu cụ thể, MCP cung cấp một cách thức chuẩn hoá để các mô hình tương tác với môi trường của chúng.

Bạn có thể xem các công cụ có trong Gemini CLI bằng cách chạy /mcp trong Gemini CLI.

Trong phòng thí nghiệm này, máy chủ GKE MCP cho phép Gemini CLI tương tác trực tiếp với cụm GKE của bạn, giúp Gemini CLI kiểm tra tài nguyên, đọc nhật ký và giúp bạn gỡ lỗi khi nắm rõ trạng thái hoạt động của cụm. Điều này biến AI từ một trình phân tích mã tĩnh thành một trợ lý khắc phục sự cố chủ động, hiểu được trạng thái hoạt động của cơ sở hạ tầng.

Định cấu hình tiện ích MCP của GKE

Theo mặc định, Gemini CLI là một công cụ đa năng. Định cấu hình máy chủ MCP GKE bằng cách tạo một tệp cấu hình.

  1. 👉💻 Trước tiên, hãy thoát Gemini CLI nếu bạn vẫn đang ở trong đó bằng cách nhập /quit.
  2. 👉💻 Chạy lệnh sau để tạo thư mục tiện ích:
    mkdir -p ~/.gemini/extensions/gke
    
  3. 👉💻 Chạy lệnh sau để tạo tệp cấu hình. Lệnh này sẽ tự động chèn PROJECT_ID vào tệp:
    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. 👉💻 Bắt đầu Gemini CLI:
    gemini
    
  5. Xác minh rằng máy chủ MCP đã được bật bằng cách nhập /mcp trong Gemini CLI.

Hỏi Gemini gỡ lỗi bằng trạng thái cụm

  1. Gỡ lỗi khi triển khai không thành công: Giờ đây, hãy yêu cầu Gemini kiểm tra cụm và sửa các tệp kê khai dựa trên những gì tìm thấy.
    👉💬 Nhập câu lệnh này vào 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 sử dụng các công cụ MCP để gọi các lệnh kubectl ở chế độ nền. Gemini thấy lỗi ImagePullBackOff, giải thích nguyên nhân và đề xuất cách khắc phục chính xác.
  2. Khắc phục các vấn đề phức tạp: Yêu cầu Gemini xem nhật ký để tìm lỗi ở cấp ứng dụng.
    👉💬 Nhập câu lệnh sau vào Gemini CLI:
    Check the logs for the 'contacts' pod. Why is it failing to connect to the database?
    Gemini nhận thấy lỗi kết nối bị từ chối và truy vết lỗi đó về sự không khớp cổng hoặc sự không khớp tên dịch vụ trong config.yaml!
  3. Lặp lại: Tiếp tục yêu cầu Gemini khắc phục những vấn đề khác mà bạn tìm thấy trong Giai đoạn 0.
    👉💬 Nhập câu lệnh này vào Gemini CLI:
    Check if the service 'contacts' is correctly routing traffic to its pods
    👉💬 Nhập câu lệnh này vào Gemini CLI:
    Are there any pods failing due to resource limits?

Lưu ý: Nếu gặp khó khăn hoặc muốn thử lại từ đầu, bạn có thể đặt lại các tệp kê khai Kubernetes về trạng thái ban đầu bất cứ lúc nào bằng cách chạy ../break.sh từ thư mục cymbal-bank.

7. Giai đoạn 4: Trang bị cho nhóm (Kỹ năng của nhân viên hỗ trợ)

Cuối cùng, hãy mở rộng các chức năng của AI cho nhu cầu cụ thể của bạn bằng cách tạo các Kỹ năng tuỳ chỉnh của tác nhân.

Kỹ năng của tác nhân là gì?

Kỹ năng của tác nhân là các gói hướng dẫn, tập lệnh và tài nguyên giúp mở rộng tác nhân AI cho các tác vụ chuyên biệt. Các kỹ năng này cho phép bạn hệ thống hoá các tiêu chuẩn của tổ chức và tự động hoá các quy trình công việc phức tạp. Một kỹ năng nằm trong một thư mục cụ thể và chứa một tệp SKILL.md xác định hành vi của kỹ năng đó. Bằng cách tạo kỹ năng, bạn đảm bảo AI tuân theo một quy trình nhất quán, có thể lặp lại thay vì ứng biến.

Một thư mục Kỹ năng điển hình sẽ có dạng như sau:

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

Xây dựng Kỹ năng khắc phục sự cố Kubernetes

Thay vì tạo các tệp này theo cách thủ công, Gemini CLI cung cấp một cách hiệu quả để tạo khung kỹ năng bằng ngôn ngữ tự nhiên.

Hãy tưởng tượng bạn muốn tạo một Kỹ năng có tên là k8s-troubleshooter để tự động hoá các bước mà bạn vừa thực hiện.

  1. Tạo kỹ năng thông qua câu lệnh: Bạn có thể yêu cầu Gemini CLI tạo kỹ năng cho bạn dựa trên những gì bạn đã học được hôm nay.
    👉💬 Nhập câu lệnh này vào 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.
    Tương tự như khi gọi một công cụ hoặc thực hiện một hành động, Gemini CLI sẽ cho bạn biết rằng câu lệnh của bạn đã kích hoạt kỹ năng "trình tạo kỹ năng". Đây là một kỹ năng được định cấu hình sẵn trong Gemini CLI, cho phép Gemini tạo Kỹ năng của tác nhân.
    Gemini sẽ yêu cầu bạn cấp quyền tạo thư mục kỹ năng. Hãy phê duyệt bằng cách chọn "1. Cho phép một lần".
    Gemini sẽ tự động:
    • Tạo một thư mục tại ~/.gemini/skills/k8s-troubleshooter/.
    • Tạo tệp SKILL.md có hướng dẫn dựa trên câu lệnh của bạn.
    • Tạo các thư mục tài nguyên tiêu chuẩn.
  2. Khởi động lại Gemini CLI:
    👉💻 Đóng Gemini CLI (/quit), sau đó khởi động lại:
    gemini
    
  3. Xác minh xem kỹ năng đã được tải hay chưa:
    👉💻 Xác minh xem kỹ năng có đang hoạt động hay không bằng cách nhập /skills vào Gemini CLI. Bạn sẽ thấy k8s-troubleshooter trong danh sách.
  4. Cách hoạt động trong thực tế: Giờ đây, hãy gọi kỹ năng:
    👉💬 Nhập câu lệnh này vào Gemini CLI:
    Use the k8s-troubleshooter skill to find out why the contacts service is failing.
    AI sẽ tuân theo kế hoạch có cấu trúc trong SKILL.md thay vì ứng biến, dẫn đến kết quả nhất quán hơn.

Bài tập: Lên ý tưởng cho các Kỹ năng của riêng bạn

Hãy nghĩ về quy trình làm việc hằng ngày của bạn. Bạn có thể tự động hoá công việc lặp lại nào bằng một Kỹ năng?

  • Ý tưởng: Một kỹ năng kiểm tra tệp kê khai để áp dụng các phương pháp bảo mật hay nhất trước khi triển khai.
  • Ý tưởng: Một kỹ năng tạo cấu hình cụm GKE phức tạp dựa trên loại khối lượng công việc.

8. Kết luận

Phòng thí nghiệm này minh hoạ một cách thức mới để tương tác với cơ sở hạ tầng đám mây bằng cách tiến hành qua các cấp độ ngữ cảnh AI khác nhau. Bằng cách chuyển từ không có bối cảnh sang có đầy đủ bối cảnh cơ sở hạ tầng (Gemini CLI + GKE MCP), bạn sẽ thấy trợ lý AI hiệu quả hơn bao nhiêu khi trợ lý này xem được các tệp và trạng thái cụm của bạn.

Tóm tắt về phòng thí nghiệm

  • Ngữ cảnh rất quan trọng: Bạn sẽ thấy các công cụ AI không có ngữ cảnh không thể giúp giải quyết các vấn đề cụ thể về cơ sở mã.
  • Bối cảnh cửa sổ dòng lệnh: Bạn dùng Gemini CLI để phân tích các tệp cục bộ và xác định lỗi cấu hình ngay trong không gian làm việc của mình.
  • Gỡ lỗi toàn bộ bối cảnh: Bạn sử dụng Gemini CLI với MCP để cho phép AI chẩn đoán và khắc phục các vấn đề phức tạp bằng cách tương quan các tệp cơ sở mã với trạng thái cụm trực tiếp.
  • Khả năng mở rộng: Bạn sẽ tìm hiểu về Kỹ năng và cách sử dụng Kỹ năng để hệ thống hoá kiến thức của tổ chức.

Dọn dẹp

Để tránh bị tính phí liên tục, hãy chạy tập lệnh tháo dỡ. Xin lưu ý rằng bạn không cần thực hiện bước này nếu đang chạy phòng thí nghiệm trên Qwiklabs.

👉💻 Chạy lệnh sau từ thư mục của hội thảo:

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

Các bước tiếp theo

Dưới đây là một số đề xuất để bạn đọc thêm:

9. Phụ lục: Giải pháp cho các lỗi tệp kê khai

Nếu bạn gặp khó khăn hoặc muốn xác minh các lỗi, sau đây là danh sách các lỗi xảy ra trong thư mục manifests-broken/ và cách khắc phục:

  1. URL không đúng định dạng trong config.yaml:
    • Lỗi: TRANSACTIONS_API_ADDR: "ledgerwriter::8080" (dấu hai chấm kép).
    • Lý do: Ứng dụng không phân tích cú pháp được địa chỉ, dẫn đến lỗi kết nối.
    • Khắc phục: Thay đổi lại thành "ledgerwriter:8080".
  2. Nhãn không khớp trong contacts.yaml:
    • Lỗi: Bộ chọn dịch vụ được đặt thành app: contacts-backend thay vì contacts.
    • Lý do: Dịch vụ không tìm thấy các Pod (vẫn có app: contacts), nên lưu lượng truy cập sẽ không được định tuyến.
    • Khắc phục: Thay đổi bộ chọn thành app: contacts.
  3. Cổng không khớp trong userservice.yaml:
    • Lỗi: Dịch vụ targetPort được đặt thành 8081 thay vì 8080.
    • Lý do: Lưu lượng truy cập được gửi đến dịch vụ sẽ được chuyển tiếp đến cổng vùng chứa không chính xác, khiến kết nối bị từ chối.
    • Khắc phục: Thay đổi targetPort thành 8080.
  4. Tên dịch vụ không khớp trong config.yaml:
    • Lỗi: BALANCES_API_ADDR: "balance-reader:8080" (thay vì balancereader).
    • Lý do: Tên máy chủ sẽ không phân giải trong DNS vì dịch vụ có tên là balancereader.
    • Khắc phục: Thay đổi lại thành "balancereader:8080".
  5. Chính sách kéo hình ảnh trong contacts.yaml:
    • Lỗi: imagePullPolicy: Never.
    • Lý do: K8s sẽ không kéo hình ảnh từ sổ đăng ký, giả sử đó là hình ảnh cục bộ. Thao tác này sẽ không thành công với ErrImagePull.
    • Khắc phục: Xoá đường kẻ hoặc đặt đường kẻ thành IfNotPresent.
  6. Lỗi kiểm tra chỉ số sẵn sàng trong userservice.yaml:
    • Lỗi: Đường dẫn đã thay đổi thành /healthz thay vì /ready.
    • Lý do: Vùng chứa không phân phát /healthz, nên lệnh kiểm tra không thành công và nhóm không bao giờ được đánh dấu là đã sẵn sàng.
    • Khắc phục: Thay đổi đường dẫn thành /ready.
  7. Giới hạn tài nguyên trong contacts.yaml:
    • Lỗi: Giới hạn bộ nhớ được đặt thành 10Mi thay vì 128Mi.
    • Lý do: Ứng dụng cần thêm bộ nhớ để khởi động, khiến ứng dụng bị OOMKilled.
    • Khắc phục: Khôi phục giới hạn bộ nhớ.
  8. Thiếu biến môi trường trong frontend.yaml:
    • Lỗi: Đã xoá biến môi trường REGISTERED_OAUTH_CLIENT_ID.
    • Lý do: Ứng dụng có thể gặp lỗi hoặc vô hiệu hoá các tính năng nếu thiếu các biến môi trường dự kiến.
    • Khắc phục: Khôi phục định nghĩa biến môi trường.
  9. Khoá ConfigMap không khớp trong frontend.yaml:
    • Lỗi: key: DEMO_USER thay vì DEMO_LOGIN_USERNAME.
    • Lý do: K8s không tìm thấy khoá trong ConfigMap, khiến vùng chứa không khởi động được.
    • Khắc phục: Thay đổi khoá thành DEMO_LOGIN_USERNAME.
  10. Lỗi chính tả trong tên hình ảnh trong userservice.yaml:
    • Lỗi: user-service thay vì userservice.
    • Lý do: Hình ảnh không tồn tại trong sổ đăng ký, gây ra lỗi ImagePullBackOff.
    • Khắc phục: Sửa tên hình ảnh.
  11. Vấn đề về tài khoản dịch vụ trong contacts.yaml:
    • Lỗi: bank-of-anthos-sa thay vì bank-of-anthos.
    • Lý do: ServiceAccount không tồn tại hoặc thiếu quyền.
    • Cách khắc phục: Sử dụng đúng tên ServiceAccount.