npx skills add ...
npx skills add google/skills --skill gke-cluster-creation
Plans and executes GKE cluster creation, provisioning, and production readiness audits using pre-defined templates (Autopilot, Standard Regional, GPU/AI Inference, AI Hypercompute). Use when creating GKE clusters, provisioning GKE environments, selecting cluster modes, or auditing GKE clusters. Don't use for application onboarding or deployment configuration (use gke-app-onboarding instead).
npx skills add google/skills --skill gke-cluster-creation
This reference guides creating Google Kubernetes Engine (GKE) clusters by providing a set of best-practice templates and guiding through mode selection and customization. The golden path Autopilot configuration is the default for all new clusters.
MCP Tools:
list_clusters,create_cluster,get_cluster,list_operations,get_operation
list_clusters to see existing clusters. Use
gcloud config get-value project if project unknown.project_id, location (region or zone),
cluster_name, environment type. If missing essential details, ask the user
before taking action.gcloud command or create_cluster JSON payload) and confirm with the
user before creation.create_cluster tool or gcloud CLI.get_operation to monitor creation progress.get_cluster with readMask="*" to confirm golden path
settings applied.| Criteria | Autopilot (Golden Path) | Standard |
|---|---|---|
| Node management | Google-managed | Self-managed |
| Pricing | Pay per pod resource | Pay per node (VM) |
| : : request : : | ||
| Node customization | Via ComputeClasses | Full control |
| DaemonSets | Allowed (with | Full control |
| : : restrictions) : : | ||
| GPU/TPU | Supported via | Supported via node pools |
| : : ComputeClasses : : | ||
| Best for | Most production workloads | Kernel tuning, custom OS, |
| : : : privileged workloads : |
Rule: Default to Autopilot unless the customer has a specific requirement that Autopilot cannot satisfy.
When guiding the user or generating configurations, adhere to these GKE best practices:
enablePrivateNodes: true) with a private control plane and restricted public endpoints
(enable-master-authorized-networks) to minimize attack surface.useIpAliases: true /
--enable-ip-alias) to enable alias IP ranges and pod-level firewall rules.workloadPool: <PROJECT_ID>.svc.id.goog) for securely granting GKE workloads access to
Google Cloud services instead of static service account keys.--enable-shielded-nodes, --enable-secure-boot) against rootkits and
bootkits.scoped-rbs-bindings).--enable-autoscaling, --enable-vertical-pod-autoscaling) to
adjust resources based on demand.--spot) for fault-tolerant, non-critical batch
or inference workloads.--region instead
of --zone). Note: Standard regional creates nodes across 3 zones by
default.REGULAR or STABLE)
for automated, safer cluster upgrades.This is the default. All settings match
../gke-golden-path/assets/golden-path-autopilot.yaml.
Via gcloud:
Via MCP (create_cluster):
Relaxes some golden path defaults for cost savings and easier access in non-production.
Via gcloud:
Via MCP (create_cluster):
Warning: This does not apply golden path security hardening. Suitable for dev/test only.
Best when Autopilot cannot be used (e.g., custom kernel tuning, specific node OS requirements). Creates 3 nodes across zones by default.
Via gcloud:
Via MCP (create_cluster):
Best for: AI/ML Inference, small model serving. Can be provisioned via
Autopilot + ComputeClass or via Standard node pool with g2-standard-4
(nvidia-l4). Note: Requires g2-standard-4 quota.
Autopilot ComputeClass / GIQ approach:
Standard Node Pool approach via MCP (create_cluster):
Best for: Large-scale LLM / AI model training and hypercompute inference. Note:
High hourly cost and strict quota requirements (a3-highgpu-8g /
nvidia-h100-80gb-hbm3).
Via gcloud:
Via MCP (create_cluster):
project_id if not in context.region (or location).cluster_name.gcloud command or JSON payload) and
ask for confirmation before calling any creation tool.g2-standard-4, a3-highgpu-8g), TPU, or multi-region/regional
clusters (--region defaults to 3 zones).create_cluster, the cluster.name parameter should be the
short name (e.g., my-cluster), not the full resource path
(projects/<PROJECT_ID>/locations/<REGION>/clusters/<CLUSTER_NAME>). The
parent parameter defines the scope
(projects/<PROJECT_ID>/locations/<REGION>).{
"parent": "projects/<PROJECT_ID>/locations/<REGION>",
"cluster": {
"name": "<CLUSTER_NAME>",
"autopilot": { "enabled": true },
"privateClusterConfig": { "enablePrivateNodes": true },
"masterAuthorizedNetworksConfig": {
"privateEndpointEnforcementEnabled": true
},
"releaseChannel": { "channel": "REGULAR" },
"secretManagerConfig": {
"enabled": true,
"rotationConfig": { "enabled": true, "rotationInterval": "120s" }
},
"rbacBindingConfig": {
"enableInsecureBindingSystemAuthenticated": false,
"enableInsecureBindingSystemUnauthenticated": false
}
}
}gcloud container clusters create-auto <CLUSTER_NAME> \
--region <REGION> \
--project <PROJECT_ID> \
--release-channel rapid \
--quiet{
"parent": "projects/<PROJECT_ID>/locations/<REGION>",
"cluster": {
"name": "<CLUSTER_NAME>",
"autopilot": { "enabled": true },
"releaseChannel": { "channel": "RAPID" }
}
}gcloud container clusters create <CLUSTER_NAME> \
--region <REGION> \
--project <PROJECT_ID> \
--num-nodes 3 \
--machine-type e2-standard-4 \
--disk-type pd-balanced \
--enable-autoscaling --min-nodes 1 --max-nodes 10 \
--enable-shielded-nodes --enable-secure-boot \
--workload-pool=<PROJECT_ID>.svc.id.goog \
--enable-private-nodes \
--enable-master-authorized-networks \
--enable-vertical-pod-autoscaling \
--enable-dataplane-v2 \
--release-channel regular \
--quiet{
"parent": "projects/<PROJECT_ID>/locations/<REGION>",
"cluster": {
"name": "<CLUSTER_NAME>",
"initialNodeCount": 3,
"nodeConfig": {
"machineType": "e2-standard-4",
"diskType": "pd-balanced",
"diskSizeGb": 100,
"oauthScopes": ["https://www.googleapis.com/auth/cloud-platform"],
"shieldedInstanceConfig": {
"enableSecureBoot": true,
"enableIntegrityMonitoring": true
},
"workloadMetadataConfig": {
"mode": "GKE_METADATA"
}
},
"privateClusterConfig": { "enablePrivateNodes": true },
"releaseChannel": { "channel": "REGULAR" },
"workloadIdentityConfig": {
"workloadPool": "<PROJECT_ID>.svc.id.goog"
}
}
}# 1. Create golden path cluster (same as template 1)
gcloud container clusters create-auto <CLUSTER_NAME> \
--region <REGION> --project <PROJECT_ID> \
--enable-private-nodes --enable-master-authorized-networks \
--enable-dns-access --enable-secret-manager --scoped-rbs-bindings \
--quiet
# 2. Apply GPU ComputeClass (see gke-compute-classes.md)
kubectl apply -f gpu-compute-class.yaml
# 3. Or use GIQ for inference (see gke-inference.md)
gcloud container ai profiles manifests create \
--model=gemma-2-9b-it --model-server=vllm --accelerator-type=nvidia-l4 --quiet > inference.yaml
kubectl apply -f inference.yaml{
"parent": "projects/<PROJECT_ID>/locations/<REGION>",
"cluster": {
"name": "<CLUSTER_NAME>",
"initialNodeCount": 1,
"nodeConfig": {
"machineType": "g2-standard-4",
"accelerators": [
{
"acceleratorCount": "1",
"acceleratorType": "nvidia-l4"
}
],
"diskSizeGb": 100,
"oauthScopes": ["https://www.googleapis.com/auth/cloud-platform"]
}
}
}gcloud container clusters create <CLUSTER_NAME> \
--region <REGION> \
--project <PROJECT_ID> \
--num-nodes 1 \
--machine-type a3-highgpu-8g \
--accelerator type=nvidia-h100-80gb-hbm3,count=8 \
--disk-size 200 \
--scopes https://www.googleapis.com/auth/cloud-platform \
--workload-pool=<PROJECT_ID>.svc.id.goog \
--release-channel regular \
--quiet{
"parent": "projects/<PROJECT_ID>/locations/<REGION>",
"cluster": {
"name": "<CLUSTER_NAME>",
"initialNodeCount": 1,
"nodeConfig": {
"machineType": "a3-highgpu-8g",
"accelerators": [
{
"acceleratorCount": "8",
"acceleratorType": "nvidia-h100-80gb-hbm3"
}
],
"diskSizeGb": 200,
"oauthScopes": ["https://www.googleapis.com/auth/cloud-platform"]
}
}
}