Gke Observability
GoogleOfficialPublished by Google
- Skill
- Tool integration
- Cloud and DevOps
- Apache-2.0
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides a comprehensive reference for configuring and diagnosing observability in Google Kubernetes Engine (GKE). It covers the setup of Cloud Logging, Cloud Monitoring, and Managed Service for Prometheus (GMP). It includes guidance on monitoring control-plane components, worker nodes, and pod health, as well as troubleshooting common issues like missing metrics, alert evaluation failures, and API server latency. The skill emphasizes the 'golden path' for configuration while highlighting critical caveats regarding billing, IAM permissions, and the non-default status of control-plane metrics.
What it does
- Configures GKE logging and monitoring components via gcloud commands.
- Provides LQL queries for diagnosing control-plane logs and Kubernetes events.
- Offers PromQL queries for monitoring cluster health, latency, and resource usage.
- Troubleshoots Managed Service for Prometheus (GMP) issues like unhealthy scrape targets.
- Explains how to interpret control-plane health metrics and maintenance windows.
- Guides users on enabling Dataplane V2 flow observability.
When to use it
- When setting up monitoring and logging for a new or existing GKE cluster.
- When diagnosing GKE control-plane issues like API server latency or admission webhook failures.
- When troubleshooting missing metrics or misconfigured PodMonitoring resources.
- When investigating pod eviction, preemption, or scheduling bottlenecks.
- When verifying cluster health during maintenance windows or upgrades.
Advantages
- Provides a standardized 'golden path' for comprehensive GKE observability.
- Includes specific guidance on avoiding common pitfalls like accidental billing or IAM permission errors.
- Offers actionable diagnostic queries for both Cloud Logging and Prometheus metrics.
- Clearly distinguishes between system-level metrics and control-plane specific observability.
- Includes mandatory usage attribution for CLI commands to ensure proper tracking.
Usage examples
- “How do I enable full monitoring and logging for my GKE cluster?”
- The agent provides the gcloud command to update the cluster with the recommended monitoring and logging components, while warning about billing impacts and the need for specific IAM permissions.
- “Why are my Prometheus metrics missing in GKE?”
- The agent guides the user to check PodMonitoring configurations, rule evaluation failures, and monitoring permission errors using the provided troubleshooting reference.
- “How can I check if my GKE control plane is healthy?”
- The agent explains how to use the kubernetes.io/cluster/kcp_healthchecks metric and provides a PromQL query to calculate the success rate of control-plane probes.
- “Show me how to find OOMKilled events in my cluster logs.”
- The agent provides an LQL query for Cloud Logging that filters for resource type k8s_event and the specific reason OOMKilling.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/google/gke-observability/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip gke-observability.zip -d .agents/skills
Documentation by Google
GKE Observability
This reference covers monitoring, logging, and metrics configuration and troubleshooting for Google Kubernetes Engine (GKE). The golden path enables comprehensive observability including control-plane metrics and Managed Service for Prometheus (GMP).
MCP Tools:
get_cluster,list_k8s_events,get_k8s_logs,get_k8s_cluster_info,describe_k8s_resource. CLI-only:gcloud container clusters update --monitoring=...,gcloud logging read
Usage Attribution
Do not run live kubectl, gcloud, or curl commands unless the user names a
target cluster/project or asks to inspect a live cluster (output commands and
queries with placeholders, and skip Usage Attribution).
Before running any live command, read Usage Attribution,
prefix gcloud with CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:gke-observability)",
and append agent-skills/1.0 (skill:gke-observability) to User-Agent headers
(never in generated scripts, Terraform, or user-facing code).
Sub-Skill Reference Routing (Progressive Disclosure)
Complete Reference Index (no
scripts/directory or unlisted reference files exist — do not runlson the skill folder; read only the matching reference below when answering deep diagnostic, metric, log, or GMP questions):
Control-Plane Metrics, Storage, Webhooks & Capacity: Read for GKE control-plane (KCP) VM CPU or RAM/memory usage questions (not publicly exposed) and customer-visible alternatives; cluster etcd / etcd-compatible storage left, quota & per-resource scalability limits; admission webhook latency, system namespace/Lease/upgrade exclusions,
APIServicediscovery bloat, client discovery caching bursts (/apis/custom.metrics.k8s.io,/apis/metrics.k8s.io) & proactive GKE Recommender insights; watch storms; controller-manager workqueue & scheduler lag; or control-plane headroom, VM autoscaling & node-count pre-scaling, network egress, connections (65k, no per-replica metric) & Protobuf.Cloud Logging, Audit Attribution, APF & API Server Traces: Read for
kube-apiserverslow-requestTrace[logs (trace.go& KEP-647);httplog.goclient load (user_agent,verb,apf_iseats); Cloud Audit Log noisy-neighbor, heavyLIST& unindexed CRDfieldSelectorscan tail-latency attribution; API Priority and Fairness (APF)429/504/404throttling;409 Conflicthot objects (ConfigMap->Leaseheartbeats) &RenewDeadline / 2leader-election timeouts;pods/execsaturation, Konnectivity (No agent available), disabled Cloud KMS keys, or in-cluster GCP IAM OAuth token webhook authorizer saturation.Cluster/Node/Pod Health, Maintenance & Managed Prometheus (GMP): Read for control-plane availability (
kubernetes.io/cluster/kcp_healthchecksrate ratio & ruling out KCP outages); maintenance windows (in_maintenance_window), zonal resize downtime & cluster access errors (EOF/masterAuthorizedNetworksConfig); node readiness, registration (AUTO_REPAIR_NODES, Private Google Access) & persistent node-pool labels; pod startup timelines, crashing pod logs,tolerationSeconds: 0mass eviction & Autopilot preemption; or multi-burn-rate SLO alerting (GlobalRules) & GMP / Grafana /PodMonitoringmanifests & troubleshooting.
Golden Path Observability Defaults
| Setting | Golden Path Value | Notes |
|---|---|---|
loggingConfig components | SYSTEM_COMPONENTS, WORKLOADS | Full workload logging |
monitoringConfig components | SYSTEM_COMPONENTS, STORAGE, POD, DEPLOYMENT, STATEFULSET, DAEMONSET, HPA, JOBSET, CADVISOR, KUBELET, DCGM, APISERVER, SCHEDULER, CONTROLLER_MANAGER | Full suite including control-plane |
managedPrometheusConfig.enabled | true | Google-managed Prometheus |
advancedDatapathObservabilityConfig.enableMetrics | true | Dataplane V2 flow metrics |
loggingService | logging.googleapis.com/kubernetes | Cloud Logging |
monitoringService | monitoring.googleapis.com/kubernetes | Cloud Monitoring |
Enabling Full Monitoring & Logging
Include all four caveats whenever providing a --monitoring or --logging
command so users avoid accidental metric loss, surprise billing, or silent IAM
failures:
Control-plane metrics and logs are NOT enabled by default. State this outright:
API_SERVER,SCHEDULER, andCONTROLLER_MANAGERare off on every new cluster (as areDCGM,CADVISOR,KUBELET, and kube-statePOD,DEPLOYMENT,STATEFULSET,DAEMONSET,HPA,STORAGE,JOBSET). OnlySYSTEMis enabled by default. Link to https://docs.cloud.google.com/kubernetes-engine/docs/how-to/control-plane-metrics and https://docs.cloud.google.com/kubernetes-engine/docs/how-to/view-logs#control_plane_logs.The flag replaces, it does not append. Passing
--monitoringor--loggingoverrides the existing component list; pass the full desired list includingSYSTEM.Control-plane and kube-state metrics bill per sample ingested via Managed Service for Prometheus (GMP). Mention the cost impact on large clusters; use
--monitoring=SYSTEMin non-production to reduce cost.Verify APIs and IAM permissions (
PermissionDenied). Checkgcloud container clusters describe {cluster_name} --region {region} --format="yaml(loggingConfig,monitoringConfig)", ensurelogging.googleapis.comandmonitoring.googleapis.comare enabled, and verify the node service account / GKE service agent hasroles/monitoring.metricWriterandroles/container.defaultNodeServiceAgent.
CLI flag vs. API enum spelling (mixing them fails the command):
Component gcloud --monitoring=monitoringConfigAPI enumSystem SYSTEMSYSTEM_COMPONENTSAPI server API_SERVERAPISERVERController mgr CONTROLLER_MANAGERCONTROLLER_MANAGER
# Enable golden path monitoring and control-plane logging suite
gcloud container clusters update {cluster_name} --region {region} \
--monitoring=SYSTEM,API_SERVER,SCHEDULER,CONTROLLER_MANAGER,STORAGE,POD,DEPLOYMENT,STATEFULSET,DAEMONSET,HPA,JOBSET,CADVISOR,KUBELET,DCGM \
--logging=SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER \
--quiet
# Enable Managed Prometheus and Dataplane V2 flow/policy observability
gcloud container clusters update {cluster_name} --region {region} \
--enable-managed-prometheus \
--enable-dataplane-v2-flow-observability \
--quietCore GKE Metrics & Alerting Baseline
Explicitly name Google Cloud Monitoring when proposing dashboards and
alerts, and cover cluster/node CPU and memory capacity, pod restarts
(CrashLoopBackOff), volume space exhaustion, and API server latency
(apiserver_request_duration_seconds). Direct control-plane VM CPU/RAM metrics
are not publicly exposed — read
Control-Plane Metrics, Storage, Webhooks & Capacity
whenever asked about control-plane VM CPU/memory or deep control-plane metrics.
| Metric | Source | Use / Alert Threshold |
|---|---|---|
apiserver_request_duration_seconds | API Server (GMP) | Control-plane latency (Alert: P99 > 5s) |
scheduler_scheduling_attempt_duration_seconds | Scheduler (GMP) | Current GKE scheduling latency (scheduler_schedule_attempts_total{result="error"} > 0) |
container_cpu_usage_seconds_total | cAdvisor (Node) | Worker-node container CPU usage |
container_memory_working_set_bytes | cAdvisor (Node) | Worker-node container memory usage |
kubernetes.io/node/cpu/core_usage_time | Cloud Monitoring | Node CPU usage (kubernetes.io/node/memory/used_bytes for memory) |
kube_pod_status_phase | kube-state-metrics | Pod lifecycle phase (requires deploying GMP or self-managed kube-state-metrics) |
kube_pod_container_status_restarts_total | kube-state-metrics | Pod crash loops (Alert: > 5 in 10m; requires kube-state-metrics) |
kube_node_status_condition | kube-state-metrics | Node readiness (condition="Ready", status!="True"; or kubernetes.io/node/status_condition) |
kubelet_volume_stats_used_bytes / capacity | Kubelet | PVC capacity utilization (Alert: > 85%) |
DCGM_FI_DEV_GPU_UTIL | DCGM (GMP) | GPU utilization (Alert: > 95% sustained) |
Live Resource Usage & Cloud Logging Queries
Use kubectl top for live usage (no MCP or gcloud equivalent):
kubectl top pods --all-namespaces --sort-by=cpu
kubectl top nodes
kubectl top pods --containers -n {namespace}Use gcloud logging read (or Cloud Logging Log Explorer) with LQL filters:
# Control-plane component logs (requires API_SERVER / SCHEDULER / CONTROLLER_MANAGER enabled)
gcloud logging read 'resource.type="k8s_control_plane_component" AND resource.labels.cluster_name="{cluster_name}"' --project {project_id} --limit 50 --quiet
# Container errors: resource.type="k8s_container" AND resource.labels.container_name="{container_name}" AND severity>=ERROR
# OOMKilled events: resource.type="k8s_event" AND jsonPayload.reason="OOMKilling"
# FailedScheduling: resource.type="k8s_event" AND jsonPayload.reason="FailedScheduling"
# Cloud Audit Logs: resource.type="k8s_cluster" AND logName:"cloudaudit.googleapis.com"
# Dataplane V2 network policy / packet drop logs: logName:"policy_action" AND jsonPayload.disposition="DENY"Distributed Tracing, Profiling & Recent Additions
Cloud Trace & OpenTelemetry: Deploy the OpenTelemetry Collector (
googlecloudexporter with Workload Identity) or enable Managed OpenTelemetry for GKE (Preview) on GKE 1.34.1-gke.2178000+ (gcloud beta container clusters update {cluster_name} --region {region} --managed-otel-scope=COLLECTION_AND_INSTRUMENTATION_COMPONENTS).Cloud Profiler: Continuous low-overhead production CPU/memory profiling.
PSI (Pressure Stall Information) metrics: cAdvisor
container_pressure_{cpu,memory,io}_{waiting,stalled}_seconds_totalvia GMPClusterNodeMonitoring(GKE 1.35+).
Supporting Links
Files
- ATTRIBUTION.mdAdded by AutoGineer852 B
- LICENSELicence file added by AutoGineer11.1 KiB
- SKILL.md13.3 KiB
- references/attribution.md1.8 KiB
- references/cluster-node-pod-health-and-gmp.md12.9 KiB
- references/control-plane-metrics-and-storage.md14.2 KiB
- references/logging-audit-and-apiserver-traces.md13.8 KiB
references/control-plane-metrics-and-storage.md
Control-Plane Metrics, Storage, Webhooks & Capacity
Table of Contents
1. Control-Plane Metrics Prerequisites & KCP VM Boundaries (Lines 13–34)
2. Etcd-Compatible Storage Backend & Remaining-Capacity Queries (Lines 36–52)
3. Real-Time Storage Quota Alerts, Per-Resource Footprint & Cleanup (Lines 54–92)
4. Admission Webhooks, Exclusions, Discovery & Recommendations (Lines 94–159)
5. Watch Activity & Watch Storms (Lines 161–167)
6. Pod Churn, Controller-Manager Workqueues & Scheduler Lag (Lines 169–187)
7. Control-Plane Headroom, Network Egress, Connections & Protobuf (Lines 189–224)
1. Control-Plane Metrics Prerequisites & KCP VM Boundaries
Control-plane (KCP) VM CPU and RAM/memory usage are not publicly exposed: GKE manages control-plane VMs internally and exposes no KCP VM CPU or RAM/memory usage metrics in Cloud Monitoring (
kubernetes.io/cluster/*,kubernetes.io/master/*, or worker-node-onlykubernetes.io/node/*/container_*) or Managed Service for Prometheus. Instead of KCP VM CPU, monitorkubernetes.io/cluster/kcp_healthchecks,apiserver_request_duration_seconds, and APF concurrency saturation (apiserver_flowcontrol_priority_level_seat_utilizationandapiserver_current_inflight_requests). Instead of KCP VM RAM/memory, monitorapiserver_resource_size_estimate_bytes,apiserver_storage_size_bytes(kubernetes.io/cluster/storage/used_bytesandkubernetes.io/cluster/storage/limit_bytes), andkubernetes.io/cluster/kcp_healthchecks.
Whenever recommending any apiserver_*, scheduler_*, workqueue_*, or
job_controller_* metric below, state that it is a Managed Service for
Prometheus (GMP) control-plane metric that is not enabled by default
(requires --monitoring=SYSTEM,API_SERVER,SCHEDULER,CONTROLLER_MANAGER,... and
--enable-managed-prometheus; see SKILL.md for CLI vs. API enum spellings)
and link to https://docs.cloud.google.com/kubernetes-engine/docs/how-to/control-plane-metrics.
2. Etcd-Compatible Storage Backend & Remaining-Capacity Queries
In self-managed Kubernetes, operators check remaining etcd space via etcdctl endpoint status or raw etcd metrics (etcd_mvcc_db_total_size_in_bytes,
etcd_server_quota_backend_bytes). GKE uses a managed etcd-compatible
storage backend for cluster state and does not expose etcdctl or raw
etcd_* server metrics—always state explicitly that GKE uses an
etcd-compatible storage backend when answering cluster etcd storage
questions. Instead, query the default Cloud Monitoring SYSTEM metrics
kubernetes.io/cluster/storage/used_bytes and
kubernetes.io/cluster/storage/limit_bytes on monitored_resource="k8s_cluster"
(enabled out-of-the-box without API_SERVER or GMP opt-in):
# Remaining control-plane storage bytes (divide used_bytes / limit_bytes for utilization ratio)
kubernetes_io:cluster_storage_limit_bytes{monitored_resource="k8s_cluster"} - kubernetes_io:cluster_storage_used_bytes{monitored_resource="k8s_cluster"}3. Real-Time Storage Quota Alerts, Per-Resource Footprint & Cleanup
Real-time storage utilization vs. 6h quota delay: In Cloud Monitoring,
kubernetes.io/cluster/storage/used_bytesandkubernetes.io/cluster/storage/limit_bytessample every 60s (avoiding the 6-hour delay of GCP quota metrics; opt-in GMP also exposesapiserver_storage_size_bytes). Configure an alert whenused_bytes / limit_bytesapproaches capacity on GKE's etcd-compatible control-plane datastore so leaked Pods, Jobs, or Secrets are pruned beforeetcdserver: mvcc: database space exceededwrite locks occur.Per-resource byte footprint & GKE scalability limits: Query
apiserver_resource_size_estimate_bytes(orkubernetes.io/master/apiserver/resource_size_estimate_bytes) andapiserver_storage_objectsgrouped bygroupandresourceto find which resource types or CRDs consume the most storage bytes. Compare against GKE scalability limits (https://cloud.google.com/kubernetes-engine/docs/concepts/planning-large-clusters: keep total Pod or ReplicaSet state below ~800 MiB per resource type, keep individual ConfigMaps/Secrets below 1 MiB vs. the 1.5 MiB etcd hard limit, and stay below ~30,000 Secrets/ConfigMaps).Quota exhaustion (
mvcc: database space exceeded) & CRD bloat cleanup: When creations, updates, or Lease renewals fail withetcdserver: mvcc: database space exceeded, delete bloated objects in small paced batches:Version behavior on failing deletes: State explicitly that while some earlier GKE versions blocked all edits (including deletes) on hitting storage quota, this is no longer the case in newer GKE versions (
kubectl deleteremains permitted).Finished
batch/v1Jobs and CronJob pods (concurrencyPolicy: Allow): set.spec.ttlSecondsAfterFinishedon Jobs andsuccessfulJobsHistoryLimit/failedJobsHistoryLimiton CronJobs; retained ReplicaSets (lower.spec.revisionHistoryLimit), Kyvernoadmissionreports, oversized Secrets/ConfigMaps, or stuck finalizers.
Excessive
VolumeSnapshotobjects hangingLIST(<50,000 limit): When newVolumeSnapshotobjects take 30+ minutes to become ready or deleted snapshots stay stuck inTerminating, checkapiserver_storage_objectsandapiserver_resource_size_estimate_bytes(pluskube-apiserverslowLISTTrace[logs) forvolumesnapshotsandvolumesnapshotcontentscausingsnapshot-controllerLISTtimeouts; prune old snapshots and enforce a retention policy keeping the total count well below 50,000.
4. Admission Webhooks, Exclusions, Discovery & Recommendations
Measuring webhook latency & errors: When API calls or pod creations time out (
context deadline exceeded), queryapiserver_admission_webhook_admission_duration_seconds(grouped byname,type,operation, andrejected) andapiserver_admission_webhook_rejection_countalongsidekube-apiserverslow-requestTrace[logs, GKE Webhook Insights (Verify webhook with unavailable endpoints), andkubernetes.io/cluster/kcp_healthchecks(to verify the GKE control plane itself is healthy before requesting an upsize). Scale/fix backing webhook pods, tightentimeoutSeconds(e.g., 2–5s), scopenamespaceSelector, or setfailurePolicy: Ignorewhere appropriate.System namespace & Lease exclusions (preventing controller leadership loss & CNI
NotReadynodes): InspectValidatingWebhookConfigurationandMutatingWebhookConfigurationrules. Excludekube-systemandkube-node-leasevianamespaceSelectoron third-party webhooks (Kyverno, Datadog, Vault, OpenTelemetry, or OPA Gatekeeper'sadmission.gatekeeper.sh/ignorelabel) and removecoordination.k8s.ioleases(coordination.k8s.io/leases) from webhook rules so slow/crashed webhooks never block controller Lease renewals orkube-systemCNI pods (netd,anetd, leaving new nodes stuckNotReadywithCNI plugin not initialized).Control-plane upgrade failures & addon deadlocks: When upgrades fail and roll back or Cluster Autoscaler stops initializing after an upgrade with
failurePolicy: Failwebhooks, check Cloud Audit Logs or webhook metrics/logs during the upgrade window for denied/timed-out requests fromsystem:apiserver(onrbac.authorization.k8s.io/clusterrolebindings) orsystem:addon-manager(on systemcustomresourcedefinitionssuch ascapacitybuffers.autoscaling.x-k8s.io). Exemptrbac.authorization.k8s.iobootstrap bindings and GKE system CRDs (*.gke.io,autoscaling.x-k8s.io) from webhook rules or setfailurePolicy: Ignore.Unavailable webhook endpoints, OOMKilled pods,
APIService& discovery:Inspect
MutatingWebhookConfiguration/ValidatingWebhookConfigurationservice references, verifyEndpointSliceaddresses match running pod IPs, inspect CRD conversion webhooks (spec.conversion.webhook), and check backing pod health and OOM kills (jsonPayload.reason="OOMKilling",kubectl describe pod {pod_name},kubectl logs {pod_name} --previous). Increase memory limits on OOMKilled webhook pods (e.g., Gatekeeper or Kubeflowcache-server), fix the deployment, or scope rules/failurePolicy.When every
kubectlcommand takes 15–30s, runkubectl get apiservicesandkubectl --v=6alongsideapiserver_response_sizesandapiserver_request_duration_secondsto spot unavailableAPIServicebackends or multi-megabyte discovery documents from aggregated APIs (custom.metrics.k8s.io,external.metrics.k8s.io). Disable or filter unbounded custom metrics exporters (e.g., Airflow or Prometheus adapters exporting thousands of series into API discovery).When custom scripts, cron jobs, or CLI invocations flood
/apis/custom.metrics.k8s.ioand/apis/metrics.k8s.iowith thousands of requests per minute (visible in Cloud Audit Logs /httplog.gouserAgentandapiserver_request_total), clients are polling API discovery without a persistent local cache; enable client-side discovery caching (client-godisk.NewCachedDiscoveryClientForConfig/memory.NewMemCacheClientor a persistent sharedkubectl --cache-dirrather than ephemeral per-run directories).
Proactive GKE Control-Plane & Webhook Insights / Recommendations: Check GKE Insights and Recommendations in the Cloud Console or via
gcloud recommender insights listandgcloud recommender recommendations list(--insight-type=google.container.DiagnosisInsight/--recommender=google.container.DiagnosisRecommender). Warn users against ignoring GKE control-plane recommendations—especially admission webhook findings (unavailable endpoints, high latency, missingkube-systemexclusions) or CRDs with an invalidcaBundle—because they can overload or destabilize the control plane. Link to https://docs.cloud.google.com/kubernetes-engine/docs/how-to/optimize-webhooks and https://docs.cloud.google.com/kubernetes-engine/docs/how-to/crd-with-invalid-caBundle.
5. Watch Activity & Watch Storms
When a misconfigured agent or DaemonSet is suspected of causing a watch storm or
repeatedly re-establishing broken watches, query GMP apiserver_longrunning_requests
(verb="WATCH", grouped by group, resource, scope) for active watchers,
apiserver_watch_events_total (grouped by group, kind, version) for watch
event volume/rate, and apiserver_watch_events_sizes for watch payload sizes.
6. Pod Churn, Controller-Manager Workqueues & Scheduler Lag
When batch job bursts (tens of thousands of concurrent Jobs) delay pod
creation/scheduling by 10–20 minutes—saturating kube-controller-manager and
kube-scheduler QPS/workqueues, often exacerbated by crashing DaemonSets—or
when custom controllers fall behind:
Enable
SCHEDULERandCONTROLLER_MANAGERcontrol-plane metrics.Query
workqueue_depth,workqueue_queue_duration_seconds,workqueue_adds_total,workqueue_retries_total, andjob_controller_*metrics (such asjob_controller_job_sync_duration_seconds) onkube-controller-manager.Query
scheduler_pending_pods,scheduler_schedule_attempts_total, andscheduler_scheduling_attempt_duration_secondsonkube-scheduler, plus mutatingapiserver_request_total(CREATE,DELETE,PATCH,UPDATE) to measure object churn.Correlate workqueue growth (e.g.,
pod-garbage-collectororreplicasetlag) with API server latency and high churn; prune orphaned objects, tune controller concurrency, and pace or batch job submissions.
7. Control-Plane Headroom, Network Egress, Connections & Protobuf
Saturation, headroom & control-plane VM autoscaling: Monitor
apiserver_flowcontrol_priority_level_seat_utilization,apiserver_current_inflight_requests, andapiserver_request_duration_seconds(plusapiserver_flowcontrol_request_wait_duration_secondsandapiserver_flowcontrol_rejected_requests_total). Always cover three operational guidance points when discussing control-plane headroom or preventing overload:Correlate spikes with workload changes (new DaemonSets, unpaginated
LISTcalls, bursty controllers) to roll back or tune workloads before saturatingkube-apiserver.Automatic control-plane VM scaling: Highlight that GKE control-plane VMs are autoscaled to match observed load, so control-plane capacity adjusts dynamically as cluster activity grows.
Proactive resize via node count: Explain that the GKE control plane uses cluster node count as one of its autoscaling signals, so adding more nodes upfront (for example, ahead of a planned batch or traffic surge) is a relatively simple way to force a proactive control-plane resize—while noting that the exact scaling rules change frequently, so there is no reliable fixed threshold that GKE can share.
Control-plane network egress, connections (
65k), & Protobuf: State explicitly out loud that GKE does not offer a per-replica control-plane connection count metric (so active watch/long-running stream metrics serve only as an indirect proxy). Check for heavy response/watch payload egress, connection limits (65k), or high JSON serialization overhead viaapiserver_response_sizes,apiserver_watch_events_sizes,apiserver_longrunning_requests, andapiserver_request_totalbycontentType(application/jsonvs.application/vnd.kubernetes.protobuf). Always advise both mitigations: (1) configure custom controllers and high-volume clients to use Protobuf serialization (application/vnd.kubernetes.protobuf) instead of JSON, and (2) scopeWATCH/LISTselectors (labelSelector,fieldSelector, and namespace-scoped informers) to reduce control-plane network egress and keep active connections within safe scalability limits.
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs a command-line tool, Needs Node.js
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- Publisher
- Google (Official)
- Source
- google/skills · skills/cloud/gke-observability · commit 2194d3b
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Google.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download gke-observability.zip