1. บทนำ
ใน Codelab นี้ คุณจะได้เรียนรู้เกี่ยวกับ Google Antigravity (ต่อไปในเอกสารนี้จะเรียกว่า Antigravity) ซึ่งเป็นแพลตฟอร์มการพัฒนาด้าน Agentic AI ที่พัฒนา IDE ไปสู่ยุค Agent-First
Antigravity ไม่เหมือนผู้ช่วยเขียนโค้ดมาตรฐานที่เพียงแค่เติมบรรทัดให้โดยอัตโนมัติ แต่มี "ศูนย์ควบคุมภารกิจ" สำหรับจัดการ Agent แบบอัตโนมัติที่สามารถวางแผน เขียนโค้ด และแม้แต่ท่องเว็บเพื่อช่วยคุณสร้าง
Antigravity ออกแบบมาให้เป็นแพลตฟอร์มที่เน้น Agent เป็นอันดับแรก ซึ่งสมมติว่า AI ไม่ใช่แค่เครื่องมือสำหรับเขียนโค้ด แต่เป็นผู้ดำเนินการแบบอัตโนมัติที่สามารถวางแผน ดำเนินการ ตรวจสอบ และทำซ้ำงานด้านวิศวกรรมที่ซับซ้อนโดยมีการแทรกแซงจากมนุษย์น้อยที่สุด
สิ่งที่คุณจะได้เรียนรู้
- การติดตั้งและกำหนดค่า Antigravity
- สำรวจแนวคิดหลักของ Antigravity เช่น Agent Manager, Editor, Browser และอื่นๆ
- สร้างทักษะการดำเนินการ KCC ระดับการผลิตตั้งแต่ต้นเพื่อจัดการทรัพยากร Google Cloud อย่างปลอดภัยและเป็นไปตามข้อกำหนด
สิ่งที่คุณต้องมี
ปัจจุบัน Antigravity พร้อมให้บริการในเวอร์ชันตัวอย่างสำหรับบัญชี Gmail ส่วนตัว โดยจะมีโควต้าฟรีสำหรับใช้โมเดลชั้นนำ
คุณต้องติดตั้ง Antigravity ในระบบของคุณ ผลิตภัณฑ์นี้พร้อมให้บริการใน Mac, Windows และ Linux บางรุ่น นอกจากเครื่องของคุณเองแล้ว คุณจะต้องมีสิ่งต่อไปนี้ด้วย
- บัญชี Gmail (บัญชี Gmail ส่วนตัว)
- บัญชี Google Cloud และโปรเจ็กต์ Google Cloud
- เว็บเบราว์เซอร์ เช่น Chrome ที่รองรับ คอนโซล Google Cloud และ Cloud Shell
2. การตั้งค่าและข้อกำหนด
การตั้งค่าโปรเจ็กต์
สร้างโปรเจ็กต์ Google Cloud
- ในคอนโซล Google Cloud ในหน้าตัวเลือกโปรเจ็กต์ ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud
- ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ที่อยู่ในระบบคลาวด์แล้ว ดูวิธีตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้วหรือไม่
Codelab นี้ออกแบบมาสำหรับผู้ใช้และนักพัฒนาซอฟต์แวร์ทุกระดับ (รวมถึงผู้เริ่มต้น)
3. การติดตั้ง
หากยังไม่ได้ติดตั้ง Antigravity ให้เริ่มติดตั้ง Antigravity กันเลย ปัจจุบันผลิตภัณฑ์นี้พร้อมให้ใช้งานในเวอร์ชันตัวอย่าง และคุณสามารถใช้บัญชี Gmail ส่วนตัวเพื่อเริ่มต้นใช้งานได้
ไปที่หน้าดาวน์โหลด แล้วคลิกเวอร์ชันระบบปฏิบัติการที่เหมาะสมกับกรณีของคุณ เปิดตัวโปรแกรมติดตั้งแอปพลิเคชันและติดตั้งแอปพลิเคชันในเครื่อง เมื่อติดตั้งเสร็จแล้ว ให้เปิดแอปพลิเคชัน Antigravity
ขั้นตอนสำคัญระหว่างการตั้งค่ามีดังนี้
- เลือกขั้นตอนการตั้งค่า: เราขอแนะนำให้เริ่มจากศูนย์สำหรับโค้ดแล็บนี้
- การพัฒนาที่ขับเคลื่อนด้วยการตรวจสอบ (แนะนำ): เลือกตัวเลือกนี้ ซึ่งช่วยให้เอเจนต์ตัดสินใจและกลับมาขออนุมัติจากผู้ใช้ได้ ซึ่งเป็นสิ่งสำคัญสำหรับการดำเนินการด้านโครงสร้างพื้นฐาน
จากนั้นกำหนดค่า Editor และลงชื่อเข้าใช้ Google สุดท้าย ให้ยอมรับข้อกำหนดในการใช้งาน
4. การตั้งค่าโครงสร้างพื้นฐาน: GKE และ Config Connector
ก่อนที่จะสร้างทักษะได้ คุณต้องมีสภาพแวดล้อม Google Cloud ที่ติดตั้ง Config Connector (KCC) ด้วยตนเองและกำหนดค่าในโหมด Namespaced ซึ่งช่วยให้คุณจัดการทรัพยากร GCP เป็นออบเจ็กต์ Kubernetes ได้
ขั้นตอนที่ 0: เตรียมสภาพแวดล้อม
1. ข้อกำหนดเบื้องต้นของคลัสเตอร์
สร้างคลัสเตอร์ GKE ใหม่โดยเปิดใช้ฟีเจอร์ที่จำเป็น
# Set your variables
export PROJECT_ID=$(gcloud config get-value project)
export CLUSTER_NAME="kcc-ops-cluster"
export REGION="us-central1"
# Create the cluster
gcloud container clusters create ${CLUSTER_NAME} \
--region ${REGION} \
--release-channel "regular" \
--workload-pool=${PROJECT_ID}.svc.id.goog \
--logging=SYSTEM \
--monitoring=SYSTEM
# Get cluster credentials
gcloud container clusters get-credentials ${CLUSTER_NAME} --region ${REGION}
2. ติดตั้ง Config Connector Operator
โดยผู้ให้บริการจะอัปเดตการติดตั้งให้เป็นเวอร์ชันล่าสุดอยู่เสมอ
# Download the latest Config Connector operator
gcloud storage cp gs://configconnector-operator/latest/release-bundle.tar.gz release-bundle.tar.gz
# Extract the bundle
tar zxvf release-bundle.tar.gz
# Install the operator (Standard Cluster)
kubectl apply -f operator-system/configconnector-operator.yaml
3. กำหนดค่าโหมด Namespace
สร้างทรัพยากร ConfigConnector เพื่อระบุโหมดการทำงาน
# configconnector.yaml
apiVersion: core.cnrm.cloud.google.com/v1beta1
kind: ConfigConnector
metadata:
name: configconnector.core.cnrm.cloud.google.com
spec:
mode: namespaced
stateIntoSpec: Absent
kubectl apply -f configconnector.yaml
4. สร้างข้อมูลประจำตัวและเนมสเปซ
สำหรับแล็บนี้ เราจะใช้เนมสเปซ default และบัญชีบริการของ Google (GSA) โดยเฉพาะ
# Set your variables
export PROJECT_ID=$(gcloud config get-value project)
export NAMESPACE="default"
# Create the Google Service Account
gcloud iam service-accounts create kcc-identity --project ${PROJECT_ID}
# Grant permissions on the project
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:kcc-identity@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/owner"
# Grant Metric Writer permissions
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:kcc-identity@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/monitoring.metricWriter"
# Bind GSA to KSA via Workload Identity
gcloud iam service-accounts add-iam-policy-binding \
kcc-identity@${PROJECT_ID}.iam.gserviceaccount.com \
--member="serviceAccount:${PROJECT_ID}.svc.id.goog[cnrm-system/cnrm-controller-manager-${NAMESPACE}]" \
--role="roles/iam.workloadIdentityUser"
5. กำหนดค่าเนมสเปซ
สร้าง ConfigConnectorContext เพื่อดูเนมสเปซ
# configconnectorcontext.yaml
apiVersion: core.cnrm.cloud.google.com/v1beta1
kind: ConfigConnectorContext
metadata:
name: configconnectorcontext.core.cnrm.cloud.google.com
namespace: default
spec:
googleServiceAccount: "kcc-identity@${PROJECT_ID}.iam.gserviceaccount.com"
stateIntoSpec: Absent
kubectl apply -f configconnectorcontext.yaml
6. ยืนยันการติดตั้ง
รอให้ตัวควบคุมพร้อมสำหรับเนมสเปซ default
kubectl wait -n cnrm-system \
--for=condition=Ready pod \
-l cnrm.cloud.google.com/component=cnrm-controller-manager \
-l cnrm.cloud.google.com/scoped-namespace=default
5. Agent Manager: Mission Control
Antigravity แยกจากพื้นฐานของ Visual Studio Code (VS Code) แบบโอเพนซอร์ส แต่เปลี่ยนประสบการณ์ของผู้ใช้อย่างสิ้นเชิงเพื่อจัดลำดับความสำคัญของการจัดการเอเจนต์มากกว่าการแก้ไขข้อความ อินเทอร์เฟซแบ่งออกเป็น 2 หน้าต่างหลักที่แตกต่างกัน ได้แก่ Editor และ Agent Manager
ผู้จัดการตัวแทน
เมื่อเปิดตัว Antigravity โดยปกติแล้วผู้ใช้จะได้รับการต้อนรับจาก Agent Manager อินเทอร์เฟซนี้ทำหน้าที่เป็นแดชบอร์ดศูนย์ควบคุม ออกแบบมาเพื่อการจัดการเป็นกลุ่มระดับสูง ซึ่งช่วยให้นักพัฒนาซอฟต์แวร์สามารถสร้าง ตรวจสอบ และโต้ตอบกับเอเจนต์หลายตัวที่ทำงานแบบอะซิงโครนัสในพื้นที่ทำงานหรือภารกิจต่างๆ
ในมุมมองนี้ นักพัฒนาแอปจะทำหน้าที่เป็นสถาปนิก โดยจะกำหนดวัตถุประสงค์ระดับสูง คำขอแต่ละรายการเหล่านี้จะสร้างอินสแตนซ์ของตัวแทนเฉพาะ UI จะแสดงภาพของสตรีมงานแบบคู่ขนานเหล่านี้ โดยแสดงสถานะของตัวแทนแต่ละราย Artifact ที่ตัวแทนสร้างขึ้น (แผน ผลลัพธ์ ความแตกต่าง) และคำขอที่รอดำเนินการซึ่งต้องได้รับการอนุมัติจากเจ้าหน้าที่
6. Antigravity Browser และ Artifacts
Antigravity สร้างอาร์ติแฟกต์ขณะวางแผนและทำงาน ซึ่งได้แก่ ไฟล์ Markdown แบบริช แผนภาพสถาปัตยกรรม รูปภาพ การบันทึกในเบราว์เซอร์ และส่วนต่างของโค้ด
อาร์ติแฟกต์ช่วยแก้ปัญหา "ช่องว่างด้านความน่าเชื่อถือ"
เมื่อตัวแทนกล่าวว่า "ฉันแก้ไขข้อบกพร่องแล้ว" ก่อนหน้านี้นักพัฒนาซอฟต์แวร์ต้องอ่านโค้ดเพื่อยืนยัน ใน Antigravity เอเจนต์จะสร้างอาร์ติแฟกต์เพื่อพิสูจน์
อาร์ติแฟกต์
อาร์ติแฟกต์หลักที่ Antigravity สร้างขึ้นมีดังนี้
Task Lists: แผนที่มีโครงสร้างซึ่งสร้างขึ้นก่อนเขียนโค้ดImplementation Plan: การเปลี่ยนแปลงที่ออกแบบไว้พร้อมรายละเอียดทางเทคนิคWalkthrough: สรุปการเปลี่ยนแปลงและวิธีทดสอบBrowser Recordings: บันทึกวิดีโอของเซสชันเบราว์เซอร์สำหรับการยืนยัน UI
Antigravity Browser
เมื่อตัวแทนต้องการโต้ตอบกับเว็บ ตัวแทนจะเรียกใช้ตัวแทนย่อยของเบราว์เซอร์ เอเจนต์ย่อยนี้สามารถคลิก เลื่อน พิมพ์ และอ่านบันทึกคอนโซลได้ โดยใช้โมเดลเฉพาะเพื่อดำเนินการในหน้าที่เปิดภายในเบราว์เซอร์ที่ Antigravity จัดการ
7. ประสบการณ์การใช้งานของเอดิเตอร์
โดยตัวแก้ไขจะยังคงความคุ้นเคยของ VS Code ไว้ ซึ่งรวมถึง File Explorer มาตรฐาน การไฮไลต์ไวยากรณ์ และระบบนิเวศของส่วนขยาย
ฟีเจอร์หลักของตัวแก้ไขคีย์
- เติมข้อความอัตโนมัติ: คำแนะนำอัจฉริยะที่ยอมรับได้โดยการกด Tab
- แท็บเพื่อนำเข้า: แนะนำให้เพิ่มการอ้างอิงที่ขาดหายไป
- คำสั่ง (
Cmd + I): เรียกใช้การเติมข้อความในบรรทัดโดยใช้ภาษาธรรมชาติ - แผงด้านข้างของตัวแทน (
Cmd + L): สลับแผงตัวแทนเพื่อถามคำถามหรืออ้างอิงไฟล์โดยใช้@
8. การแสดงความคิดเห็น
หัวใจสำคัญของ Antigravity คือความสามารถในการรวบรวมความคิดเห็นของคุณได้อย่างง่ายดาย อาร์ติแฟกต์เหล่านี้เป็นวิธีที่คุณใช้แสดงความคิดเห็นต่อตัวแทนในความคิดเห็นสไตล์ Google เอกสาร
เมื่อใดก็ตามที่คุณเพิ่มความคิดเห็นในแผนหรือในงาน อย่าลืมส่งความคิดเห็น ซึ่งจะช่วยให้ Agent ทำงานในทิศทางที่คุณต้องการ
9. การสร้างทักษะการปฏิบัติงานของ KCC
เมื่อคุณเข้าใจแพลตฟอร์มแล้ว เรามาสร้างทักษะการปฏิบัติงานของ KCC กัน
Kubernetes Config Connector (KCC) ช่วยให้คุณจัดการทรัพยากร GCP เป็นออบเจ็กต์ K8s ได้ อย่างไรก็ตาม ต้องมีแนวทางด้านความปลอดภัยเพื่อป้องกันการกำหนดค่าที่ไม่ตรงกัน การละเมิดการปฏิบัติตามข้อกำหนด และการสร้างทรัพยากรใหม่โดยไม่ตั้งใจ
ขั้นตอนที่ 1: สร้างโครงสร้างทักษะ
สร้างโครงสร้างไดเรกทอรีสำหรับทักษะในรูทของพื้นที่ทำงาน โดยทำดังนี้
mkdir -p .agents/skills/kcc-ops/scripts
mkdir -p .agents/skills/kcc-ops/resources/policies/templates
mkdir -p .agents/skills/kcc-ops/resources/policies/constraints
ขั้นตอนที่ 2: สร้าง SKILL.md (ส่วนสมอง)
SKILL.md กำหนดข้อมูลเมตาและ "กฎทอง" หลักสำหรับเอเจนต์ สร้าง .agents/skills/kcc-ops/SKILL.md:
---
name: kcc-ops
description: Assists with Config Connector (KCC) configuration, resource generation, and troubleshooting on Google Cloud.
---
# Config Connector (KCC) Operations Skill
Use this skill to manage Google Cloud resources using Kubernetes-style configuration (Config Connector).
## 🛑 GOLDEN RULE: Separate Generation from Application
**NEVER generate and apply a manifest in a single autonomous step.**
1. **Craft:** Write the generated manifest to a local file.
2. **Analyze:** Present the manifest to the user. Perform Impact Analysis and Dry Runs. Explain the consequences of the change (e.g., "If this topic is deleted, the attached subscription becomes orphaned").
3. **Wait:** Pause execution and explicitly wait for user permission to proceed.
4. **Apply:** Only run `kubectl apply` *after* the user has reviewed the manifest and the impact analysis, and then unequivocally confirmed you should proceed.
## Core Responsibilities
0. **Context Verification**: Verify the execution context (cluster, namespace, GCP project, user account) with the user before performing any operations.
1. **Installation & Health**: Verify KCC is properly installed and healthy on the target cluster.
2. **Resource Inventory**: Query and summarize existing KCC resources within a namespace.
3. **Brownfield Bulk Export (Adoption)**: Export existing GCP project resources into valid KCC YAML manifests.
4. **Manifest Generation**: Generate valid YAML manifests for GCP resources using KCC CRDs.
5. **Impact Analysis**: Identify ancillary services and resources (e.g., Cloud Run, Apps) that depend on a resource being modified.
6. **Change Differentiation**: Generate diff summaries for resource edits to support change control.
7. **Policy Compliance**: Vet KCC manifests against OPA/Gatekeeper policies.
8. **Troubleshooting**: Analyze resource status, and consult the troubleshooting guide to resolve reconciliation issues.
## Guidelines for Operations
### 0. Context Verification
Before performing **any operations or executing commands** (including health checks), you **MUST** verify the current execution context and obtain explicit user confirmation.
1. **Read Context:** Use commands like `kubectl config current-context`, `kubectl config view --minify -o jsonpath='{.contexts[0].context.namespace}'`, `gcloud config get-value project`, and `gcloud config get-value account` to determine the active environment.
2. **Present & Ask:** Show this information to the user clearly (e.g., "I see my context is X, namespace is Y, project is Z, and account is A. Is this correct?").
3. **Wait:** Do not proceed with any other steps or scripts until the user has confirmed or provided corrections.
### 1. Installation & Health Check
Before performing operations, ensure the environment is ready:
- **Automation**: You MUST use `./scripts/check-health.sh` to verify namespaces, controllers, and CRDs. Do not use manual kubectl commands for health checks, as the script enforces standard formatting and context verification.
### 2. Resource Inventory & Discovery
To understand the current state of infrastructure:
- **Automation**: You MUST use `./scripts/inventory.sh` to get a summary table of all KCC resources. Do not use manual kubectl queries, as the script is optimized to securely discover all CRDs with context validation.
### 3. Manifest Structure
- All KCC resources belong to the `cnrm.cloud.google.com` API group.
- Use the `cnrm.cloud.google.com/project-id` annotation for cross-project resource management if not using Namespaced Mode.
- Always include `apiVersion`, `kind`, `metadata`, and `spec`.
### 4. Official Resource Reference (Agent Action)
When generating or troubleshooting manifests, you **must not guess** the API schema. Always consult the [Official Config Connector Reference](https://cloud.google.com/config-connector/docs/reference/overview) for the exact API version, kind, and required fields for the specific resource and cross reference with the official [github repository](https://github.com/GoogleCloudPlatform/k8s-config-connector/tree/master/config/crds/resources).
### 5. Troubleshooting Checklist
When a resource is not reconciling (check `kubectl get <kind> <name> -o yaml`):
- **Ready Condition**: Look for `status.conditions` where `type: Ready` and `status: "False"`.
- **Reason/Message**: Check the `reason` and `message` fields in the status conditions.
- **Consult the Guide**: Immediately check `./resources/troubleshooting-guide.md` for definitions of the error reason (e.g. `DependencyInvalid`, `ManagementConflict`) and follow its resolution steps.
- **Common Issues**:
- Permissions: The KCC service account lacks IAM roles.
- Quotas: GCP project quota exceeded.
- Conflicts: Resource already exists or is managed by another tool.
- Immutable Fields: Attempting to change a field that requires resource recreation. Look for "Update failed" errors related to immutable fields.
- Reference Resolution: Check if the resource is waiting for a dependency (e.g., `referenced project not found`).
### 6. Impact Analysis (Ancillary Services)
Before modifying a resource (e.g., GCS Bucket, Pub/Sub Topic), verify whatElse depends on it:
- **Reference Search (Cluster-wide)**: Search for other KCC resources that reference the item.
```bash
# Example: Find resources referencing a bucket named 'my-data-bucket'
kubectl get-all -n <namespace> -o yaml | grep -C 5 "my-data-bucket"
```
- **IAM-based Analysis**: Check for IAM Service Accounts that have roles on the specific resource. A Cloud Run job or GKE Workload Identity might be using those permissions.
- **Common Ancillary Dependencies**:
- **Storage Buckets**: Look for Cloud Run/GKE mounts (CSI), Cloud Functions triggers, or Dataflow jobs.
- **Networks**: Check for Firewall rules, Forwarding rules, and GKE cluster assignments.
- **IAM Policies**: Changing a policy might break access for external applications not managed by KCC.
- **Resource Graph**: Use `gcloud asset search-all-resources` to find resources that might have implicit links.
### 3. Policy Compliance & Best Practices
Evaluate KCC manifests against security and governance policies. The vetting tool supports three source modes:
- **Built-in Mode (Default)**: Uses the skill's high-fidelity `v1beta1` library (300+ Anthos constraints).
- `Usage: ./scripts/vet-policy.sh <manifest-path>`
- **Remote Mode**: Clones and vets against an external Git repository.
- `Usage: ./scripts/vet-policy.sh <manifest-path> <repo-url> [git-ref]`
- ⚠️ **Note**: External libraries like the legacy GCP Policy Library may be out-of-date and cause schema validation errors with modern `gator`.
- **Local Mode**: Vets against a local directory of policies.
- `Usage: ./scripts/vet-policy.sh <manifest-path> /path/to/local/policies`
**Interaction Model:**
1. Call `./scripts/vet-policy.sh` with the appropriate arguments.
2. Interpret the `=== KCC Best Practices ===` and `=== OPA/Gatekeeper ===` reports.
3. Supplement automated findings with manual review for specific security features not yet covered by OPA (e.g., `publicAccessPrevention: enforced`, `versioning: {enabled: true}`).
```bash
# Run the skill's helper script (repo URL and branch are optional)
./scripts/vet-policy.sh manifest.yaml [policy-repo-url] [policy-ref]
```
## Skill Assets
This skill includes additional resources to streamline operations:
- **`scripts/`**: Automation scripts (e.g., `vet-policy.sh`, `bulk-export.sh`).
- **`examples/`**: Reference KCC manifests (e.g., `restricted-bucket.yaml`).
- **`resources/`**: Common templates, documentation snippets, and troubleshooting guides (e.g., `troubleshooting-guide.md`).
### 4. Safety Rails for Applying Manifests
Before applying any KCC manifest update to an existing resource, you MUST:
- **Verify Immutable Fields**: Call `./scripts/verify-immutable.sh <manifest-path>` to detect updates to fields (like `location`, `name`, `project-id`) that trigger destructive resource recreation.
- **Explain Impact**: If destructive changes are detected, you MUST warn the user and explain the downtime/data loss implications before requesting approval.
### 5. Emergency Recovery & Troubleshooting
If a resource is stuck in a "Deletion" or "Error" state:
- **Check for Abondon Flag**: Check if the resource has the `cnrm.cloud.google.com/deletion-policy: abandon` annotation. If it does, you will need to remove the annotation and then force delete the resource.
- **Force Delete**: Call `./scripts/force-delete.sh <kind> <name> [namespace]` to bypass Kubernetes finalizers and remove the resource from the cluster.
- **Orphan Warning**: Inform the user that force-deleting a KCC object may leave an orphaned resource in Google Cloud that requires manual cleanup.
### 6. Change Differentiation
When editing an existing resource, always generate a diff to summarize the change for reviewers or Git history:
- **Local Diff**:
```bash
# Diff a local file against the cluster state
kubectl diff -f modified-resource.yaml
```
- **Commit Summary Template**:
```text
[KCC Change] Update <ResourceName> (<Kind>)
- Field 'spec.foo' changed from 'X' to 'Y'
- Impact: Ancillary service <ServiceName> will see updated <Config>
```
### 9. Best Practices
- **Namespaced Mode**: Prefer namespaced mode for better isolation.
- **Sensitive Data**: Use `spec.credential.secretRef` or similar for sensitive fields.
- **Resource Naming**: Use consistent naming conventions that match your Kubernetes/GCP standards.
- **Annotations**:
- `cnrm.cloud.google.com/deletion-policy: abandon`: Keep GCP resource on KCC deletion.
- `cnrm.cloud.google.com/state-into-spec: absent`: Prevents KCC from syncing GCP state back into the Kubernetes object (useful for avoiding reconciliation loops on fields like node counts).
## Common Resource Examples
### Compute Instance
```yaml
apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeInstance
metadata:
name: instance-sample
annotations:
cnrm.cloud.google.com/project-id: "my-project-id"
spec:
machineType: n1-standard-1
zone: us-central1-a
bootDisk:
initializeParams:
sourceImage: projects/debian-cloud/global/images/family/debian-11
networkInterface:
- networkRef:
name: default
```
### Storage Bucket
```yaml
apiVersion: storage.cnrm.cloud.google.com/v1beta1
kind: StorageBucket
metadata:
name: bucket-sample
spec:
location: US
```
### Pub/Sub Topic & Subscription
```yaml
apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
kind: PubSubTopic
metadata:
name: order-events-topic
---
apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
kind: PubSubSubscription
metadata:
name: order-processor-sub
spec:
topicRef:
name: order-events-topic
ackDeadlineSeconds: 30
```
ขั้นตอนที่ 3: ติดตั้งใช้งานเครื่องมือสินค้าคงคลัง
สร้าง .agents/skills/kcc-ops/scripts/inventory.sh เพื่อค้นหาแหล่งข้อมูลของ KCC
#!/bin/bash
# List all resources in the cnrm.cloud.google.com group
KCC_KINDS=$(kubectl api-resources --no-headers | awk '/\.cnrm\.cloud\.google\.com/ {print $1}')
KCC_KINDS_CSV=$(echo "$KCC_KINDS" | paste -sd, -)
printf "%-40s %-30s %-10s %s\n" "KIND" "NAME" "READY" "STATUS/MESSAGE"
kubectl get "$KCC_KINDS_CSV" -A -o custom-columns="KIND:.kind,NAME:.metadata.name,READY:.status.conditions[?(@.type=='Ready')].status,MSG:.status.conditions[?(@.type=='Ready')].message" --ignore-not-found --no-headers
ขั้นตอนที่ 4: เพิ่มตรรกะการตรวจสอบนโยบาย
สร้าง .agents/skills/kcc-ops/scripts/vet-policy.sh สคริปต์นี้จะใช้ gator เพื่อตรวจสอบไฟล์ Manifest เทียบกับนโยบาย OPA
#!/bin/bash
MANIFEST=$1
SKILL_ROOT=$(dirname "$(dirname "$0")")
POLICY_SRC="$SKILL_ROOT/resources/policies"
echo "=== OPA/Gatekeeper Policy Vetting ==="
if command -v gator >/dev/null 2>&1; then
gator test -f "$MANIFEST" -f "$POLICY_SRC/templates" -f "$POLICY_SRC/constraints"
else
echo "Gator not found. Skipping OPA audit."
fi
ขั้นตอนที่ 5: ใช้การป้องกันฟิลด์ที่ไม่เปลี่ยนแปลง
นี่เป็นแนวทางด้านความปลอดภัยที่สำคัญ สร้าง .agents/skills/kcc-ops/scripts/verify-immutable.sh:
#!/bin/bash
MANIFEST=$1
KIND=$(grep "^kind:" "$MANIFEST" | awk '{print $2}')
NAME=$(grep "name:" "$MANIFEST" | head -n 1 | awk '{print $2}')
# Check for changes in common immutable fields
IMMUTABLE_FIELDS=("location" "project-id" "name" "zone" "region")
TEMP_FILE=$(mktemp)
kubectl get "$KIND" "$NAME" -o yaml > "$TEMP_FILE" 2>/dev/null
for field in "${IMMUTABLE_FIELDS[@]}"; do
NEW=$(grep "$field:" "$MANIFEST" | awk '{print $2}')
OLD=$(grep "$field:" "$TEMP_FILE" | awk '{print $2}')
if [ -n "$NEW" ] && [ -n "$OLD" ] && [ "$NEW" != "$OLD" ]; then
echo "🚨 WARNING: Immutable field '$field' is changing! Potential resource recreation."
fi
done
rm "$TEMP_FILE"
ขั้นตอนที่ 6: การกู้คืนฉุกเฉิน (บังคับลบ)
สร้าง .agents/skills/kcc-ops/scripts/force-delete.sh:
#!/bin/bash
KIND=$1; NAME=$2; NS=${3:-default}
echo "Removing finalizers for $KIND/$NAME in $NS..."
kubectl patch "$KIND" "$NAME" -n "$NS" -p '{"metadata":{"finalizers":null}}' --type=merge
kubectl delete "$KIND" "$NAME" -n "$NS" --wait=false
ขั้นตอนที่ 7: ทรัพยากรขั้นสุดท้าย
ทำให้สคริปต์ทั้งหมดเรียกใช้งานได้
chmod +x .agents/skills/kcc-ops/scripts/*.sh
10. การทดสอบทักษะใหม่
ตอนนี้ให้เริ่มการสนทนาใหม่และทดสอบทักษะของคุณ
- การค้นพบ:
@kcc-ops Show me all KCC resources in my cluster. - การปฏิบัติตามข้อกำหนด: สร้างไฟล์
bucket.yamlด้วย StorageBucket ถาม:@kcc-ops Vet my bucket.yaml manifest. - ความปลอดภัย: ลองอัปเดต
locationของที่เก็บข้อมูลที่มีอยู่ในbucket.yamlถาม:@kcc-ops Verify my bucket.yaml for immutable changes.
สังเกตว่าเอเจนต์เลือกสคริปต์ที่ถูกต้องอย่างชาญฉลาดและปฏิบัติตาม "กฎทอง" จากSKILL.md
11. การรักษาความปลอดภัยของ Agent
การให้สิทธิ์เข้าถึงเทอร์มินัลแก่ AI Agent เป็นเรื่องที่มีประสิทธิภาพ แต่ต้องมีการควบคุม
ไปที่ Antigravity - Settings - Terminal แล้วสำรวจรายการที่อนุญาตและรายการที่ไม่อนุญาต
- รายการที่อนุญาต: เพิ่ม
ls,kubectl getและสคริปต์ทักษะของคุณที่นี่ - รายการที่ไม่อนุญาต: เพิ่ม
sudo,rm -rfหรือคำสั่งที่เป็นอันตรายอื่นๆ เพื่อให้มั่นใจว่าเอเจนต์จะขอสิทธิ์เสมอ
12. บทสรุป
ยินดีด้วย คุณได้เปลี่ยนจากการติดตั้ง Antigravity ไปเป็นการสร้าง KCC Operations Skill ที่มีความเที่ยงตรงสูง
คุณได้เรียนรู้สิ่งต่อไปนี้
- วิธีขยาย Agent ด้วยเครื่องมือ Bash ที่กำหนดเอง
- วิธีเข้ารหัส "กฎทอง" ด้านการปฏิบัติงานลงใน
SKILL.md - วิธีจัดเตรียมแนวทางด้านความปลอดภัยสำหรับการจัดการโครงสร้างพื้นฐานที่ซับซ้อน
ขั้นตอนถัดไป
ขยายโฟลเดอร์ resources/policies ด้วยข้อจำกัด OPA เพิ่มเติม หรือเพิ่มสคริปต์ check-health.sh เพื่อตรวจสอบความพร้อมของคลัสเตอร์โดยอัตโนมัติ