{"id":"ddab7fb0-f923-4e65-beef-3e1ca96d293f","shortId":"NpdwZL","kind":"skill","title":"dt-obs-kubernetes","tagline":">-","description":"# Infrastructure Kubernetes\n\nMonitor and analyze Kubernetes infrastructure using Dynatrace DQL. Query\ncluster resources, monitor workload health, analyze pod placement, optimize\ncosts, and assess security posture.\n\n## When to Use This Skill\n\n- Monitoring Kubernetes cluster health and capacity\n- Analyzing pod and container resource utilization\n- Investigating pod failures, OOMKills, evictions, or crash loops\n- Debugging degraded deployments, stuck rollouts, or node pressure\n- Optimizing Kubernetes resource costs\n- Assessing security posture and compliance\n- Troubleshooting workload scheduling and placement\n- Auditing ingress routing and network policies\n## Knowledge Base Structure\n\n### Core Monitoring (Start Here)\n\n1. **Cluster Inventory** → `references/cluster-inventory.md` - Clusters,\n   namespaces, resource distribution\n2. **Node Monitoring** - Node capacity, CPU/memory usage, pod density\n3. **Pod Monitoring** - Pod CPU, memory, lifecycle events\n4. **Workload Monitoring** - Deployment, StatefulSet, DaemonSet resources\n\n### Advanced Topics\n\n1. **Configuration Analysis** → `references/labels-annotations.md` - Parse\n   k8s.object, labels, annotations\n2. **Scheduling & Placement** → `references/pod-node-placement.md` - Node\n   selectors, affinity, taints, HA\n3. **Cost Optimization** - Right-sizing, waste detection, efficiency scoring\n4. **Security & Compliance** - Privileged containers, security contexts\n\n## Key Concepts\n\n### Entity Types\n\n**Workloads:** `K8S_DEPLOYMENT`, `K8S_STATEFULSET`, `K8S_DAEMONSET`,\n`K8S_JOB`, `K8S_CRONJOB`, `K8S_HORIZONTALPODAUTOSCALER`  \n**Infrastructure:** `K8S_CLUSTER`, `K8S_NAMESPACE`, `K8S_NODE`, `K8S_POD`  \n**Configuration:** `K8S_SERVICE`, `K8S_CONFIGMAP`, `K8S_SECRET`,\n`K8S_PERSISTENTVOLUMECLAIM`, `K8S_PERSISTENTVOLUME`, `K8S_INGRESS`,\n`K8S_NETWORKPOLICY`\n\n### Query Types\n\n**smartscapeNodes** - Query K8s entities:\n\n```dql\nsmartscapeNodes K8S_POD\n| filter k8s.namespace.name == \"production\"\n| fields k8s.cluster.name, k8s.pod.name\n```\n\n**timeseries** - Monitor metrics over time:\n\n```dql\ntimeseries cpu = sum(dt.kubernetes.container.cpu_usage),\n  by: {k8s.pod.name, k8s.namespace.name}\n| fieldsAdd avg_cpu = arrayAvg(cpu)\n```\n\n**fetch logs** - Analyze log events:\n\n```dql\nfetch logs\n| filter k8s.namespace.name == \"production\" and loglevel == \"ERROR\"\n```\n\n### Core Fields\n\n- `k8s.cluster.name`, `k8s.namespace.name`, `k8s.pod.name`, `k8s.node.name`\n- `k8s.workload.name`, `k8s.workload.kind`, `k8s.container.name`\n- `k8s.object` - Full JSON configuration for deep inspection\n- `tags[label]` - Access labels and annotations\n\n### Available Metrics\n\n**CPU:** `dt.kubernetes.container.cpu_usage`, `cpu_throttled`, `limits_cpu`,\n`requests_cpu`  \n**Memory:** `dt.kubernetes.container.memory_working_set`, `limits_memory`,\n`requests_memory`  \n**Operations:** `dt.kubernetes.container.restarts`, `oom_kills`  \n**Node:** `dt.kubernetes.node.pods_allocatable`, `cpu_allocatable`,\n`memory_allocatable`, `dt.kubernetes.pods`\n\n### Entity Disambiguation\n\n`K8S_POD` vs `CONTAINER`: these are different entity types in Dynatrace.\n\n- **`K8S_POD`** — K8s-native entities with `k8s.object` JSON, scheduling state, conditions, and K8s metrics. Use this skill.\n- **`CONTAINER`** — Host-level container inventory (image, lifetime, host assignment). Use `dt-obs-hosts` skill instead.\n\nThe smartscape edge is `CONTAINER --(is_part_of)--> K8S_POD`. To reach containers from a pod, traverse backward:\n\n```dql-template\nsmartscapeNodes K8S_POD\n| filter k8s.namespace.name == \"<namespace>\"\n| traverse edgeTypes: {is_part_of}, targetTypes: {CONTAINER}, direction: backward, fieldsKeep: {id}\n| fields k8s.cluster.name, k8s.namespace.name, k8s.pod.name, container.id=id\n```\n\n### Service → K8S_POD Correlation\n\nNo direct smartscape edge exists between `SERVICE` and `K8S_POD`. The correlation key is the shared dimension `k8s.workload.name`. See [Service → Pod Drill-Down](references/pod-debugging.md#service--pod-drill-down) in `references/pod-debugging.md` for the full two-step pattern.\n\n## Common Workflows\n\n### 1. Cluster Health Check\n\nList all clusters:\n\n```dql\nsmartscapeNodes K8S_CLUSTER\n| fields k8s.cluster.name, k8s.cluster.version, k8s.cluster.distribution\n```\n\nCheck node capacity:\n\n```dql\ntimeseries {\n  current_pods = avg(dt.kubernetes.pods),\n  max_pods = avg(dt.kubernetes.node.pods_allocatable)\n}, by: {k8s.node.name, k8s.cluster.name}\n| fieldsAdd pod_capacity_pct = (arrayAvg(current_pods) / arrayAvg(max_pods)) * 100\n| filter pod_capacity_pct > 80\n```\n\nIdentify pods in non-Running state:\n\n```dql\nsmartscapeNodes K8S_POD\n| parse k8s.object, \"JSON:config\"\n| fieldsAdd phase = config[status][phase]\n| filter phase != \"Running\"\n| fields k8s.cluster.name, k8s.namespace.name, k8s.pod.name, phase\n```\n\n### 2. Resource Optimization\n\nFind over-provisioned pods (usage < 30%):\n\n```dql\ntimeseries {\n  cpu_usage = sum(dt.kubernetes.container.cpu_usage),\n  cpu_requests = avg(dt.kubernetes.container.requests_cpu)\n}, by: {k8s.pod.name, k8s.namespace.name, k8s.cluster.name}\n| fieldsAdd usage_pct = (arrayAvg(cpu_usage) / arrayAvg(cpu_requests)) * 100\n| filter usage_pct < 30 and arrayAvg(cpu_requests) > 0\n```\n\nIdentify containers without limits:\n\n```dql\nsmartscapeNodes K8S_POD\n| parse k8s.object, \"JSON:config\"\n| expand container = config[spec][containers]\n| fieldsAdd\n    container_name = container[name],\n    cpu_limit = container[resources][limits][cpu],\n    memory_limit = container[resources][limits][memory]\n| filter isNull(cpu_limit) or isNull(memory_limit)\n```\n\n### 3. Troubleshooting Pod Issues\n\nPod troubleshooting benefits from combining **metrics** (timeseries) with\n**Kubernetes events** (event stream) for a complete picture.\n\n#### Metrics-Based Troubleshooting\n\nFind pods with OOMKills:\n\n```dql\ntimeseries oom_kills = sum(dt.kubernetes.container.oom_kills),\n  by: {k8s.pod.name, k8s.namespace.name, k8s.cluster.name}\n| filter arraySum(oom_kills) > 0\n| fieldsAdd total_oom_kills = arraySum(oom_kills)\n| sort total_oom_kills desc\n```\n\nAnalyze pod restart patterns:\n\n```dql\ntimeseries restarts = sum(dt.kubernetes.container.restarts),\n  by: {k8s.pod.name, k8s.namespace.name, k8s.cluster.name}\n| fieldsAdd total_restarts = arraySum(restarts)\n| filter total_restarts > 5\n```\n\n#### Event-Based Troubleshooting\n\nFor operational events (pod restarts, OOM kills, evictions, scheduling failures),\nKubernetes events provide richer context than metrics alone — including event\nreasons, messages, and timestamps.\n\n**When to use Kubernetes events over metrics:**\n- User asks about recent operational events (\"show me pod restart events\")\n- User wants event details like reasons and messages\n- User asks about events in a specific time window (\"last 48 hours\")\n- User wants to correlate events with root causes\n\n**Kubernetes events** are available through the `get-events-for-kubernetes-cluster`\ntool. **Prefer this tool** when the user asks about OOM events, pod restarts,\nevictions, or cluster-wide event history.\n\n**Important: distinguish event types when filtering results.** Kubernetes events\ncover many categories. When the user asks about a specific event type, filter\nthe results accordingly — do not report unrelated events:\n\n| User Asks About | Relevant Event Reasons | NOT Related |\n|-----------------|----------------------|-------------|\n| Pod restarts | `BackOff`, `CrashLoopBackOff`, `Killing` | Readiness probe failures, CPU throttling |\n| OOM events | `OOMKilling`, `OOMKilled` | Memory pressure warnings |\n| Evictions | `Evicted`, `Preempting` | Node pressure |\n| Scheduling failures | `FailedScheduling`, `Unschedulable` | Resource quotas |\n\n**For a complete answer**, combine both approaches:\n1. Use the **events tool** to get the event details (what happened, when, why)\n2. Use **timeseries metrics** to show the quantitative impact (how many restarts,\n   OOM kill counts over time)\n\n#### Fetch Kubernetes Events via DQL\n\nPod restart and operational events can also be queried via DQL from the events\ntable:\n\n```dql\nfetch events\n| filter event.kind == \"K8S_EVENT\"\n| filter event.type == \"Warning\"\n| fields timestamp, k8s.cluster.name, k8s.namespace.name, k8s.pod.name,\n    event.reason, event.message\n| sort timestamp desc\n| limit 50\n```\n\nFilter for specific event reasons:\n\n```dql\nfetch events\n| filter event.kind == \"K8S_EVENT\"\n| filter in(event.reason, {\"OOMKilling\", \"BackOff\", \"Evicted\", \"FailedScheduling\"})\n| fields timestamp, k8s.cluster.name, k8s.namespace.name, k8s.pod.name,\n    event.reason, event.message\n| sort timestamp desc\n```\n\n**Field names in `fetch events`:** Use `event.reason` and `event.message` — not\n`dt.kubernetes.event.reason`. The `dt.kubernetes.*` prefix is for timeseries metrics,\nnot the events table. Queries using the wrong prefix return zero results.\n\n### 4. Security Assessment\n\nIdentify privileged containers:\n\n```dql\nsmartscapeNodes K8S_POD\n| parse k8s.object, \"JSON:config\"\n| expand container = config[spec][containers]\n| fieldsAdd\n    container_name = container[name],\n    privileged = container[securityContext][privileged]\n| filter privileged == true\n```\n\nFind containers running as root:\n\n```dql\nsmartscapeNodes K8S_POD\n| parse k8s.object, \"JSON:config\"\n| expand container = config[spec][containers]\n| fieldsAdd\n    container_name = container[name],\n    run_as_user = container[securityContext][runAsUser],\n    run_as_non_root = container[securityContext][runAsNonRoot]\n| filter (isNull(run_as_user) or run_as_user == 0) and run_as_non_root != true\n```\n\n### 5. Scheduling Analysis\n\nVerify pod distribution (HA compliance):\n\n```dql\nsmartscapeNodes K8S_POD\n| filter k8s.workload.kind == \"deployment\"\n| summarize pod_count = count(),\n            node_count = countDistinct(k8s.node.name),\n            by: {k8s.cluster.name, k8s.namespace.name, k8s.workload.name}\n| fieldsAdd ha_compliant = node_count > 1\n| filter pod_count >= 2 and not ha_compliant\n```\n\n### 6. DAVIS Problems affecting K8s Entities\n\nFind active DAVIS problems affecting K8s entities:\n\n```dql\nfetch dt.davis.problems, from:now() - 2h\n| filter not(dt.davis.is_duplicate) and event.status == \"ACTIVE\"\n| filter matchesPhrase(smartscape.affected_entity.types, \"K8S_\")\n| fields display_id, event.name, event.category, smartscape.affected_entity.ids\n```\n\nUse entries `smartscape.affected_entity.ids` (array of Smartscape IDs) to look up the affected entity using its Smartscape ID.\n\n## Best Practices\n\n### Choosing the Right Data Source\n\n| User Question | Best Approach | Why |\n|---------------|---------------|-----|\n| \"Show me OOM events\" | Events tool + metrics | Events give reasons/messages; metrics show trends |\n| \"Show me pod restart events\" | Events tool + timeseries metrics | Events reveal the reason (BackOff, Killing, CrashLoopBackOff); `dt.kubernetes.container.restarts` metric gives the actual restart counts |\n| \"How many pod restarts?\" | Timeseries metrics | Quantitative data over time |\n| \"What happened to my pods in the last 48h?\" | Events tool | Operational event history with context |\n| \"Which pods are using the most CPU?\" | Timeseries metrics | Resource utilization analysis |\n| \"List all clusters/namespaces\" | smartscapeNodes | Entity discovery and inventory |\n| \"Are there scheduling failures?\" | Events tool | Event reasons explain why |\n\n### Query Performance\n\n1. **Filter early** - Apply cluster/namespace filters immediately\n2. **Use specific entity types** - Avoid wildcards\n3. **Limit result sets** - Use `limit` for exploration\n4. **Cache cluster lists** - Store in variables\n\n### Monitoring Recommendations\n\n1. Set resource limits on all containers\n2. Monitor OOMKills and adjust memory limits\n3. Track CPU throttling and adjust CPU limits\n4. Review resource efficiency regularly (target 70-80%)\n5. Implement security best practices (non-root, read-only filesystem)\n6. Use specific image tags (avoid :latest)\n\n### Configuration Standards\n\n1. Use labels for organization (app, environment, team)\n2. Set resource requests and limits\n3. Configure health checks (liveness/readiness probes)\n4. Use TLS for all ingress resources\n5. Document with annotations\n\n## Troubleshooting\n\n| Problem | Cause | Solution |\n|---------|-------|----------|\n| No pod data returned | Wrong entity type or missing cluster filter | Use `K8S_POD` (not `POD`); add `k8s.cluster.name` filter |\n| `k8s.object` parsing errors | Complex JSON structure | Use `parse k8s.object, \"JSON:config\"` then access nested fields |\n| Pod network metrics unavailable | Not available in Grail | Use service mesh metrics or host-level network metrics |\n| Large result sets | No time range or cluster filter | Add time range and filter by cluster/namespace early |\n| Missing labels in output | Labels accessed incorrectly | Use `tags[label_name]` to access labels |\n\n## Limitations\n\n**Unavailable Metrics:**\n\n- Pod network metrics (rx_bytes, tx_bytes) are NOT available in Grail\n- Workaround: Use service mesh metrics or host-level network metrics\n\n**Query Considerations:**\n\n- Minimize result set size: Do not include the `k8s.object` field if not necessary\n- Keep result set as simple as possible: Parsing k8s.object increases query complexity\n- Large clusters may require pagination or time-range limits\n- Some K8s status fields update asynchronously\n\n## When to Load References\n\n### Load cluster-inventory.md when:\n- Performing cluster, namespace, or resource distribution analysis\n- Auditing workload counts across clusters\n\n→ [references/cluster-inventory.md](references/cluster-inventory.md)\n\n### Load labels-annotations.md when:\n- Filtering by labels or annotations\n- Parsing `k8s.object` for detailed configuration inspection\n\n→ [references/labels-annotations.md](references/labels-annotations.md)\n\n### Load pod-node-placement.md when:\n- Analyzing scheduling constraints (affinity, taints, tolerations)\n- Verifying HA compliance and pod distribution\n\n→ [references/pod-node-placement.md](references/pod-node-placement.md)\n\n### Load pod-debugging.md when:\n- Investigating pod exit codes, crash loops, or init container failures\n- Diagnosing image pull errors or service-to-pod connectivity issues\n- Drilling down from a service problem to pod-level details\n\n→ [references/pod-debugging.md](references/pod-debugging.md)\n\n### Load workload-health.md when:\n- Investigating degraded deployments or stuck rollouts\n- Checking node conditions, CPU throttling, or HPA scaling\n- Analyzing StatefulSet ordering or DaemonSet coverage\n\n→ [references/workload-health.md](references/workload-health.md)\n\n### Load pv-pvc.md when:\n- Working with persistent storage (PVC/PV lifecycle, orphaned volumes)\n- Checking StorageClass configurations\n\n→ [references/pv-pvc.md](references/pv-pvc.md)\n\n### Load ingress.md when:\n- Analyzing ingress routing rules or TLS certificates\n- Auditing ingress controller configurations\n\n→ [references/ingress.md](references/ingress.md)\n\n### Load network-policies.md when:\n- Listing or auditing network policies\n- Checking namespace isolation configurations\n\n→ [references/network-policies.md](references/network-policies.md)\n\n## References\n\n- [cluster-inventory.md](references/cluster-inventory.md) — Cluster, namespace, and resource distribution analysis\n- [labels-annotations.md](references/labels-annotations.md) — Label/annotation filtering and k8s.object parsing\n- [pod-node-placement.md](references/pod-node-placement.md) — Scheduling, affinity, taints, and HA patterns\n- [pod-debugging.md](references/pod-debugging.md) — Exit codes, pod conditions, init containers, image pull errors, logs, service-to-pod drill-down\n- [workload-health.md](references/workload-health.md) — Degraded deployments, stuck rollouts, node conditions, CPU throttling, HPA, StatefulSet ordering\n- [pv-pvc.md](references/pv-pvc.md) — PVC/PV lifecycle, phase reference, orphaned volumes, StorageClass\n- [ingress.md](references/ingress.md) — Routing rule parsing, TLS audit\n- [network-policies.md](references/network-policies.md) — Policy listing, namespace isolation audit\n\n## Related Skills\n\n- **dt-obs-problems** — For problems associated with Kubernetes clusters (use `dt.smartscape_source.id` with K8S_ prefix filters)\n- **dt-dql-essentials** — Core DQL syntax and query structure\n- **dt-obs-hosts** — Host-level metrics for K8s nodes","tags":["obs","kubernetes","dynatrace","for","agent-skills","ai-agents","claude-code","devops","dql","mcp","observability"],"capabilities":["skill","source-dynatrace","skill-dt-obs-kubernetes","topic-agent-skills","topic-ai-agents","topic-claude-code","topic-devops","topic-dql","topic-dynatrace","topic-mcp","topic-observability"],"categories":["dynatrace-for-ai"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/Dynatrace/dynatrace-for-ai/dt-obs-kubernetes","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add Dynatrace/dynatrace-for-ai","source_repo":"https://github.com/Dynatrace/dynatrace-for-ai","install_from":"skills.sh"}},"qualityScore":"0.489","qualityRationale":"deterministic score 0.49 from registry signals: · indexed on github topic:agent-skills · 78 github stars · SKILL.md body (16,190 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:56:48.227Z","embedding":null,"createdAt":"2026-05-11T18:57:14.287Z","updatedAt":"2026-05-18T18:56:48.227Z","lastSeenAt":"2026-05-18T18:56:48.227Z","tsv":"'-80':1332 '0':557,643,1065 '1':90,124,437,857,1104,1272,1303,1354 '100':479,548 '2':98,132,513,871,1108,1279,1310,1362 '2h':1131 '3':107,141,600,1286,1317,1368 '30':522,552 '4':115,151,989,1294,1325,1374 '48':742 '48h':1232 '5':677,1072,1333,1381 '50':929 '6':1113,1345 '70':1331 '80':484 'access':266,1420,1463,1470 'accord':808 'across':1558 'activ':1120,1138 'actual':1211 'add':1405,1450 'adjust':1314,1322 'advanc':122 'affect':1116,1123,1160 'affin':138,1584,1722 'allocat':295,297,299,465 'alon':699 'also':899 'analysi':126,1074,1251,1554,1711 'analyz':9,21,41,236,656,1581,1649,1676 'annot':131,269,1384,1569 'answer':853 'app':1359 'appli':1275 'approach':856,1176 'array':1152 'arrayavg':232,473,476,542,545,554 'arraysum':640,648,672 'ask':714,733,771,799,815 'assess':27,67,991 'assign':341 'associ':1790 'asynchron':1540 'audit':77,1555,1683,1694,1774,1781 'avail':270,755,1428,1484 'avg':230,459,463,532 'avoid':1284,1350 'backoff':824,946,1204 'backward':366,383 'base':84,622,680 'benefit':606 'best':1166,1175,1336 'byte':1479,1481 'cach':1295 'capac':40,102,454,471,482 'categori':795 'caus':751,1387 'certif':1682 'check':440,452,1371,1641,1668,1697 'choos':1168 'cluster':16,37,91,94,177,438,443,447,763,780,1296,1398,1448,1526,1549,1559,1706,1793 'cluster-inventory.md':1546,1704 'cluster-wid':779 'cluster/namespace':1276,1456 'clusters/namespaces':1254 'code':1601,1730 'combin':608,854 'common':435 'complet':618,852 'complex':1411,1524 'complianc':71,153,1079,1589 'compliant':1101,1112 'concept':159 'condit':325,1643,1732,1753 'config':499,502,569,572,1002,1005,1032,1035,1418 'configmap':188 'configur':125,184,260,1352,1369,1574,1670,1686,1700 'connect':1617 'consider':1499 'constraint':1583 'contain':44,155,306,332,336,353,361,381,559,571,574,576,578,582,588,994,1004,1007,1009,1011,1014,1021,1034,1037,1039,1041,1046,1053,1309,1606,1734 'container.id':390 'context':157,696,1239 'control':1685 'core':86,248,1804 'correl':395,407,747 'cost':25,66,142 'count':885,1089,1090,1092,1103,1107,1213,1557 'countdistinct':1093 'cover':793 'coverag':1654 'cpu':111,222,231,233,272,275,278,280,296,525,530,534,543,546,555,580,585,594,830,1246,1319,1323,1644,1754 'cpu/memory':103 'crash':53,1602 'crashloopbackoff':825,1206 'cronjob':172 'current':457,474 'daemonset':120,168,1653 'data':1171,1221,1391 'davi':1114,1121 'debug':55 'deep':262 'degrad':56,1636,1748 'densiti':106 'deploy':57,118,164,1086,1637,1749 'desc':655,927,958 'detail':727,866,1573,1629 'detect':148 'diagnos':1608 'differ':309 'dimens':412 'direct':382,397 'disambigu':302 'discoveri':1257 'display':1144 'distinguish':785 'distribut':97,1077,1553,1592,1710 'document':1382 'dql':14,205,220,239,368,444,455,492,523,562,628,660,892,903,908,935,995,1025,1080,1126,1802,1805 'dql-templat':367 'drill':418,424,1619,1744 'drill-down':417,1743 'dt':2,344,1785,1801,1811 'dt-dql-essenti':1800 'dt-obs-host':343,1810 'dt-obs-kubernet':1 'dt-obs-problem':1784 'dt.davis.is':1134 'dt.davis.problems':1128 'dt.kubernetes':971 'dt.kubernetes.container.cpu':224,273,528 'dt.kubernetes.container.memory':282 'dt.kubernetes.container.oom':633 'dt.kubernetes.container.requests':533 'dt.kubernetes.container.restarts':290,664,1207 'dt.kubernetes.event.reason':969 'dt.kubernetes.node.pods':294,464 'dt.kubernetes.pods':300,460 'dt.smartscape_source.id':1795 'duplic':1135 'dynatrac':13,313 'earli':1274,1457 'edg':351,399 'edgetyp':376 'effici':149,1328 'entiti':160,204,301,310,319,1118,1125,1161,1256,1282,1394 'entri':1150 'environ':1360 'error':247,1410,1611,1737 'essenti':1803 'event':114,238,613,614,679,684,693,701,710,718,723,726,735,748,753,760,774,782,786,792,803,813,818,833,860,865,890,897,906,910,914,933,937,941,963,979,1181,1182,1185,1195,1196,1200,1233,1236,1264,1266 'event-bas':678 'event.category':1147 'event.kind':912,939 'event.message':924,955,967 'event.name':1146 'event.reason':923,944,954,965 'event.status':1137 'event.type':916 'evict':51,689,777,839,840,947 'exist':400 'exit':1600,1729 'expand':570,1003,1033 'explain':1268 'explor':1293 'failedschedul':846,948 'failur':49,691,829,845,1263,1607 'fetch':234,240,888,909,936,962,1127 'field':212,249,386,448,508,918,949,959,1143,1422,1509,1538 'fieldsadd':229,469,500,539,575,644,669,1008,1038,1099 'fieldskeep':384 'filesystem':1344 'filter':209,242,373,480,505,549,592,639,674,789,805,911,915,930,938,942,1017,1056,1084,1105,1132,1139,1273,1277,1399,1407,1449,1454,1565,1715,1799 'find':516,624,1020,1119 'full':258,430 'get':759,863 'get-events-for-kubernetes-clust':758 'give':1186,1209 'grail':1430,1486 'ha':140,1078,1100,1111,1588,1725 'happen':868,1225 'health':20,38,439,1370 'histori':783,1237 'horizontalpodautoscal':174 'host':334,340,346,1437,1494,1813,1815 'host-level':333,1436,1493,1814 'hour':743 'hpa':1647,1756 'id':385,391,1145,1155,1165 'identifi':485,558,992 'imag':338,1348,1609,1735 'immedi':1278 'impact':879 'implement':1334 'import':784 'includ':700,1506 'incorrect':1464 'increas':1522 'infrastructur':5,11,175 'ingress':78,196,1379,1677,1684 'ingress.md':1674,1768 'init':1605,1733 'inspect':263,1575 'instead':348 'inventori':92,337,1259 'investig':47,1598,1635 'isnul':593,597,1057 'isol':1699,1780 'issu':603,1618 'job':170 'json':259,322,498,568,1001,1031,1412,1417 'k8s':163,165,167,169,171,173,176,178,180,182,185,187,189,191,193,195,197,203,207,303,314,317,327,357,371,393,404,446,494,564,913,940,997,1027,1082,1117,1124,1142,1401,1536,1797,1819 'k8s-native':316 'k8s.cluster.distribution':451 'k8s.cluster.name':213,250,387,449,468,509,538,638,668,920,951,1096,1406 'k8s.cluster.version':450 'k8s.container.name':256 'k8s.namespace.name':210,228,243,251,374,388,510,537,637,667,921,952,1097 'k8s.node.name':253,467,1094 'k8s.object':129,257,321,497,567,1000,1030,1408,1416,1508,1521,1571,1717 'k8s.pod.name':214,227,252,389,511,536,636,666,922,953 'k8s.workload.kind':255,1085 'k8s.workload.name':254,413,1098 'keep':1513 'key':158,408 'kill':292,631,634,642,647,650,654,688,826,884,1205 'knowledg':83 'kubernet':4,6,10,36,64,612,692,709,752,762,791,889,1792 'label':130,265,267,1356,1459,1462,1467,1471,1567 'label/annotation':1714 'labels-annotations.md':1563,1712 'larg':1441,1525 'last':741,1231 'latest':1351 'level':335,1438,1495,1628,1816 'lifecycl':113,1665,1762 'lifetim':339 'like':728 'limit':277,285,561,581,584,587,590,595,599,928,1287,1291,1306,1316,1324,1367,1472,1534 'list':441,1252,1297,1692,1778 'liveness/readiness':1372 'load':1543,1545,1562,1578,1595,1632,1657,1673,1689 'log':235,237,241,1738 'loglevel':246 'look':1157 'loop':54,1603 'mani':794,881,1215 'matchesphras':1140 'max':461,477 'may':1527 'memori':112,281,286,288,298,586,591,598,836,1315 'mesh':1433,1490 'messag':703,731 'metric':217,271,328,609,621,698,712,874,976,1184,1188,1199,1208,1219,1248,1425,1434,1440,1474,1477,1491,1497,1817 'metrics-bas':620 'minim':1500 'miss':1397,1458 'monitor':7,18,35,87,100,109,117,216,1301,1311 'name':577,579,960,1010,1012,1040,1042,1468 'namespac':95,179,1550,1698,1707,1779 'nativ':318 'necessari':1512 'nest':1421 'network':81,1424,1439,1476,1496,1695 'network-policies.md':1690,1775 'networkpolici':198 'node':61,99,101,136,181,293,453,842,1091,1102,1642,1752,1820 'non':489,1051,1069,1339 'non-root':1338 'non-run':488 'ob':3,345,1786,1812 'oom':291,630,641,646,649,653,687,773,832,883,1180 'oomkil':50,627,834,835,945,1312 'oper':289,683,717,896,1235 'optim':24,63,143,515 'order':1651,1758 'organ':1358 'orphan':1666,1765 'output':1461 'over-provis':517 'pagin':1529 'pars':128,496,566,999,1029,1409,1415,1520,1570,1718,1772 'part':355,378 'pattern':434,659,1726 'pct':472,483,541,551 'perform':1271,1548 'persist':1662 'persistentvolum':194 'persistentvolumeclaim':192 'phase':501,504,506,512,1763 'pictur':619 'placement':23,76,134 'pod':22,42,48,105,108,110,183,208,304,315,358,364,372,394,405,416,423,458,462,470,475,478,481,486,495,520,565,602,604,625,657,685,721,775,822,893,998,1028,1076,1083,1088,1106,1193,1216,1228,1241,1390,1402,1404,1423,1475,1591,1599,1616,1627,1731,1742 'pod-debugging.md':1596,1727 'pod-drill-down':422 'pod-level':1626 'pod-node-placement.md':1579,1719 'polici':82,1696,1777 'possibl':1519 'postur':29,69 'practic':1167,1337 'preempt':841 'prefer':765 'prefix':972,985,1798 'pressur':62,837,843 'privileg':154,993,1013,1016,1018 'probe':828,1373 'problem':1115,1122,1386,1624,1787,1789 'product':211,244 'provid':694 'provis':519 'pull':1610,1736 'pv-pvc.md':1658,1759 'pvc/pv':1664,1761 'quantit':878,1220 'queri':15,199,202,901,981,1270,1498,1523,1808 'question':1174 'quota':849 'rang':1446,1452,1533 'reach':360 'read':1342 'read-on':1341 'readi':827 'reason':702,729,819,934,1203,1267 'reasons/messages':1187 'recent':716 'recommend':1302 'refer':1544,1703,1764 'references/cluster-inventory.md':93,1560,1561,1705 'references/ingress.md':1687,1688,1769 'references/labels-annotations.md':127,1576,1577,1713 'references/network-policies.md':1701,1702,1776 'references/pod-debugging.md':420,427,1630,1631,1728 'references/pod-node-placement.md':135,1593,1594,1720 'references/pv-pvc.md':1671,1672,1760 'references/workload-health.md':1655,1656,1747 'regular':1329 'relat':821,1782 'relev':817 'report':811 'request':279,287,531,547,556,1365 'requir':1528 'resourc':17,45,65,96,121,514,583,589,848,1249,1305,1327,1364,1380,1552,1709 'restart':658,662,671,673,676,686,722,776,823,882,894,1194,1212,1217 'result':790,807,988,1288,1442,1501,1514 'return':986,1392 'reveal':1201 'review':1326 'richer':695 'right':145,1170 'right-siz':144 'rollout':59,1640,1751 'root':750,1024,1052,1070,1340 'rout':79,1678,1770 'rule':1679,1771 'run':490,507,1022,1043,1049,1058,1062,1067 'runasnonroot':1055 'runasus':1048 'rx':1478 'scale':1648 'schedul':74,133,323,690,844,1073,1262,1582,1721 'score':150 'secret':190 'secur':28,68,152,156,990,1335 'securitycontext':1015,1047,1054 'see':414 'selector':137 'servic':186,392,402,415,421,1432,1489,1614,1623,1740 'service-to-pod':1613,1739 'set':284,1289,1304,1363,1443,1502,1515 'share':411 'show':719,876,1178,1189,1191 'simpl':1517 'size':146,1503 'skill':34,331,347,1783 'skill-dt-obs-kubernetes' 'smartscap':350,398,1154,1164 'smartscape.affected_entity.ids':1148,1151 'smartscape.affected_entity.types':1141 'smartscapenod':201,206,370,445,493,563,996,1026,1081,1255 'solut':1388 'sort':651,925,956 'sourc':1172 'source-dynatrace' 'spec':573,1006,1036 'specif':738,802,932,1281,1347 'standard':1353 'start':88 'state':324,491 'statefulset':119,166,1650,1757 'status':503,1537 'step':433 'storag':1663 'storageclass':1669,1767 'store':1298 'stream':615 'structur':85,1413,1809 'stuck':58,1639,1750 'sum':223,527,632,663 'summar':1087 'syntax':1806 'tabl':907,980 'tag':264,1349,1466 'taint':139,1585,1723 'target':1330 'targettyp':380 'team':1361 'templat':369 'throttl':276,831,1320,1645,1755 'time':219,739,887,1223,1445,1451,1532 'time-rang':1531 'timeseri':215,221,456,524,610,629,661,873,975,1198,1218,1247 'timestamp':705,919,926,950,957 'tls':1376,1681,1773 'toler':1586 'tool':764,767,861,1183,1197,1234,1265 'topic':123 'topic-agent-skills' 'topic-ai-agents' 'topic-claude-code' 'topic-devops' 'topic-dql' 'topic-dynatrace' 'topic-mcp' 'topic-observability' 'total':645,652,670,675 'track':1318 'travers':365,375 'trend':1190 'troubleshoot':72,601,605,623,681,1385 'true':1019,1071 'two':432 'two-step':431 'tx':1480 'type':161,200,311,787,804,1283,1395 'unavail':1426,1473 'unrel':812 'unschedul':847 'updat':1539 'usag':104,225,274,521,526,529,540,544,550 'use':12,32,329,342,708,858,872,964,982,1149,1162,1243,1280,1290,1346,1355,1375,1400,1414,1431,1465,1488,1794 'user':713,724,732,744,770,798,814,1045,1060,1064,1173 'util':46,1250 'variabl':1300 'verifi':1075,1587 'via':891,902 'volum':1667,1766 'vs':305 'want':725,745 'warn':838,917 'wast':147 'wide':781 'wildcard':1285 'window':740 'without':560 'work':283,1660 'workaround':1487 'workflow':436 'workload':19,73,116,162,1556 'workload-health.md':1633,1746 'wrong':984,1393 'zero':987","prices":[{"id":"f92e71a0-788f-4da5-80d6-88a67b16e839","listingId":"ddab7fb0-f923-4e65-beef-3e1ca96d293f","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"Dynatrace","category":"dynatrace-for-ai","install_from":"skills.sh"},"createdAt":"2026-05-11T18:57:14.287Z"}],"sources":[{"listingId":"ddab7fb0-f923-4e65-beef-3e1ca96d293f","source":"github","sourceId":"Dynatrace/dynatrace-for-ai/dt-obs-kubernetes","sourceUrl":"https://github.com/Dynatrace/dynatrace-for-ai/tree/main/skills/dt-obs-kubernetes","isPrimary":false,"firstSeenAt":"2026-05-11T18:57:14.287Z","lastSeenAt":"2026-05-18T18:56:48.227Z"}],"details":{"listingId":"ddab7fb0-f923-4e65-beef-3e1ca96d293f","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Dynatrace","slug":"dt-obs-kubernetes","github":{"repo":"Dynatrace/dynatrace-for-ai","stars":78,"topics":["agent-skills","ai-agents","claude-code","devops","dql","dynatrace","mcp","observability"],"license":"apache-2.0","html_url":"https://github.com/Dynatrace/dynatrace-for-ai","pushed_at":"2026-05-15T16:06:09Z","description":"Skills, prompts, and instructions for building AI agents on top of Dynatrace production context","skill_md_sha":"4335d76caa963d55add9a9fec102a0ccbba2bb7f","skill_md_path":"skills/dt-obs-kubernetes/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Dynatrace/dynatrace-for-ai/tree/main/skills/dt-obs-kubernetes"},"layout":"multi","source":"github","category":"dynatrace-for-ai","frontmatter":{"name":"dt-obs-kubernetes","license":"Apache-2.0","description":">-"},"skills_sh_url":"https://skills.sh/Dynatrace/dynatrace-for-ai/dt-obs-kubernetes"},"updatedAt":"2026-05-18T18:56:48.227Z"}}