THE MEDIA FOR AI THAT ACTUALLY HELPS.English edition · Understand & take action
Google

Generate Kubernetes manifestos for GKE

gke-manifest-generation

In brief

From a natural language description or a code change, this skill produces or updates YAMLs designed for both Autopilot and Standard: security context, demands and limits, probes, volumes, secrets, Gateway routes API, VM Spot targeting, or an inference service (vLLM, TGI, Gemma). Each resource must explicitly declare its namespace, and each microservice a dedicated ServiceAccount rather than the default account. Health probes are treated as mandatory, isolation and hardening (Pod Security Standards) as rules, not options. It is not a tool for live operations or diagnosis of pods (gke-workload-roubleshooting), nor provision of infrastructure (gke-cluster-creation).

What it does

  • Impose an explicit namespace and dedicated ServiceAccount on the generated resources, instead of the default space account.
  • Rule demands and limits taking into account Autopilot and Standard, and do not forget the start, liveliness and availability probes.
  • Also covers routing (Services, Gateway API), volumes and StorageClasses, high availability and, if applicable, an inference server.
  • Stops the generation or reconciliation of YAML: the troubleshooting of a pod live and the creation of the cluster are other skills.

Who it is for, and an example

Developers and platform teams who want a GKE manifesto ready for production, not a diagnosis on an already broken cluster.

Example request: "Generates Deployment and HTTPRoute for our API on Autopilot, with dedicated ServiceAccount, probes and limits, without going to inspect live pods. »

The SKILL.md sets out imperative generation rules (namespace, accounts, probes, hardening) and excludes live operations such as infrastructure creation. Example written by iadujour.fr from the SKILL.md, not tested.

Install

npx skills add google/skills, then select the skill, target agents and range (README).

npx skills add google/skills

Level: Intermediate

Suppose a GKE cluster, kubectl and gcloud, and a good mastery of Kubernetes.

SKILL.md excerpt

The original description, which the agent reads to decide whether to load the skill (in English):

Generates and updates secure, production-ready Kubernetes YAML manifests optimized for GKE Autopilot and GKE Standard clusters. […]

Quoted from SKILL.md at commit 793c036 . The folder also contains 5 extra files (references/).

The SKILL.md has 252 lines and 5 main sections:

  • Attribution
  • Core Rules & Verification
  • Specialty Workloads: GKE AI/Inference Serving (vLLM, TGI, etc.)
  • Tooling & Grounding Guidelines
  • Reference Examples

Licence: Apache 2.0

Checked on 10 November 2026 : repository LICENSE file .

The licence allows reuse: the full SKILL.md text is reproduced below, unmodified, with its licence notice.

Full SKILL.md text

Reproduced unmodified from google/skills (commit 793c036) , © Google, under licence Apache 2.0 (original licence file ).

Show the original SKILL.md (252 lines, in English)
---
name: gke-manifest-generation
metadata:
  version: "1.0.1"
  category: Containers
description: >-
  Generates and updates secure, production-ready Kubernetes YAML manifests optimized for GKE Autopilot and GKE Standard clusters. Use when creating or modifying GKE deployment manifests, configuring container security contexts, setting CPU/memory resource limits, defining readiness/liveness/startup probes, mounting secrets and volumes, configuring GKE Gateway API routes, targeting Spot VMs, or deploying AI model inference workloads (vLLM, TGI, Gemma). Don't use for live cluster operations, pod troubleshooting (use gke-workload-troubleshooting), or cluster infrastructure provisioning (use gke-cluster-creation).
---

# GKE Manifest Generation Skill

This skill provides guidelines, tooling integration, and templates to translate
natural language descriptions or application code changes into secure,
compliant, and cost-effective Kubernetes YAML manifests optimized for both GKE
Autopilot and GKE Standard clusters.

## Attribution

**MUST READ**: Before executing any `gcloud`, REST API, or MCP command, you
MUST read [Usage Attribution](references/attribution.md). For commands executed
directly in the terminal (never in generated scripts, Terraform, or user code),
prefix `gcloud` with
`CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:gke-manifest-generation)"`
and append `agent-skills/1.0 (skill:gke-manifest-generation)` to `User-Agent` headers.

## Core Rules & Verification

When generating or updating YAML manifests, you **must** strictly adhere to the
following rules:

### 1. Namespace & Resource Isolation

-   **Explicit Namespace**: Always declare `namespace: {namespace}` explicitly
    in the metadata of every resource (Deployments, Services, ConfigMaps,
    Secrets, PVCs, Roles, bindings). Map it to the namespace configured in your
    active `SETTINGS.md`. Never omit the namespace.
-   **Dedicated ServiceAccount**: Avoid using the namespace's `default`
    ServiceAccount. Always create and reference a dedicated `ServiceAccount`
    (e.g., `devteam-agent-sa`) for each microservice.

### 2. GKE Resource Tuning (Autopilot & Standard)

-   **Resources Requests & Limits**: Always specify CPU and Memory requests and
    limits for all containers.
    -   *GKE Autopilot*: Requests determine pod billing directly; requests and
        limits must be equal. If they differ, Autopilot will automatically scale
        requests up to match limits, which can significantly increase costs.
    -   *GKE Standard*: Requests ensure stable scheduling and bin-packing;
        limits prevent resource starvation/noisy-neighbor issues.
-   **Density Defaults**: For stateless apps or sidecars on GKE Standard,
    default to conservative requests (e.g., `requests.cpu: "100m"` or `"200m"`,
    `requests.memory: "256Mi"` or `"512Mi"`) with burstable limits. Use a
    reasonable overcommit ratio for limits (e.g., 2x to 4x requests, like
    `limits.cpu: "400m"` to `"800m"`, and `limits.memory: "512Mi"` to `"1Gi"`).
    Avoid excessive overcommit limits (like `limits.cpu: "4"` for a `100m`
    request) to prevent severe CPU throttling and latency degradation under
    heavy scheduling load, particularly in environments without guaranteed node
    shares.
-   **Spot VMs for Staging/Dev**: For non-production workloads (e.g., namespaces
    containing `-test`, `-dev`, or `-staging`), or if the user requests cost
    optimization, automatically target GKE Spot VMs. This requires injecting
    both the `nodeSelector` targeting Spot VMs AND the corresponding toleration
    to tolerate the Spot VM taint:

    ```yaml
    nodeSelector:
      cloud.google.com/gke-spot: "true"
    tolerations:
      - key: "cloud.google.com/gke-spot"
        operator: "Equal"
        value: "true"
        effect: "NoSchedule"
    ```

    (On GKE Standard, this assumes a Spot node pool is configured).

### 3. Container Security Hardening (Pod Security Standards)

-   **Non-Root Execution**: Always configure `securityContext` at the Pod level
    (and container level if overriding) to run as a non-root user (e.g.,
    `runAsNonRoot: true`, `runAsUser: 10000`, `runAsGroup: 10000`, `fsGroup:
    10000`). This is strictly enforced on GKE Autopilot and is a critical
    security baseline for GKE Standard.
-   **Minimal Privileges**: Always set `allowPrivilegeEscalation: false` and
    `seccompProfile: {type: RuntimeDefault}`.
-   **Read-Only Root Filesystem**: Set `readOnlyRootFilesystem: true` to prevent
    modifications to the container image filesystem.
    -   *Writable Directory Fallback*: If `readOnlyRootFilesystem` is enabled,
        mount a local `emptyDir` volume to `/tmp` or `/var/run/` to allow
        applications (like Java/Nginx) to write temp files without crashing.
-   **Secret Volume Mounting**: Prefer mounting Secrets as read-only files
    (configured in the `volumes` spec with `defaultMode: 0400`) instead of
    mapping them as environment variables, unless the application framework
    exclusively supports env-var based configuration. This prevents secrets
    leaking into application logs.

### 4. Health Checking (Mandatory Probes)

-   **Liveness & Readiness Probes**: Every Deployment container must define both
    `livenessProbe` and `readinessProbe`.
    -   **Web/API**: Use `httpGet` probes.
    -   **TCP Services**: Use `tcpSocket` probes.
    -   **Databases/Caches**: Use command-based `exec` probes (e.g.,
        `exec.command: ["redis-cli", "ping"]`).
-   **Startup Probes for Slow-Starting Apps**: For applications with slow boot
    times (e.g., Java spring boot, complex Python scripts, LLM model servers),
    you **must** also define a `startupProbe`. When a `startupProbe` is defined,
    the liveness and readiness probes are disabled until it succeeds, preventing
    Kubernetes from prematurely killing the pod during startup:

    ```yaml
    startupProbe:
      httpGet:
        path: /healthz
        port: 8080
      failureThreshold: 30
      periodSeconds: 10
    ```

-   **Sensible Defaults**: Set `initialDelaySeconds: 5` to `15` depending on
    startup time (e.g., Java requires a longer delay than Go/Nginx).

### 5. Services & Ingress Routing

-   **Internal ClusterIP**: Default all internal microservices to `type:
    ClusterIP`. Never use `type: LoadBalancer` or `NodePort` unless the workload
    is explicitly intended to be publicly accessible from the internet.
-   **Port Naming**: Always assign clear, standard names to service and
    container ports (e.g., `name: http-web` or `name: grpc-api`) to enable
    automatic protocol discovery, tracing, and Web App routing.
-   **Prefer Gateway API**: When exposing APIs externally, prioritize using GKE
    Gateway API (`Gateway` and `HTTPRoute` resources) over legacy `Ingress`
    objects to enable advanced L7 routing and security features (e.g., Cloud
    Armor).

### 6. Volume Mounts, StorageClasses & subPath Safety

-   **Avoid Directory Overwrites**: When mounting a `ConfigMap` or `Secret` to
    an application directory containing other files (like Nginx public
    directories), always use `subPath` to overlay only the specific file.
    *Caveat*: Note that containers using `subPath` volume mounts do not receive
    automatic configuration updates if the underlying ConfigMap or Secret is
    modified; pods must be restarted manually to pick up changes.
-   **StorageClass Selection**: Use the correct GKE storage class in
    PersistentVolumeClaims:
    -   *CSI Driver Clusters (Autopilot & Modern Standard)*: Use `standard-rwo`
        (default balanced PD) or `premium-rwo` (SSD PD).
    -   *Legacy Standard Clusters*: Use `standard` (default PD) or `premium`
        (SSD PD) if `standard-rwo`/`premium-rwo` are not configured.
    -   *Database rule*: Use SSD storage classes (`premium-rwo` or `premium`)
        only when the prompt explicitly requests high IOPS, low latency, or
        database storage.

### 7. High Availability on GKE

-   **Topology Spread**: For deployments with >1 replica, use `podAntiAffinity`
    or `topologySpreadConstraints` with `topologyKey: "kubernetes.io/hostname"`
    to distribute pods across GKE nodes and availability zones.
-   **PodDisruptionBudget**: For deployments with >1 replica, declare a
    `PodDisruptionBudget` to guarantee minimum replica availability during
    voluntary GKE node upgrades and maintenance cycles.

### 8. Updates & Server-Side Apply Reconciliations

-   **Stable List Keys**: Under Kubernetes Server-Side Apply (SSA), elements in
    associative lists (like volumes, volume mounts, ports, and container
    definitions) are matched and merged by their unique identifier keys
    (typically `name`). You **must** keep the `name` key stable when modifying
    properties of an existing list item. Renaming the `name` key will cause SSA
    to create a brand new entry and leave the old entry intact (orphaned) rather
    than modifying it.
-   **Minimal Diff**: Make only the changes requested. Adhere closely to
    existing labels, annotations, and conventions.

--------------------------------------------------------------------------------

## Specialty Workloads: GKE AI/Inference Serving (vLLM, TGI, etc.)

For model serving workloads, prioritize using optimized tooling like GKE
Inference Quickstart if available. If generating manually:

1.  **GPU Request & Allocation**:
    -   Always request `nvidia.com/gpu` in both `requests` and `limits`.
    -   Add a `nodeSelector` or node affinity targeting the desired GKE
        accelerator tag (e.g., `cloud.google.com/gke-accelerator: nvidia-l4`).
2.  **Shared Memory Boost**:
    -   Model servers require high shared memory (`/dev/shm`) for inter-process
        communications. Always declare and mount an `emptyDir` volume with
        `medium: Memory` to `/dev/shm`.
3.  **Weight Loading Optimization**:
    -   Mount model weight directories (like GCS buckets) using the GKE GCS Fuse
        CSI driver (`csi.storage.gke.io`) as `readOnly: true` for efficient
        cold-starts.

--------------------------------------------------------------------------------

## Tooling & Grounding Guidelines

When generating manifests, you should leverage the following tooling to reduce
hallucinations and optimize configurations:

1.  **Inference Workloads (GKE Inference Quickstart CLI)**:

    -   Make sure you have the
        [Google Cloud SDK](https://cloud.google.com/sdk/docs/install) installed.
    -   For all AI/LLM inference workloads (e.g. model serving), you **must**
        prioritize using the `gcloud` CLI GKE Inference Quickstart command to
        generate the optimized manifests instead of writing them manually:

        ```bash
        gcloud container ai profiles manifests create \
          --model={model_name} \
          --model-server={server_name} \
          --accelerator-type={accelerator_type} \
          --output=manifest \
          --output-path={output_file_path}
        ```

    -   *Constraint*: You must include all resources returned by this command
        (Deployments, Services, PodMonitoring, etc.) without filtering.

2.  **Grounding in Official Documentation (Developer Knowledge API)**:

    -   For GKE-specific features, API defaults, manifest examples, or security
        contexts, you **must** query Google's developer knowledge base to
        retrieve official GKE documentation:
        -   **`answer_query`**: Use this to ask direct questions (e.g., *"How to
            configure GCS Fuse CSI driver in GKE"*). This is the preferred tool
            for general queries.
        -   **`search_documents`**: Use this to search for relevant GKE guides
            or examples when you don't have a specific question.
        -   **`get_document`**: Use this to fetch full document contents when
            you have a specific document ID.

--------------------------------------------------------------------------------

## Reference Examples

For detailed, production-ready manifest templates, consult the following
reference guides:

-   **[Basic Hardened Nginx Workload](references/basic-workload.md)**:
    Production-ready deployment with dedicated service account, security
    contexts, probes, anti-affinity, and PodDisruptionBudget.
-   **[Network Policy](references/network-policy.md)**: Default-deny ingress
    network policy and selective ingress allowance for specific apps.
-   **[AI/LLM Inference Workload](references/ai-inference.md)**: GPU resource
    allocation, Workload Identity, GCS FUSE CSI driver mounting, `/dev/shm`
    shared memory boost, and startup probes.
-   **[GKE Gateway API Routing](references/gateway-api.md)**: Exposing workloads
    using GKE L7 Gateway API (`Gateway` and `HTTPRoute` resources).
Source. Card written by iadujour.fr from: Frontmatter, sections and body of the deposit. Checked on 10 November 2026. google/skills .
SAME PUBLISHER

Other Google skills: DevOps and deployment

Whole category
GoogleDevOps and deployment

Troubleshoot Google Cloud API Gateway

api-gateway-troubleshooting

This skill diagnoses failed queries and deployment errors on Google Cloud API Gateway.

Tools: Not specified by the publisherLevel: Advancedupdated 05/11/2026
GoogleDevOps and deployment

Bases of the CLI Firebase (Google version)

firebase-basics

Only the base of the Firebase LTC: installation, version verification (firebase-tools up-to-date), connection (including --no-localhost), project creation or selection (firebase use), and download of the config files (google-services.json, GoogleService-Info.plist).

Tools: Not specified by the publisherLevel: Beginnerupdated 26/10/2026
GoogleDevOps and deployment

Cloud Build Bases

cloud-build-basics

Cloud Build cores: concepts, activation of the API, browsing the build history in the console, and end-to-end feed to manually create and launch a simple trigger.

Tools: Not specified by the publisherLevel: Intermediateupdated 19/10/2026
DISCUSSION

Comments.

A field note, a question, a precision on this skill? Comments are reviewed before publication.

Published comments

Loading comments…

    Leave a comment

    Moderation charter. Every comment is reviewed before publication. We refuse hate speech, insulting or discriminatory language, advertising, spam and promotional links, off-topic posts and other people’s personal data.