[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-google-cloud-gke-tpu-dynamic-slices-monitoring":3,"mdc-78193s-key":34,"related-org-google-cloud-gke-tpu-dynamic-slices-monitoring":1449,"related-repo-google-cloud-gke-tpu-dynamic-slices-monitoring":1635},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":28,"topics":29,"repo":30,"sourceUrl":32,"mdContent":33},"gke-tpu-dynamic-slices-monitoring","monitor GKE TPU dynamic slices","Monitor and manage GKE TPU Dynamic Slices custom resources. Use when checking slice lifecycle states, troubleshooting failed slice creations (e.g. SliceCreationFailed, FAILED), running single or multi-slice workloads, or safely deleting\u002Fdisabling slices.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"google-cloud","Google Cloud","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fgoogle-cloud.png","GoogleCloudPlatform",[13,17,20,23],{"name":14,"slug":15,"type":16},"Operations","operations","tag",{"name":18,"slug":19,"type":16},"Monitoring","monitoring",{"name":21,"slug":22,"type":16},"Kubernetes","kubernetes",{"name":9,"slug":8,"type":16},161,"https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fgke-mcp","2026-07-12T07:40:02.296248",null,78,[],{"repoUrl":25,"stars":24,"forks":28,"topics":31,"description":27},[],"https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fgke-mcp\u002Ftree\u002FHEAD\u002Fskills\u002Fgke-tpu-dynamic-slices-monitoring","---\nname: gke-tpu-dynamic-slices-monitoring\ndescription: >\n  Monitor and manage GKE TPU Dynamic Slices custom resources. Use when\n  checking slice lifecycle states, troubleshooting failed slice creations (e.g.\n  SliceCreationFailed, FAILED), running single or multi-slice workloads, or\n  safely deleting\u002Fdisabling slices.\n---\n\n# GKE TPU Dynamic Slices Monitoring & Management\n\nUse this skill to monitor the status of TPU Slice custom resources, troubleshoot provisioning failures, deploy workloads on dynamic slices, and perform cleanups.\n\n## ⚠️ Prerequisites\n\n- [ ] Cloud Logging must be enabled for the project.\n- [ ] `kubectl` and `gcloud` CLIs must be configured to access the GKE cluster.\n\n## 🔍 Diagnostic Workflow\n\n### Step 0: Context Acquisition & Time Window Definition\n\nTo begin monitoring or troubleshooting, acquire the following context from the user:\n\n- **Project ID** (e.g., `my-gcp-project`)\n- **Cluster Name** (e.g., `tpu-cluster`)\n- **Region\u002FZone** (e.g., `us-central1-a`)\n- **Slice Name** (e.g., `test-slice`)\n- **Issue Time** (Optional, only needed if diagnosing a historical failure; e.g., `2026-06-25T12:00:00Z`)\n\n#### Time Handling Rules (If Issue Time is provided)\n\n1.  **Reject Relative Time**: If the user says \"a few minutes ago\" or \"just now\", stop and ask for the exact timestamp.\n2.  **Window Calculation**: Calculate the query window as **`[T - 30m]` to `[T + 30m]`**.\n    - Let `Start_Time` = `T - 30m`\n    - Let `End_Time` = `T + 30m`\n\n---\n\n### Step 1: Describe the Slice Custom Resource [Low Risk]\n\nCheck the current state, topology, and conditions of the specified Slice custom resource.\n\n- **Tool to use**: `run_command`\n- **Command**:\n  ```bash\n  kubectl describe slice \u003CSlice Name>\n  ```\n\n#### State & Reason Analysis\n\nAnalyze the `Status.Conditions` (especially `Type: Ready` and its `Reason` and `Status`):\n\n| Lifecycle State \u002F Reason  | Meaning                                                                                                                                                              | Recommended Action                                                                                                                             |\n| :------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`SliceNotCreated`**     | GKE Slice Controller is initializing the slice and performing resource checks.                                                                                       | **[Auto]** Wait a few minutes and run the command again.                                                                                       |\n| **`SliceCreationFailed`** | Prerequisites validation failed (e.g., selected nodes don't exist, nodes are already used by another slice, or the topology doesn't match the number of partitions). | **[Manual]** Verify that the selected nodes exist, are not already in use by another slice, and that the topology matches the partition count. |\n| **`ACTIVATING`**          | GKE is actively forming and provisioning the TPU slice.                                                                                                              | **[Auto]** Wait and monitor node provisioning.                                                                                                 |\n| **`ACTIVE`**              | The TPU slice is successfully formed and ready to host workloads.                                                                                                    | **[Auto]** Proceed to deploy or check workloads.                                                                                               |\n| **`ACTIVE_DEGRADED`**     | The slice is usable, but one or more sub-blocks are degraded.                                                                                                        | **[Manual]** Monitor workload logs closely for interconnect or device errors. Check for faulty node\u002Fhost VMs.                                  |\n| **`FAILED`**              | GKE failed to form the TPU slice (e.g., selected nodes are not part of the same reservation block, or are not in the same reservation).                              | **[Manual]** Ensure all selected nodes belong to the same reservation and reservation block.                                                   |\n| **`DEACTIVATING`**        | The slice is dismantling (either triggered by user deletion or a critical systemic failure).                                                                         | **[Auto]** Wait for dismantling to finish, or patch finalizers if it gets stuck (see Resolution 1).                                            |\n| **`INCOMPLETE`**          | The terminal phase before the Slice CR is deleted from the cluster.                                                                                                  | **[Auto]** No action required; the resource will be removed shortly.                                                                           |\n\n---\n\n### Step 2: Verify Workload Specification [Low Risk]\n\nEnsure the user's workload manifests are configured correctly to target the dynamic slice.\n\n#### 1. Single-Slice Workload Requirements\n\nCheck that the Pod template contains the following annotations and selectors:\n\n- **Annotations**:\n  - `cloud.google.com\u002Fgke-tpu-slice-topology: \"\u003CTopology>\"` (e.g., `\"4x4x4\"`)\n- **NodeSelector**:\n  - `cloud.google.com\u002Fgke-tpu-topology: \"\u003CTopology>\"` (e.g., `\"4x4x4\"`)\n  - `cloud.google.com\u002Fgke-tpu-accelerator: \"\u003CAccelerator Type>\"` (e.g., `\"tpu7x\"`)\n  - `cloud.google.com\u002Fgke-tpu-slice: \"\u003CSlice Name>\"` (e.g., `\"test-slice\"`)\n\n#### 2. Multi-Slice (JobSet) Workload Requirements\n\nIf deploying a multi-slice JobSet, verify:\n\n- **JobSet Annotation**:\n  - `alpha.jobset.sigs.k8s.io\u002Fexclusive-topology: cloud.google.com\u002Fgke-tpu-slice`\n- **Pod Template Annotations**:\n  - `cloud.google.com\u002Fgke-tpu-slice-topology: \"\u003CTopology>\"`\n- **Pod Template NodeSelector**:\n  - `cloud.google.com\u002Fgke-tpu-topology: \"\u003CTopology>\"`\n  - `cloud.google.com\u002Fgke-tpu-accelerator: \"\u003CAccelerator Type>\"`\n  - _Note: Do NOT manually specify `cloud.google.com\u002Fgke-tpu-slice` in the nodeSelector; JobSet handles slice assignment automatically._\n\n---\n\n## 🛠️ Resolution & Management Workflow\n\n### Resolution 1: Force Delete a Stuck Slice [High Risk]\n\nIf a slice is stuck in `DEACTIVATING` or deletion hangs indefinitely (often due to finalizers awaiting resource cleanup), patch the resource to remove finalizers.\n\n- **Tool to use**: `run_command`\n- **Command**:\n  ```bash\n  kubectl patch slice \u003CSlice Name> --type json -p='[{\"op\": \"remove\", \"path\": \"\u002Fmetadata\u002Ffinalizers\"}]'\n  ```\n- **Automation**: Stop and ask for explicit user confirmation before executing this patch.\n\n---\n\n### Resolution 2: Disable and Clean Up Slice Controller [High Risk]\n\nIf the user needs to completely disable dynamic slicing and the GKE Slice Controller:\n\n1.  **Check for existing Slices**:\n    ```bash\n    kubectl get slice -A\n    ```\n    _Ensure all slices are deleted before disabling the controller._\n2.  **Disable Slice Controller via gcloud**:\n    ```bash\n    gcloud container clusters update \u003CCluster Name> \\\n        --location=\u003CRegion\u002FZone> \\\n        --no-enable-slice-controller\n    ```\n3.  **Delete the Slice CRD**:\n    ```bash\n    kubectl delete crd slices.accelerator.gke.io\n    ```\n4.  **Clean up Node Labels**:\n    Remove GKE TPU Slice labels from all nodes in the cluster:\n    ```bash\n    kubectl label nodes --all cloud.google.com\u002Fgke-tpu-slice- cloud.google.com\u002Fgke-tpu-slice-topology-\n    ```\n\n- **Automation**: Stop and ask for explicit user confirmation before executing any disabling or destructive cleanup commands.\n\n---\n\n## 📋 Copypaste Checklist\n\n- [ ] Acquire project context and slice names.\n- [ ] Inspect slice status via `kubectl describe slice`.\n- [ ] Inspect Kubernetes events and GKE control plane logs for errors.\n- [ ] Validate workload manifest annotations and nodeSelectors.\n- [ ] If deletion hangs, patch finalizers (requires user approval).\n- [ ] If decommissioning, follow the full Slice Controller disabling sequence.\n",{"data":35,"body":36},{"name":4,"description":6},{"type":37,"children":38},"root",[39,48,54,61,107,113,120,125,212,219,301,305,317,322,410,416,452,744,747,757,762,768,773,867,873,878,967,970,976,987,999,1107,1110,1120,1125,1356,1368,1371,1377,1443],{"type":40,"tag":41,"props":42,"children":44},"element","h1",{"id":43},"gke-tpu-dynamic-slices-monitoring-management",[45],{"type":46,"value":47},"text","GKE TPU Dynamic Slices Monitoring & Management",{"type":40,"tag":49,"props":50,"children":51},"p",{},[52],{"type":46,"value":53},"Use this skill to monitor the status of TPU Slice custom resources, troubleshoot provisioning failures, deploy workloads on dynamic slices, and perform cleanups.",{"type":40,"tag":55,"props":56,"children":58},"h2",{"id":57},"️-prerequisites",[59],{"type":46,"value":60},"⚠️ Prerequisites",{"type":40,"tag":62,"props":63,"children":66},"ul",{"className":64},[65],"contains-task-list",[67,81],{"type":40,"tag":68,"props":69,"children":72},"li",{"className":70},[71],"task-list-item",[73,79],{"type":40,"tag":74,"props":75,"children":78},"input",{"disabled":76,"type":77},true,"checkbox",[],{"type":46,"value":80}," Cloud Logging must be enabled for the project.",{"type":40,"tag":68,"props":82,"children":84},{"className":83},[71],[85,88,90,97,99,105],{"type":40,"tag":74,"props":86,"children":87},{"disabled":76,"type":77},[],{"type":46,"value":89}," ",{"type":40,"tag":91,"props":92,"children":94},"code",{"className":93},[],[95],{"type":46,"value":96},"kubectl",{"type":46,"value":98}," and ",{"type":40,"tag":91,"props":100,"children":102},{"className":101},[],[103],{"type":46,"value":104},"gcloud",{"type":46,"value":106}," CLIs must be configured to access the GKE cluster.",{"type":40,"tag":55,"props":108,"children":110},{"id":109},"diagnostic-workflow",[111],{"type":46,"value":112},"🔍 Diagnostic Workflow",{"type":40,"tag":114,"props":115,"children":117},"h3",{"id":116},"step-0-context-acquisition-time-window-definition",[118],{"type":46,"value":119},"Step 0: Context Acquisition & Time Window Definition",{"type":40,"tag":49,"props":121,"children":122},{},[123],{"type":46,"value":124},"To begin monitoring or troubleshooting, acquire the following context from the user:",{"type":40,"tag":62,"props":126,"children":127},{},[128,147,163,179,195],{"type":40,"tag":68,"props":129,"children":130},{},[131,137,139,145],{"type":40,"tag":132,"props":133,"children":134},"strong",{},[135],{"type":46,"value":136},"Project ID",{"type":46,"value":138}," (e.g., ",{"type":40,"tag":91,"props":140,"children":142},{"className":141},[],[143],{"type":46,"value":144},"my-gcp-project",{"type":46,"value":146},")",{"type":40,"tag":68,"props":148,"children":149},{},[150,155,156,162],{"type":40,"tag":132,"props":151,"children":152},{},[153],{"type":46,"value":154},"Cluster Name",{"type":46,"value":138},{"type":40,"tag":91,"props":157,"children":159},{"className":158},[],[160],{"type":46,"value":161},"tpu-cluster",{"type":46,"value":146},{"type":40,"tag":68,"props":164,"children":165},{},[166,171,172,178],{"type":40,"tag":132,"props":167,"children":168},{},[169],{"type":46,"value":170},"Region\u002FZone",{"type":46,"value":138},{"type":40,"tag":91,"props":173,"children":175},{"className":174},[],[176],{"type":46,"value":177},"us-central1-a",{"type":46,"value":146},{"type":40,"tag":68,"props":180,"children":181},{},[182,187,188,194],{"type":40,"tag":132,"props":183,"children":184},{},[185],{"type":46,"value":186},"Slice Name",{"type":46,"value":138},{"type":40,"tag":91,"props":189,"children":191},{"className":190},[],[192],{"type":46,"value":193},"test-slice",{"type":46,"value":146},{"type":40,"tag":68,"props":196,"children":197},{},[198,203,205,211],{"type":40,"tag":132,"props":199,"children":200},{},[201],{"type":46,"value":202},"Issue Time",{"type":46,"value":204}," (Optional, only needed if diagnosing a historical failure; e.g., ",{"type":40,"tag":91,"props":206,"children":208},{"className":207},[],[209],{"type":46,"value":210},"2026-06-25T12:00:00Z",{"type":46,"value":146},{"type":40,"tag":213,"props":214,"children":216},"h4",{"id":215},"time-handling-rules-if-issue-time-is-provided",[217],{"type":46,"value":218},"Time Handling Rules (If Issue Time is provided)",{"type":40,"tag":220,"props":221,"children":222},"ol",{},[223,233],{"type":40,"tag":68,"props":224,"children":225},{},[226,231],{"type":40,"tag":132,"props":227,"children":228},{},[229],{"type":46,"value":230},"Reject Relative Time",{"type":46,"value":232},": If the user says \"a few minutes ago\" or \"just now\", stop and ask for the exact timestamp.",{"type":40,"tag":68,"props":234,"children":235},{},[236,241,243,260,262],{"type":40,"tag":132,"props":237,"children":238},{},[239],{"type":46,"value":240},"Window Calculation",{"type":46,"value":242},": Calculate the query window as ",{"type":40,"tag":132,"props":244,"children":245},{},[246,252,254],{"type":40,"tag":91,"props":247,"children":249},{"className":248},[],[250],{"type":46,"value":251},"[T - 30m]",{"type":46,"value":253}," to ",{"type":40,"tag":91,"props":255,"children":257},{"className":256},[],[258],{"type":46,"value":259},"[T + 30m]",{"type":46,"value":261},".\n",{"type":40,"tag":62,"props":263,"children":264},{},[265,284],{"type":40,"tag":68,"props":266,"children":267},{},[268,270,276,278],{"type":46,"value":269},"Let ",{"type":40,"tag":91,"props":271,"children":273},{"className":272},[],[274],{"type":46,"value":275},"Start_Time",{"type":46,"value":277}," = ",{"type":40,"tag":91,"props":279,"children":281},{"className":280},[],[282],{"type":46,"value":283},"T - 30m",{"type":40,"tag":68,"props":285,"children":286},{},[287,288,294,295],{"type":46,"value":269},{"type":40,"tag":91,"props":289,"children":291},{"className":290},[],[292],{"type":46,"value":293},"End_Time",{"type":46,"value":277},{"type":40,"tag":91,"props":296,"children":298},{"className":297},[],[299],{"type":46,"value":300},"T + 30m",{"type":40,"tag":302,"props":303,"children":304},"hr",{},[],{"type":40,"tag":114,"props":306,"children":308},{"id":307},"step-1-describe-the-slice-custom-resource-low-risk",[309,311],{"type":46,"value":310},"Step 1: Describe the Slice Custom Resource ",{"type":40,"tag":312,"props":313,"children":314},"span",{},[315],{"type":46,"value":316},"Low Risk",{"type":40,"tag":49,"props":318,"children":319},{},[320],{"type":46,"value":321},"Check the current state, topology, and conditions of the specified Slice custom resource.",{"type":40,"tag":62,"props":323,"children":324},{},[325,341],{"type":40,"tag":68,"props":326,"children":327},{},[328,333,335],{"type":40,"tag":132,"props":329,"children":330},{},[331],{"type":46,"value":332},"Tool to use",{"type":46,"value":334},": ",{"type":40,"tag":91,"props":336,"children":338},{"className":337},[],[339],{"type":46,"value":340},"run_command",{"type":40,"tag":68,"props":342,"children":343},{},[344,349,351],{"type":40,"tag":132,"props":345,"children":346},{},[347],{"type":46,"value":348},"Command",{"type":46,"value":350},":\n",{"type":40,"tag":352,"props":353,"children":358},"pre",{"className":354,"code":355,"language":356,"meta":357,"style":357},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","kubectl describe slice \u003CSlice Name>\n","bash","",[359],{"type":40,"tag":91,"props":360,"children":361},{"__ignoreMap":357},[362],{"type":40,"tag":312,"props":363,"children":366},{"class":364,"line":365},"line",1,[367,372,378,383,389,394,399,405],{"type":40,"tag":312,"props":368,"children":370},{"style":369},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[371],{"type":46,"value":96},{"type":40,"tag":312,"props":373,"children":375},{"style":374},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[376],{"type":46,"value":377}," describe",{"type":40,"tag":312,"props":379,"children":380},{"style":374},[381],{"type":46,"value":382}," slice",{"type":40,"tag":312,"props":384,"children":386},{"style":385},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[387],{"type":46,"value":388}," \u003C",{"type":40,"tag":312,"props":390,"children":391},{"style":374},[392],{"type":46,"value":393},"Slice",{"type":40,"tag":312,"props":395,"children":396},{"style":374},[397],{"type":46,"value":398}," Nam",{"type":40,"tag":312,"props":400,"children":402},{"style":401},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[403],{"type":46,"value":404},"e",{"type":40,"tag":312,"props":406,"children":407},{"style":385},[408],{"type":46,"value":409},">\n",{"type":40,"tag":213,"props":411,"children":413},{"id":412},"state-reason-analysis",[414],{"type":46,"value":415},"State & Reason Analysis",{"type":40,"tag":49,"props":417,"children":418},{},[419,421,427,429,435,437,443,444,450],{"type":46,"value":420},"Analyze the ",{"type":40,"tag":91,"props":422,"children":424},{"className":423},[],[425],{"type":46,"value":426},"Status.Conditions",{"type":46,"value":428}," (especially ",{"type":40,"tag":91,"props":430,"children":432},{"className":431},[],[433],{"type":46,"value":434},"Type: Ready",{"type":46,"value":436}," and its ",{"type":40,"tag":91,"props":438,"children":440},{"className":439},[],[441],{"type":46,"value":442},"Reason",{"type":46,"value":98},{"type":40,"tag":91,"props":445,"children":447},{"className":446},[],[448],{"type":46,"value":449},"Status",{"type":46,"value":451},"):",{"type":40,"tag":453,"props":454,"children":455},"table",{},[456,481],{"type":40,"tag":457,"props":458,"children":459},"thead",{},[460],{"type":40,"tag":461,"props":462,"children":463},"tr",{},[464,471,476],{"type":40,"tag":465,"props":466,"children":468},"th",{"align":467},"left",[469],{"type":46,"value":470},"Lifecycle State \u002F Reason",{"type":40,"tag":465,"props":472,"children":473},{"align":467},[474],{"type":46,"value":475},"Meaning",{"type":40,"tag":465,"props":477,"children":478},{"align":467},[479],{"type":46,"value":480},"Recommended Action",{"type":40,"tag":482,"props":483,"children":484},"tbody",{},[485,519,552,584,616,648,680,712],{"type":40,"tag":461,"props":486,"children":487},{},[488,501,506],{"type":40,"tag":489,"props":490,"children":491},"td",{"align":467},[492],{"type":40,"tag":132,"props":493,"children":494},{},[495],{"type":40,"tag":91,"props":496,"children":498},{"className":497},[],[499],{"type":46,"value":500},"SliceNotCreated",{"type":40,"tag":489,"props":502,"children":503},{"align":467},[504],{"type":46,"value":505},"GKE Slice Controller is initializing the slice and performing resource checks.",{"type":40,"tag":489,"props":507,"children":508},{"align":467},[509,517],{"type":40,"tag":132,"props":510,"children":511},{},[512],{"type":40,"tag":312,"props":513,"children":514},{},[515],{"type":46,"value":516},"Auto",{"type":46,"value":518}," Wait a few minutes and run the command again.",{"type":40,"tag":461,"props":520,"children":521},{},[522,534,539],{"type":40,"tag":489,"props":523,"children":524},{"align":467},[525],{"type":40,"tag":132,"props":526,"children":527},{},[528],{"type":40,"tag":91,"props":529,"children":531},{"className":530},[],[532],{"type":46,"value":533},"SliceCreationFailed",{"type":40,"tag":489,"props":535,"children":536},{"align":467},[537],{"type":46,"value":538},"Prerequisites validation failed (e.g., selected nodes don't exist, nodes are already used by another slice, or the topology doesn't match the number of partitions).",{"type":40,"tag":489,"props":540,"children":541},{"align":467},[542,550],{"type":40,"tag":132,"props":543,"children":544},{},[545],{"type":40,"tag":312,"props":546,"children":547},{},[548],{"type":46,"value":549},"Manual",{"type":46,"value":551}," Verify that the selected nodes exist, are not already in use by another slice, and that the topology matches the partition count.",{"type":40,"tag":461,"props":553,"children":554},{},[555,567,572],{"type":40,"tag":489,"props":556,"children":557},{"align":467},[558],{"type":40,"tag":132,"props":559,"children":560},{},[561],{"type":40,"tag":91,"props":562,"children":564},{"className":563},[],[565],{"type":46,"value":566},"ACTIVATING",{"type":40,"tag":489,"props":568,"children":569},{"align":467},[570],{"type":46,"value":571},"GKE is actively forming and provisioning the TPU slice.",{"type":40,"tag":489,"props":573,"children":574},{"align":467},[575,582],{"type":40,"tag":132,"props":576,"children":577},{},[578],{"type":40,"tag":312,"props":579,"children":580},{},[581],{"type":46,"value":516},{"type":46,"value":583}," Wait and monitor node provisioning.",{"type":40,"tag":461,"props":585,"children":586},{},[587,599,604],{"type":40,"tag":489,"props":588,"children":589},{"align":467},[590],{"type":40,"tag":132,"props":591,"children":592},{},[593],{"type":40,"tag":91,"props":594,"children":596},{"className":595},[],[597],{"type":46,"value":598},"ACTIVE",{"type":40,"tag":489,"props":600,"children":601},{"align":467},[602],{"type":46,"value":603},"The TPU slice is successfully formed and ready to host workloads.",{"type":40,"tag":489,"props":605,"children":606},{"align":467},[607,614],{"type":40,"tag":132,"props":608,"children":609},{},[610],{"type":40,"tag":312,"props":611,"children":612},{},[613],{"type":46,"value":516},{"type":46,"value":615}," Proceed to deploy or check workloads.",{"type":40,"tag":461,"props":617,"children":618},{},[619,631,636],{"type":40,"tag":489,"props":620,"children":621},{"align":467},[622],{"type":40,"tag":132,"props":623,"children":624},{},[625],{"type":40,"tag":91,"props":626,"children":628},{"className":627},[],[629],{"type":46,"value":630},"ACTIVE_DEGRADED",{"type":40,"tag":489,"props":632,"children":633},{"align":467},[634],{"type":46,"value":635},"The slice is usable, but one or more sub-blocks are degraded.",{"type":40,"tag":489,"props":637,"children":638},{"align":467},[639,646],{"type":40,"tag":132,"props":640,"children":641},{},[642],{"type":40,"tag":312,"props":643,"children":644},{},[645],{"type":46,"value":549},{"type":46,"value":647}," Monitor workload logs closely for interconnect or device errors. Check for faulty node\u002Fhost VMs.",{"type":40,"tag":461,"props":649,"children":650},{},[651,663,668],{"type":40,"tag":489,"props":652,"children":653},{"align":467},[654],{"type":40,"tag":132,"props":655,"children":656},{},[657],{"type":40,"tag":91,"props":658,"children":660},{"className":659},[],[661],{"type":46,"value":662},"FAILED",{"type":40,"tag":489,"props":664,"children":665},{"align":467},[666],{"type":46,"value":667},"GKE failed to form the TPU slice (e.g., selected nodes are not part of the same reservation block, or are not in the same reservation).",{"type":40,"tag":489,"props":669,"children":670},{"align":467},[671,678],{"type":40,"tag":132,"props":672,"children":673},{},[674],{"type":40,"tag":312,"props":675,"children":676},{},[677],{"type":46,"value":549},{"type":46,"value":679}," Ensure all selected nodes belong to the same reservation and reservation block.",{"type":40,"tag":461,"props":681,"children":682},{},[683,695,700],{"type":40,"tag":489,"props":684,"children":685},{"align":467},[686],{"type":40,"tag":132,"props":687,"children":688},{},[689],{"type":40,"tag":91,"props":690,"children":692},{"className":691},[],[693],{"type":46,"value":694},"DEACTIVATING",{"type":40,"tag":489,"props":696,"children":697},{"align":467},[698],{"type":46,"value":699},"The slice is dismantling (either triggered by user deletion or a critical systemic failure).",{"type":40,"tag":489,"props":701,"children":702},{"align":467},[703,710],{"type":40,"tag":132,"props":704,"children":705},{},[706],{"type":40,"tag":312,"props":707,"children":708},{},[709],{"type":46,"value":516},{"type":46,"value":711}," Wait for dismantling to finish, or patch finalizers if it gets stuck (see Resolution 1).",{"type":40,"tag":461,"props":713,"children":714},{},[715,727,732],{"type":40,"tag":489,"props":716,"children":717},{"align":467},[718],{"type":40,"tag":132,"props":719,"children":720},{},[721],{"type":40,"tag":91,"props":722,"children":724},{"className":723},[],[725],{"type":46,"value":726},"INCOMPLETE",{"type":40,"tag":489,"props":728,"children":729},{"align":467},[730],{"type":46,"value":731},"The terminal phase before the Slice CR is deleted from the cluster.",{"type":40,"tag":489,"props":733,"children":734},{"align":467},[735,742],{"type":40,"tag":132,"props":736,"children":737},{},[738],{"type":40,"tag":312,"props":739,"children":740},{},[741],{"type":46,"value":516},{"type":46,"value":743}," No action required; the resource will be removed shortly.",{"type":40,"tag":302,"props":745,"children":746},{},[],{"type":40,"tag":114,"props":748,"children":750},{"id":749},"step-2-verify-workload-specification-low-risk",[751,753],{"type":46,"value":752},"Step 2: Verify Workload Specification ",{"type":40,"tag":312,"props":754,"children":755},{},[756],{"type":46,"value":316},{"type":40,"tag":49,"props":758,"children":759},{},[760],{"type":46,"value":761},"Ensure the user's workload manifests are configured correctly to target the dynamic slice.",{"type":40,"tag":213,"props":763,"children":765},{"id":764},"_1-single-slice-workload-requirements",[766],{"type":46,"value":767},"1. Single-Slice Workload Requirements",{"type":40,"tag":49,"props":769,"children":770},{},[771],{"type":46,"value":772},"Check that the Pod template contains the following annotations and selectors:",{"type":40,"tag":62,"props":774,"children":775},{},[776,805],{"type":40,"tag":68,"props":777,"children":778},{},[779,784,785],{"type":40,"tag":132,"props":780,"children":781},{},[782],{"type":46,"value":783},"Annotations",{"type":46,"value":350},{"type":40,"tag":62,"props":786,"children":787},{},[788],{"type":40,"tag":68,"props":789,"children":790},{},[791,797,798,804],{"type":40,"tag":91,"props":792,"children":794},{"className":793},[],[795],{"type":46,"value":796},"cloud.google.com\u002Fgke-tpu-slice-topology: \"\u003CTopology>\"",{"type":46,"value":138},{"type":40,"tag":91,"props":799,"children":801},{"className":800},[],[802],{"type":46,"value":803},"\"4x4x4\"",{"type":46,"value":146},{"type":40,"tag":68,"props":806,"children":807},{},[808,813,814],{"type":40,"tag":132,"props":809,"children":810},{},[811],{"type":46,"value":812},"NodeSelector",{"type":46,"value":350},{"type":40,"tag":62,"props":815,"children":816},{},[817,833,850],{"type":40,"tag":68,"props":818,"children":819},{},[820,826,827,832],{"type":40,"tag":91,"props":821,"children":823},{"className":822},[],[824],{"type":46,"value":825},"cloud.google.com\u002Fgke-tpu-topology: \"\u003CTopology>\"",{"type":46,"value":138},{"type":40,"tag":91,"props":828,"children":830},{"className":829},[],[831],{"type":46,"value":803},{"type":46,"value":146},{"type":40,"tag":68,"props":834,"children":835},{},[836,842,843,849],{"type":40,"tag":91,"props":837,"children":839},{"className":838},[],[840],{"type":46,"value":841},"cloud.google.com\u002Fgke-tpu-accelerator: \"\u003CAccelerator Type>\"",{"type":46,"value":138},{"type":40,"tag":91,"props":844,"children":846},{"className":845},[],[847],{"type":46,"value":848},"\"tpu7x\"",{"type":46,"value":146},{"type":40,"tag":68,"props":851,"children":852},{},[853,859,860,866],{"type":40,"tag":91,"props":854,"children":856},{"className":855},[],[857],{"type":46,"value":858},"cloud.google.com\u002Fgke-tpu-slice: \"\u003CSlice Name>\"",{"type":46,"value":138},{"type":40,"tag":91,"props":861,"children":863},{"className":862},[],[864],{"type":46,"value":865},"\"test-slice\"",{"type":46,"value":146},{"type":40,"tag":213,"props":868,"children":870},{"id":869},"_2-multi-slice-jobset-workload-requirements",[871],{"type":46,"value":872},"2. Multi-Slice (JobSet) Workload Requirements",{"type":40,"tag":49,"props":874,"children":875},{},[876],{"type":46,"value":877},"If deploying a multi-slice JobSet, verify:",{"type":40,"tag":62,"props":879,"children":880},{},[881,902,922],{"type":40,"tag":68,"props":882,"children":883},{},[884,889,890],{"type":40,"tag":132,"props":885,"children":886},{},[887],{"type":46,"value":888},"JobSet Annotation",{"type":46,"value":350},{"type":40,"tag":62,"props":891,"children":892},{},[893],{"type":40,"tag":68,"props":894,"children":895},{},[896],{"type":40,"tag":91,"props":897,"children":899},{"className":898},[],[900],{"type":46,"value":901},"alpha.jobset.sigs.k8s.io\u002Fexclusive-topology: cloud.google.com\u002Fgke-tpu-slice",{"type":40,"tag":68,"props":903,"children":904},{},[905,910,911],{"type":40,"tag":132,"props":906,"children":907},{},[908],{"type":46,"value":909},"Pod Template Annotations",{"type":46,"value":350},{"type":40,"tag":62,"props":912,"children":913},{},[914],{"type":40,"tag":68,"props":915,"children":916},{},[917],{"type":40,"tag":91,"props":918,"children":920},{"className":919},[],[921],{"type":46,"value":796},{"type":40,"tag":68,"props":923,"children":924},{},[925,930,931],{"type":40,"tag":132,"props":926,"children":927},{},[928],{"type":46,"value":929},"Pod Template NodeSelector",{"type":46,"value":350},{"type":40,"tag":62,"props":932,"children":933},{},[934,942,950],{"type":40,"tag":68,"props":935,"children":936},{},[937],{"type":40,"tag":91,"props":938,"children":940},{"className":939},[],[941],{"type":46,"value":825},{"type":40,"tag":68,"props":943,"children":944},{},[945],{"type":40,"tag":91,"props":946,"children":948},{"className":947},[],[949],{"type":46,"value":841},{"type":40,"tag":68,"props":951,"children":952},{},[953],{"type":40,"tag":954,"props":955,"children":956},"em",{},[957,959,965],{"type":46,"value":958},"Note: Do NOT manually specify ",{"type":40,"tag":91,"props":960,"children":962},{"className":961},[],[963],{"type":46,"value":964},"cloud.google.com\u002Fgke-tpu-slice",{"type":46,"value":966}," in the nodeSelector; JobSet handles slice assignment automatically.",{"type":40,"tag":302,"props":968,"children":969},{},[],{"type":40,"tag":55,"props":971,"children":973},{"id":972},"️-resolution-management-workflow",[974],{"type":46,"value":975},"🛠️ Resolution & Management Workflow",{"type":40,"tag":114,"props":977,"children":979},{"id":978},"resolution-1-force-delete-a-stuck-slice-high-risk",[980,982],{"type":46,"value":981},"Resolution 1: Force Delete a Stuck Slice ",{"type":40,"tag":312,"props":983,"children":984},{},[985],{"type":46,"value":986},"High Risk",{"type":40,"tag":49,"props":988,"children":989},{},[990,992,997],{"type":46,"value":991},"If a slice is stuck in ",{"type":40,"tag":91,"props":993,"children":995},{"className":994},[],[996],{"type":46,"value":694},{"type":46,"value":998}," or deletion hangs indefinitely (often due to finalizers awaiting resource cleanup), patch the resource to remove finalizers.",{"type":40,"tag":62,"props":1000,"children":1001},{},[1002,1015,1097],{"type":40,"tag":68,"props":1003,"children":1004},{},[1005,1009,1010],{"type":40,"tag":132,"props":1006,"children":1007},{},[1008],{"type":46,"value":332},{"type":46,"value":334},{"type":40,"tag":91,"props":1011,"children":1013},{"className":1012},[],[1014],{"type":46,"value":340},{"type":40,"tag":68,"props":1016,"children":1017},{},[1018,1022,1023],{"type":40,"tag":132,"props":1019,"children":1020},{},[1021],{"type":46,"value":348},{"type":46,"value":350},{"type":40,"tag":352,"props":1024,"children":1026},{"className":354,"code":1025,"language":356,"meta":357,"style":357},"kubectl patch slice \u003CSlice Name> --type json -p='[{\"op\": \"remove\", \"path\": \"\u002Fmetadata\u002Ffinalizers\"}]'\n",[1027],{"type":40,"tag":91,"props":1028,"children":1029},{"__ignoreMap":357},[1030],{"type":40,"tag":312,"props":1031,"children":1032},{"class":364,"line":365},[1033,1037,1042,1046,1050,1054,1058,1062,1067,1072,1077,1082,1087,1092],{"type":40,"tag":312,"props":1034,"children":1035},{"style":369},[1036],{"type":46,"value":96},{"type":40,"tag":312,"props":1038,"children":1039},{"style":374},[1040],{"type":46,"value":1041}," patch",{"type":40,"tag":312,"props":1043,"children":1044},{"style":374},[1045],{"type":46,"value":382},{"type":40,"tag":312,"props":1047,"children":1048},{"style":385},[1049],{"type":46,"value":388},{"type":40,"tag":312,"props":1051,"children":1052},{"style":374},[1053],{"type":46,"value":393},{"type":40,"tag":312,"props":1055,"children":1056},{"style":374},[1057],{"type":46,"value":398},{"type":40,"tag":312,"props":1059,"children":1060},{"style":401},[1061],{"type":46,"value":404},{"type":40,"tag":312,"props":1063,"children":1064},{"style":385},[1065],{"type":46,"value":1066},">",{"type":40,"tag":312,"props":1068,"children":1069},{"style":374},[1070],{"type":46,"value":1071}," --type",{"type":40,"tag":312,"props":1073,"children":1074},{"style":374},[1075],{"type":46,"value":1076}," json",{"type":40,"tag":312,"props":1078,"children":1079},{"style":374},[1080],{"type":46,"value":1081}," -p=",{"type":40,"tag":312,"props":1083,"children":1084},{"style":385},[1085],{"type":46,"value":1086},"'",{"type":40,"tag":312,"props":1088,"children":1089},{"style":374},[1090],{"type":46,"value":1091},"[{\"op\": \"remove\", \"path\": \"\u002Fmetadata\u002Ffinalizers\"}]",{"type":40,"tag":312,"props":1093,"children":1094},{"style":385},[1095],{"type":46,"value":1096},"'\n",{"type":40,"tag":68,"props":1098,"children":1099},{},[1100,1105],{"type":40,"tag":132,"props":1101,"children":1102},{},[1103],{"type":46,"value":1104},"Automation",{"type":46,"value":1106},": Stop and ask for explicit user confirmation before executing this patch.",{"type":40,"tag":302,"props":1108,"children":1109},{},[],{"type":40,"tag":114,"props":1111,"children":1113},{"id":1112},"resolution-2-disable-and-clean-up-slice-controller-high-risk",[1114,1116],{"type":46,"value":1115},"Resolution 2: Disable and Clean Up Slice Controller ",{"type":40,"tag":312,"props":1117,"children":1118},{},[1119],{"type":46,"value":986},{"type":40,"tag":49,"props":1121,"children":1122},{},[1123],{"type":46,"value":1124},"If the user needs to completely disable dynamic slicing and the GKE Slice Controller:",{"type":40,"tag":220,"props":1126,"children":1127},{},[1128,1170,1269,1307],{"type":40,"tag":68,"props":1129,"children":1130},{},[1131,1136,1137,1165],{"type":40,"tag":132,"props":1132,"children":1133},{},[1134],{"type":46,"value":1135},"Check for existing Slices",{"type":46,"value":350},{"type":40,"tag":352,"props":1138,"children":1140},{"className":354,"code":1139,"language":356,"meta":357,"style":357},"kubectl get slice -A\n",[1141],{"type":40,"tag":91,"props":1142,"children":1143},{"__ignoreMap":357},[1144],{"type":40,"tag":312,"props":1145,"children":1146},{"class":364,"line":365},[1147,1151,1156,1160],{"type":40,"tag":312,"props":1148,"children":1149},{"style":369},[1150],{"type":46,"value":96},{"type":40,"tag":312,"props":1152,"children":1153},{"style":374},[1154],{"type":46,"value":1155}," get",{"type":40,"tag":312,"props":1157,"children":1158},{"style":374},[1159],{"type":46,"value":382},{"type":40,"tag":312,"props":1161,"children":1162},{"style":374},[1163],{"type":46,"value":1164}," -A\n",{"type":40,"tag":954,"props":1166,"children":1167},{},[1168],{"type":46,"value":1169},"Ensure all slices are deleted before disabling the controller.",{"type":40,"tag":68,"props":1171,"children":1172},{},[1173,1178,1179],{"type":40,"tag":132,"props":1174,"children":1175},{},[1176],{"type":46,"value":1177},"Disable Slice Controller via gcloud",{"type":46,"value":350},{"type":40,"tag":352,"props":1180,"children":1182},{"className":354,"code":1181,"language":356,"meta":357,"style":357},"gcloud container clusters update \u003CCluster Name> \\\n    --location=\u003CRegion\u002FZone> \\\n    --no-enable-slice-controller\n",[1183],{"type":40,"tag":91,"props":1184,"children":1185},{"__ignoreMap":357},[1186,1234,1260],{"type":40,"tag":312,"props":1187,"children":1188},{"class":364,"line":365},[1189,1193,1198,1203,1208,1212,1217,1221,1225,1229],{"type":40,"tag":312,"props":1190,"children":1191},{"style":369},[1192],{"type":46,"value":104},{"type":40,"tag":312,"props":1194,"children":1195},{"style":374},[1196],{"type":46,"value":1197}," container",{"type":40,"tag":312,"props":1199,"children":1200},{"style":374},[1201],{"type":46,"value":1202}," clusters",{"type":40,"tag":312,"props":1204,"children":1205},{"style":374},[1206],{"type":46,"value":1207}," update",{"type":40,"tag":312,"props":1209,"children":1210},{"style":385},[1211],{"type":46,"value":388},{"type":40,"tag":312,"props":1213,"children":1214},{"style":374},[1215],{"type":46,"value":1216},"Cluster",{"type":40,"tag":312,"props":1218,"children":1219},{"style":374},[1220],{"type":46,"value":398},{"type":40,"tag":312,"props":1222,"children":1223},{"style":401},[1224],{"type":46,"value":404},{"type":40,"tag":312,"props":1226,"children":1227},{"style":385},[1228],{"type":46,"value":1066},{"type":40,"tag":312,"props":1230,"children":1231},{"style":401},[1232],{"type":46,"value":1233}," \\\n",{"type":40,"tag":312,"props":1235,"children":1237},{"class":364,"line":1236},2,[1238,1243,1248,1252,1256],{"type":40,"tag":312,"props":1239,"children":1240},{"style":374},[1241],{"type":46,"value":1242},"    --location=",{"type":40,"tag":312,"props":1244,"children":1245},{"style":385},[1246],{"type":46,"value":1247},"\u003C",{"type":40,"tag":312,"props":1249,"children":1250},{"style":374},[1251],{"type":46,"value":170},{"type":40,"tag":312,"props":1253,"children":1254},{"style":385},[1255],{"type":46,"value":1066},{"type":40,"tag":312,"props":1257,"children":1258},{"style":401},[1259],{"type":46,"value":1233},{"type":40,"tag":312,"props":1261,"children":1263},{"class":364,"line":1262},3,[1264],{"type":40,"tag":312,"props":1265,"children":1266},{"style":374},[1267],{"type":46,"value":1268},"    --no-enable-slice-controller\n",{"type":40,"tag":68,"props":1270,"children":1271},{},[1272,1277,1278],{"type":40,"tag":132,"props":1273,"children":1274},{},[1275],{"type":46,"value":1276},"Delete the Slice CRD",{"type":46,"value":350},{"type":40,"tag":352,"props":1279,"children":1281},{"className":354,"code":1280,"language":356,"meta":357,"style":357},"kubectl delete crd slices.accelerator.gke.io\n",[1282],{"type":40,"tag":91,"props":1283,"children":1284},{"__ignoreMap":357},[1285],{"type":40,"tag":312,"props":1286,"children":1287},{"class":364,"line":365},[1288,1292,1297,1302],{"type":40,"tag":312,"props":1289,"children":1290},{"style":369},[1291],{"type":46,"value":96},{"type":40,"tag":312,"props":1293,"children":1294},{"style":374},[1295],{"type":46,"value":1296}," delete",{"type":40,"tag":312,"props":1298,"children":1299},{"style":374},[1300],{"type":46,"value":1301}," crd",{"type":40,"tag":312,"props":1303,"children":1304},{"style":374},[1305],{"type":46,"value":1306}," slices.accelerator.gke.io\n",{"type":40,"tag":68,"props":1308,"children":1309},{},[1310,1315,1317],{"type":40,"tag":132,"props":1311,"children":1312},{},[1313],{"type":46,"value":1314},"Clean up Node Labels",{"type":46,"value":1316},":\nRemove GKE TPU Slice labels from all nodes in the cluster:\n",{"type":40,"tag":352,"props":1318,"children":1320},{"className":354,"code":1319,"language":356,"meta":357,"style":357},"kubectl label nodes --all cloud.google.com\u002Fgke-tpu-slice- cloud.google.com\u002Fgke-tpu-slice-topology-\n",[1321],{"type":40,"tag":91,"props":1322,"children":1323},{"__ignoreMap":357},[1324],{"type":40,"tag":312,"props":1325,"children":1326},{"class":364,"line":365},[1327,1331,1336,1341,1346,1351],{"type":40,"tag":312,"props":1328,"children":1329},{"style":369},[1330],{"type":46,"value":96},{"type":40,"tag":312,"props":1332,"children":1333},{"style":374},[1334],{"type":46,"value":1335}," label",{"type":40,"tag":312,"props":1337,"children":1338},{"style":374},[1339],{"type":46,"value":1340}," nodes",{"type":40,"tag":312,"props":1342,"children":1343},{"style":374},[1344],{"type":46,"value":1345}," --all",{"type":40,"tag":312,"props":1347,"children":1348},{"style":374},[1349],{"type":46,"value":1350}," cloud.google.com\u002Fgke-tpu-slice-",{"type":40,"tag":312,"props":1352,"children":1353},{"style":374},[1354],{"type":46,"value":1355}," cloud.google.com\u002Fgke-tpu-slice-topology-\n",{"type":40,"tag":62,"props":1357,"children":1358},{},[1359],{"type":40,"tag":68,"props":1360,"children":1361},{},[1362,1366],{"type":40,"tag":132,"props":1363,"children":1364},{},[1365],{"type":46,"value":1104},{"type":46,"value":1367},": Stop and ask for explicit user confirmation before executing any disabling or destructive cleanup commands.",{"type":40,"tag":302,"props":1369,"children":1370},{},[],{"type":40,"tag":55,"props":1372,"children":1374},{"id":1373},"copypaste-checklist",[1375],{"type":46,"value":1376},"📋 Copypaste Checklist",{"type":40,"tag":62,"props":1378,"children":1380},{"className":1379},[65],[1381,1390,1407,1416,1425,1434],{"type":40,"tag":68,"props":1382,"children":1384},{"className":1383},[71],[1385,1388],{"type":40,"tag":74,"props":1386,"children":1387},{"disabled":76,"type":77},[],{"type":46,"value":1389}," Acquire project context and slice names.",{"type":40,"tag":68,"props":1391,"children":1393},{"className":1392},[71],[1394,1397,1399,1405],{"type":40,"tag":74,"props":1395,"children":1396},{"disabled":76,"type":77},[],{"type":46,"value":1398}," Inspect slice status via ",{"type":40,"tag":91,"props":1400,"children":1402},{"className":1401},[],[1403],{"type":46,"value":1404},"kubectl describe slice",{"type":46,"value":1406},".",{"type":40,"tag":68,"props":1408,"children":1410},{"className":1409},[71],[1411,1414],{"type":40,"tag":74,"props":1412,"children":1413},{"disabled":76,"type":77},[],{"type":46,"value":1415}," Inspect Kubernetes events and GKE control plane logs for errors.",{"type":40,"tag":68,"props":1417,"children":1419},{"className":1418},[71],[1420,1423],{"type":40,"tag":74,"props":1421,"children":1422},{"disabled":76,"type":77},[],{"type":46,"value":1424}," Validate workload manifest annotations and nodeSelectors.",{"type":40,"tag":68,"props":1426,"children":1428},{"className":1427},[71],[1429,1432],{"type":40,"tag":74,"props":1430,"children":1431},{"disabled":76,"type":77},[],{"type":46,"value":1433}," If deletion hangs, patch finalizers (requires user approval).",{"type":40,"tag":68,"props":1435,"children":1437},{"className":1436},[71],[1438,1441],{"type":40,"tag":74,"props":1439,"children":1440},{"disabled":76,"type":77},[],{"type":46,"value":1442}," If decommissioning, follow the full Slice Controller disabling sequence.",{"type":40,"tag":1444,"props":1445,"children":1446},"style",{},[1447],{"type":46,"value":1448},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1450,"total":1634},[1451,1469,1485,1506,1520,1529,1543,1560,1577,1590,1606,1616],{"slug":1452,"name":1452,"fn":1453,"description":1454,"org":1455,"tags":1456,"stars":1466,"repoUrl":1467,"updatedAt":1468},"kb-search","search and extract local knowledge base documents","Allows listing, searching and extracting information from local knowledge base documents for information about tables\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1457,1460,1463],{"name":1458,"slug":1459,"type":16},"Documentation","documentation",{"name":1461,"slug":1462,"type":16},"Knowledge Base","knowledge-base",{"name":1464,"slug":1465,"type":16},"Search","search",6749,"https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fknowledge-catalog","2026-07-12T07:38:52.157375",{"slug":1470,"name":1471,"fn":1472,"description":1473,"org":1474,"tags":1475,"stars":1466,"repoUrl":1467,"updatedAt":1484},"knowledgecatalogdiscoveryagent","knowledge_catalog_discovery_agent","search and rank Knowledge Catalog data entries","Analyzes user queries, extracts relevant predicates, and utilizes Knowledge Catalog Search to find and rank the most relevant data entries. Engages with the user throughout the process.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1476,1479,1480,1483],{"name":1477,"slug":1478,"type":16},"Data Analysis","data-analysis",{"name":9,"slug":8,"type":16},{"name":1481,"slug":1482,"type":16},"Knowledge Management","knowledge-management",{"name":1464,"slug":1465,"type":16},"2026-07-12T07:38:22.196851",{"slug":1486,"name":1486,"fn":1487,"description":1488,"org":1489,"tags":1490,"stars":1503,"repoUrl":1504,"updatedAt":1505},"contributing","contribute to Cloud Foundation Fabric","End-to-end workflow for contributing to Cloud Foundation Fabric: triaging GitHub issues, proactive feature development, validating with tests and Policy Troubleshooter, and submitting sanitized Pull Requests. Use when addressing a Fabric GitHub issue, developing a module or FAST stage change, or preparing a branch for a pull request.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1491,1493,1496,1499,1500],{"name":1104,"slug":1492,"type":16},"automation",{"name":1494,"slug":1495,"type":16},"Engineering","engineering",{"name":1497,"slug":1498,"type":16},"GitHub","github",{"name":9,"slug":8,"type":16},{"name":1501,"slug":1502,"type":16},"Pull Requests","pull-requests",2062,"https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fcloud-foundation-fabric","2026-07-31T06:23:36.935005",{"slug":1507,"name":1507,"fn":1508,"description":1509,"org":1510,"tags":1511,"stars":1503,"repoUrl":1504,"updatedAt":1519},"fabric-builder","generate Terraform code for Google Cloud","Generates idiomatic Cloud Foundation Fabric (CFF) Terraform code using CFF modules. Use when users ask to create GCP resources, use Fabric modules, or generate Terraform code for Google Cloud.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1512,1513,1516],{"name":9,"slug":8,"type":16},{"name":1514,"slug":1515,"type":16},"Infrastructure as Code","infrastructure-as-code",{"name":1517,"slug":1518,"type":16},"Terraform","terraform","2026-07-12T07:38:23.514555",{"slug":1521,"name":1521,"fn":1522,"description":1523,"org":1524,"tags":1525,"stars":1503,"repoUrl":1504,"updatedAt":1528},"fast-0-org-setup-prereqs","prepare prerequisites for FAST 0-org-setup","Guides the user step-by-step through the prerequisites for the FAST 0-org-setup stage, supporting both Standard GCP and Google Cloud Dedicated (GCD) environments. Use when a user asks to prepare or run prerequisites for 0-org-setup or bootstrap the FAST landing zone.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1526,1527],{"name":9,"slug":8,"type":16},{"name":14,"slug":15,"type":16},"2026-07-12T07:38:28.127148",{"slug":1530,"name":1530,"fn":1531,"description":1532,"org":1533,"tags":1534,"stars":1540,"repoUrl":1541,"updatedAt":1542},"agent-aware-cli","design agent-aware command-line interfaces","Guide for designing and implementing command-line interfaces (CLIs) that are equally usable by human developers and automated coding agents. Use when the user wants to build a CLI, apply CLI best practices, or use Go with Cobra and Viper.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1535,1538,1539],{"name":1536,"slug":1537,"type":16},"CLI","cli",{"name":1494,"slug":1495,"type":16},{"name":9,"slug":8,"type":16},1150,"https:\u002F\u002Fgithub.com\u002FGoogleCloudPlatform\u002Fvertex-ai-creative-studio","2026-07-12T07:39:08.41406",{"slug":1544,"name":1544,"fn":1545,"description":1546,"org":1547,"tags":1548,"stars":1540,"repoUrl":1541,"updatedAt":1559},"build-mcp-genmedia","build and configure GenAI MCP servers","Builds the mcp-genmedia Go MCP servers (nanobanana, veo, lyria, gemini-multimodal, chirp3-hd, avtool) from source and wires them into settings.json. Use this skill whenever the MCP tools are missing or broken — typically at the start of a new session, after a container restart, or when \u002Ftmp has been wiped. The prebuilt binaries in \u002Fworkspace\u002F.local\u002Fbin\u002F have no exec bit and live on a noexec mount; this skill compiles fresh executables into \u002Ftmp\u002Fbin\u002F where execution is allowed.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1549,1552,1553,1556],{"name":1550,"slug":1551,"type":16},"API Development","api-development",{"name":9,"slug":8,"type":16},{"name":1554,"slug":1555,"type":16},"LLM","llm",{"name":1557,"slug":1558,"type":16},"MCP","mcp","2026-07-12T07:39:10.911302",{"slug":1561,"name":1561,"fn":1562,"description":1563,"org":1564,"tags":1565,"stars":1540,"repoUrl":1541,"updatedAt":1576},"genmedia-audio-engineer","synthesize and mix audio content","Expert in audio synthesis, music generation, and mixing. Use when creating podcasts, background scores, or multi-track audio layering using mcp-chirp3-go, mcp-lyria-go, mcp-gemini-go, mcp-nanobanana-go, and mcp-avtool-go.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1566,1569,1572,1573],{"name":1567,"slug":1568,"type":16},"Audio","audio",{"name":1570,"slug":1571,"type":16},"Creative","creative",{"name":9,"slug":8,"type":16},{"name":1574,"slug":1575,"type":16},"Vertex AI","vertex-ai","2026-07-12T07:39:16.623879",{"slug":1578,"name":1578,"fn":1579,"description":1580,"org":1581,"tags":1582,"stars":1540,"repoUrl":1541,"updatedAt":1589},"genmedia-image-artist","generate and edit AI images","Expert in AI image generation and editing. Use when the user needs high-quality textures, character-consistent visuals, or image-to-image editing using mcp-nanobanana-go.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1583,1584,1585,1588],{"name":1570,"slug":1571,"type":16},{"name":9,"slug":8,"type":16},{"name":1586,"slug":1587,"type":16},"Image Generation","image-generation",{"name":1574,"slug":1575,"type":16},"2026-07-12T07:39:15.372822",{"slug":1591,"name":1591,"fn":1592,"description":1593,"org":1594,"tags":1595,"stars":1540,"repoUrl":1541,"updatedAt":1605},"genmedia-producer","produce multi-step media content","Expert media production assistant. Use when requested to help with storyboarding, podcast creation, audio assembly, or complex multi-step media workflows using the GenMedia MCP servers (Veo, Lyria, Gemini TTS, NanoBanana).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1596,1597,1598,1599,1602],{"name":1567,"slug":1568,"type":16},{"name":1570,"slug":1571,"type":16},{"name":9,"slug":8,"type":16},{"name":1600,"slug":1601,"type":16},"Media","media",{"name":1603,"slug":1604,"type":16},"Video","video","2026-07-12T07:39:09.672849",{"slug":1607,"name":1607,"fn":1608,"description":1609,"org":1610,"tags":1611,"stars":1540,"repoUrl":1541,"updatedAt":1615},"genmedia-video-editor","edit and compose video content","Expert in video composition, editing, and format conversion. Use when the user wants to generate high-quality video, overlay images on video, concatenate clips, create GIFs, or sync audio to video using mcp-avtool-go and mcp-veo-go.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1612,1613,1614],{"name":1570,"slug":1571,"type":16},{"name":9,"slug":8,"type":16},{"name":1603,"slug":1604,"type":16},"2026-07-12T07:39:13.749081",{"slug":1617,"name":1617,"fn":1618,"description":1619,"org":1620,"tags":1621,"stars":1540,"repoUrl":1541,"updatedAt":1633},"genmedia-voice-director","generate expressive text-to-speech with Gemini","Expert in casting, directing, and generating expressive text-to-speech using Gemini TTS. Use this when the user needs virtual voice actor personas, expressive speech generation, or multiple variations of a voiceover (like \"take 3 on the bounce\").",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1622,1623,1624,1627,1630],{"name":1567,"slug":1568,"type":16},{"name":1570,"slug":1571,"type":16},{"name":1625,"slug":1626,"type":16},"Gemini","gemini",{"name":1628,"slug":1629,"type":16},"Speech","speech",{"name":1631,"slug":1632,"type":16},"Text-to-Speech","text-to-speech","2026-07-12T07:39:17.86673",80,{"items":1636,"total":1728},[1637,1649,1664,1677,1690,1701,1717],{"slug":1638,"name":1638,"fn":1639,"description":1640,"org":1641,"tags":1642,"stars":24,"repoUrl":25,"updatedAt":1648},"custom-golden-image-discovery","discover golden base images for GKE nodes","Expert at discovering golden base images for GKE custom nodes using technical specs or context clues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1643,1646,1647],{"name":1644,"slug":1645,"type":16},"Deployment","deployment",{"name":9,"slug":8,"type":16},{"name":21,"slug":22,"type":16},"2026-07-12T07:39:30.888879",{"slug":1650,"name":1650,"fn":1651,"description":1652,"org":1653,"tags":1654,"stars":24,"repoUrl":25,"updatedAt":1663},"gke-ai-troubleshooting-handle-disruption-gpu-tpu","diagnose GPU and TPU workload disruptions","Diagnose and predict node disruption during Compute Engine host maintenance for GPU and TPU workloads.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1655,1658,1659,1660],{"name":1656,"slug":1657,"type":16},"Debugging","debugging",{"name":9,"slug":8,"type":16},{"name":21,"slug":22,"type":16},{"name":1661,"slug":1662,"type":16},"Performance","performance","2026-07-28T05:34:18.149515",{"slug":1665,"name":1665,"fn":1666,"description":1667,"org":1668,"tags":1669,"stars":24,"repoUrl":25,"updatedAt":1676},"gke-ai-troubleshooting-jobset-interruption","diagnose GKE JobSet interruptions","Systematically diagnose GKE JobSet interruptions, restarts, and preemptions for AI\u002FML training workloads. Identifies preemption events, maintenance interruptions, bad host VMs, unhealthy pods, and coordinator worker failures.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1670,1671,1672,1673],{"name":1656,"slug":1657,"type":16},{"name":9,"slug":8,"type":16},{"name":21,"slug":22,"type":16},{"name":1674,"slug":1675,"type":16},"Observability","observability","2026-07-12T07:40:04.511878",{"slug":1678,"name":1678,"fn":1679,"description":1680,"org":1681,"tags":1682,"stars":24,"repoUrl":25,"updatedAt":1689},"gke-ai-troubleshooting-skill-creation-guide","create GKE troubleshooting skill bundles","Expert instructions for building high-quality GKE troubleshooting skills. Codifies Step 0 context rules, zero-hallucination signatures, and explicit LQL\u002FPromQL query requirements.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1683,1684,1685,1686],{"name":1458,"slug":1459,"type":16},{"name":1494,"slug":1495,"type":16},{"name":9,"slug":8,"type":16},{"name":1687,"slug":1688,"type":16},"Technical Writing","technical-writing","2026-07-12T07:39:50.73484",{"slug":1691,"name":1691,"fn":1692,"description":1693,"org":1694,"tags":1695,"stars":24,"repoUrl":25,"updatedAt":1700},"gke-ai-troubleshooting-tpu-connection-failure-vbar-oom","diagnose GKE TPU connection failures","Diagnose and prevent `vbar_control_agent` segfaults and OOMs caused by race conditions during TPU device resets and frequent metrics collection (e.g. every 3s). Use when TPU slice initialization fails or `vbar_control_agent` crashes on TPU v6e nodes.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1696,1697,1698,1699],{"name":1656,"slug":1657,"type":16},{"name":9,"slug":8,"type":16},{"name":21,"slug":22,"type":16},{"name":1661,"slug":1662,"type":16},"2026-07-12T07:39:49.482979",{"slug":1702,"name":1702,"fn":1703,"description":1704,"org":1705,"tags":1706,"stars":24,"repoUrl":25,"updatedAt":1716},"gke-app-onboarding","containerize and deploy apps to GKE","Workflows for containerizing and deploying applications to GKE for the first time.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1707,1710,1711,1712,1713],{"name":1708,"slug":1709,"type":16},"Containers","containers",{"name":1644,"slug":1645,"type":16},{"name":9,"slug":8,"type":16},{"name":21,"slug":22,"type":16},{"name":1714,"slug":1715,"type":16},"Onboarding","onboarding","2026-07-12T07:39:41.935837",{"slug":1718,"name":1718,"fn":1719,"description":1720,"org":1721,"tags":1722,"stars":24,"repoUrl":25,"updatedAt":1727},"gke-backup-dr","configure GKE backup and disaster recovery","Workflows for configuring Backup for GKE and disaster recovery.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1723,1724,1725,1726],{"name":1644,"slug":1645,"type":16},{"name":9,"slug":8,"type":16},{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},"2026-07-12T07:39:34.806995",25]