[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openshift-pod-failure-diagnosis":3,"mdc--pxcipi-key":35,"related-org-openshift-pod-failure-diagnosis":370,"related-repo-openshift-pod-failure-diagnosis":482},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":28,"topics":29,"repo":30,"sourceUrl":33,"mdContent":34},"pod-failure-diagnosis","diagnose OpenShift pod failure states","Troubleshoot CrashLoopBackOff, ImagePullBackOff, Pending, Error, or OOMKilled status. Use when a workload keeps restarting, fails to start, or is crash-looping.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"openshift","OpenShift (Red Hat)","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fopenshift.png",[12,16,19,21],{"name":13,"slug":14,"type":15},"SRE","sre","tag",{"name":17,"slug":18,"type":15},"Kubernetes","kubernetes",{"name":20,"slug":8,"type":15},"OpenShift",{"name":22,"slug":23,"type":15},"Debugging","debugging",70,"https:\u002F\u002Fgithub.com\u002Fopenshift\u002Flightspeed-service","2026-04-06T18:43:27.866868",null,88,[],{"repoUrl":25,"stars":24,"forks":28,"topics":31,"description":32},[],"Core repository for an AI-powered OCP assistant service","https:\u002F\u002Fgithub.com\u002Fopenshift\u002Flightspeed-service\u002Ftree\u002FHEAD\u002Fskills\u002Fpod-failure-diagnosis","---\nname: pod-failure-diagnosis\ndescription: Troubleshoot CrashLoopBackOff, ImagePullBackOff, Pending, Error, or OOMKilled status. Use when a workload keeps restarting, fails to start, or is crash-looping.\n---\n\n# Pod Failure Diagnosis\n\nWhen a user reports a pod that is not running, follow this structured triage to identify root cause and provide remediation.\n\n## 1. Classify the Failure Mode\n\nGet the pod status and recent events to determine which failure category applies:\n\n- **CrashLoopBackOff** — container starts but exits repeatedly\n- **ImagePullBackOff** — container image cannot be pulled\n- **Pending** — pod is not scheduled to any node\n- **Error \u002F Init:Error** — init container or main container failed on startup\n- **Terminating (stuck)** — pod is not cleaning up\n\nAsk the user for namespace and pod\u002Fdeployment name if not provided. If they describe symptoms instead (\"my app keeps restarting\"), map to the correct category before proceeding.\n\n## 2. CrashLoopBackOff Triage\n\nIf the pod is crash-looping:\n\n1. Retrieve container logs for the **current** attempt to see the latest error.\n2. Retrieve container logs for the **previous** attempt (`--previous`) — the crash reason is often clearer there.\n3. Check pod events for OOMKilled signals — this means the container exceeded its memory limit.\n4. If OOMKilled: compare the container's memory limit against actual usage and recommend increasing it or fixing the memory leak.\n5. If application error: cite the specific log line and recommend the fix (config error, missing dependency, failed health check, etc.).\n\nDo not suggest \"just increase resources\" unless OOMKilled is confirmed.\n\n## 3. ImagePullBackOff Triage\n\nIf the image cannot be pulled:\n\n1. Check the exact image reference in the pod spec — look for typos, wrong tags, or missing registry prefix.\n2. Check pod events for the specific pull error message (authentication required, not found, timeout).\n3. For authentication errors: verify the imagePullSecrets on the pod and the referenced Secret's content.\n4. For \"not found\" errors: verify the image exists in the registry with the specified tag.\n5. For registry connectivity: check if the node can reach the registry (relevant for air-gapped or proxy environments).\n\nReport the exact error message from events — do not guess which sub-case applies.\n\n## 4. Pending Pod Triage\n\nIf the pod is stuck in Pending:\n\n1. Check pod events for scheduling failure reasons.\n2. **Insufficient resources**: compare the pod's resource requests against available node capacity. Show the arithmetic.\n3. **Taints\u002Ftolerations**: identify which nodes have taints the pod does not tolerate.\n4. **Node selectors \u002F affinity**: verify the pod's constraints match at least one available node.\n5. **PVC binding**: if the pod mounts a PersistentVolumeClaim, check if the PVC is Bound. If Pending, diagnose the PVC (missing StorageClass, insufficient capacity, zone mismatch).\n\nFor each sub-case, provide the specific fix — do not list all possibilities when the events already tell you which one applies.\n\n## 5. Provide Remediation\n\nOnce root cause is identified:\n\n1. State the root cause in one sentence with the supporting evidence (event message, log line, or metric).\n2. Provide one or two actionable commands or manifest changes the user can apply.\n3. If the fix involves deleting or force-replacing a resource, warn explicitly before suggesting it.\n4. If the issue is an application bug (not a platform issue), say so clearly and recommend the user check their application code\u002Fconfig.\n\n## Quality Standards\n\n- Always cite the specific event message or log line that reveals the cause — do not provide generic troubleshooting checklists.\n- Distinguish between application errors and platform\u002Finfrastructure issues. The remediation path is different.\n- If multiple pods are failing, prioritize the earliest failure — cascading failures often share a root cause.\n- Do not suggest destructive actions (delete pod, force delete, remove finalizers) without explicit warning about consequences.\n- If evidence is insufficient to determine root cause, ask one focused clarification question rather than speculating.\n",{"data":36,"body":37},{"name":4,"description":6},{"type":38,"children":39},"root",[40,48,54,61,66,122,127,133,138,189,194,200,205,233,238,244,249,297,302,308,313,336,342],{"type":41,"tag":42,"props":43,"children":44},"element","h1",{"id":4},[45],{"type":46,"value":47},"text","Pod Failure Diagnosis",{"type":41,"tag":49,"props":50,"children":51},"p",{},[52],{"type":46,"value":53},"When a user reports a pod that is not running, follow this structured triage to identify root cause and provide remediation.",{"type":41,"tag":55,"props":56,"children":58},"h2",{"id":57},"_1-classify-the-failure-mode",[59],{"type":46,"value":60},"1. Classify the Failure Mode",{"type":41,"tag":49,"props":62,"children":63},{},[64],{"type":46,"value":65},"Get the pod status and recent events to determine which failure category applies:",{"type":41,"tag":67,"props":68,"children":69},"ul",{},[70,82,92,102,112],{"type":41,"tag":71,"props":72,"children":73},"li",{},[74,80],{"type":41,"tag":75,"props":76,"children":77},"strong",{},[78],{"type":46,"value":79},"CrashLoopBackOff",{"type":46,"value":81}," — container starts but exits repeatedly",{"type":41,"tag":71,"props":83,"children":84},{},[85,90],{"type":41,"tag":75,"props":86,"children":87},{},[88],{"type":46,"value":89},"ImagePullBackOff",{"type":46,"value":91}," — container image cannot be pulled",{"type":41,"tag":71,"props":93,"children":94},{},[95,100],{"type":41,"tag":75,"props":96,"children":97},{},[98],{"type":46,"value":99},"Pending",{"type":46,"value":101}," — pod is not scheduled to any node",{"type":41,"tag":71,"props":103,"children":104},{},[105,110],{"type":41,"tag":75,"props":106,"children":107},{},[108],{"type":46,"value":109},"Error \u002F Init:Error",{"type":46,"value":111}," — init container or main container failed on startup",{"type":41,"tag":71,"props":113,"children":114},{},[115,120],{"type":41,"tag":75,"props":116,"children":117},{},[118],{"type":46,"value":119},"Terminating (stuck)",{"type":46,"value":121}," — pod is not cleaning up",{"type":41,"tag":49,"props":123,"children":124},{},[125],{"type":46,"value":126},"Ask the user for namespace and pod\u002Fdeployment name if not provided. If they describe symptoms instead (\"my app keeps restarting\"), map to the correct category before proceeding.",{"type":41,"tag":55,"props":128,"children":130},{"id":129},"_2-crashloopbackoff-triage",[131],{"type":46,"value":132},"2. CrashLoopBackOff Triage",{"type":41,"tag":49,"props":134,"children":135},{},[136],{"type":46,"value":137},"If the pod is crash-looping:",{"type":41,"tag":139,"props":140,"children":141},"ol",{},[142,154,174,179,184],{"type":41,"tag":71,"props":143,"children":144},{},[145,147,152],{"type":46,"value":146},"Retrieve container logs for the ",{"type":41,"tag":75,"props":148,"children":149},{},[150],{"type":46,"value":151},"current",{"type":46,"value":153}," attempt to see the latest error.",{"type":41,"tag":71,"props":155,"children":156},{},[157,158,163,165,172],{"type":46,"value":146},{"type":41,"tag":75,"props":159,"children":160},{},[161],{"type":46,"value":162},"previous",{"type":46,"value":164}," attempt (",{"type":41,"tag":166,"props":167,"children":169},"code",{"className":168},[],[170],{"type":46,"value":171},"--previous",{"type":46,"value":173},") — the crash reason is often clearer there.",{"type":41,"tag":71,"props":175,"children":176},{},[177],{"type":46,"value":178},"Check pod events for OOMKilled signals — this means the container exceeded its memory limit.",{"type":41,"tag":71,"props":180,"children":181},{},[182],{"type":46,"value":183},"If OOMKilled: compare the container's memory limit against actual usage and recommend increasing it or fixing the memory leak.",{"type":41,"tag":71,"props":185,"children":186},{},[187],{"type":46,"value":188},"If application error: cite the specific log line and recommend the fix (config error, missing dependency, failed health check, etc.).",{"type":41,"tag":49,"props":190,"children":191},{},[192],{"type":46,"value":193},"Do not suggest \"just increase resources\" unless OOMKilled is confirmed.",{"type":41,"tag":55,"props":195,"children":197},{"id":196},"_3-imagepullbackoff-triage",[198],{"type":46,"value":199},"3. ImagePullBackOff Triage",{"type":41,"tag":49,"props":201,"children":202},{},[203],{"type":46,"value":204},"If the image cannot be pulled:",{"type":41,"tag":139,"props":206,"children":207},{},[208,213,218,223,228],{"type":41,"tag":71,"props":209,"children":210},{},[211],{"type":46,"value":212},"Check the exact image reference in the pod spec — look for typos, wrong tags, or missing registry prefix.",{"type":41,"tag":71,"props":214,"children":215},{},[216],{"type":46,"value":217},"Check pod events for the specific pull error message (authentication required, not found, timeout).",{"type":41,"tag":71,"props":219,"children":220},{},[221],{"type":46,"value":222},"For authentication errors: verify the imagePullSecrets on the pod and the referenced Secret's content.",{"type":41,"tag":71,"props":224,"children":225},{},[226],{"type":46,"value":227},"For \"not found\" errors: verify the image exists in the registry with the specified tag.",{"type":41,"tag":71,"props":229,"children":230},{},[231],{"type":46,"value":232},"For registry connectivity: check if the node can reach the registry (relevant for air-gapped or proxy environments).",{"type":41,"tag":49,"props":234,"children":235},{},[236],{"type":46,"value":237},"Report the exact error message from events — do not guess which sub-case applies.",{"type":41,"tag":55,"props":239,"children":241},{"id":240},"_4-pending-pod-triage",[242],{"type":46,"value":243},"4. Pending Pod Triage",{"type":41,"tag":49,"props":245,"children":246},{},[247],{"type":46,"value":248},"If the pod is stuck in Pending:",{"type":41,"tag":139,"props":250,"children":251},{},[252,257,267,277,287],{"type":41,"tag":71,"props":253,"children":254},{},[255],{"type":46,"value":256},"Check pod events for scheduling failure reasons.",{"type":41,"tag":71,"props":258,"children":259},{},[260,265],{"type":41,"tag":75,"props":261,"children":262},{},[263],{"type":46,"value":264},"Insufficient resources",{"type":46,"value":266},": compare the pod's resource requests against available node capacity. Show the arithmetic.",{"type":41,"tag":71,"props":268,"children":269},{},[270,275],{"type":41,"tag":75,"props":271,"children":272},{},[273],{"type":46,"value":274},"Taints\u002Ftolerations",{"type":46,"value":276},": identify which nodes have taints the pod does not tolerate.",{"type":41,"tag":71,"props":278,"children":279},{},[280,285],{"type":41,"tag":75,"props":281,"children":282},{},[283],{"type":46,"value":284},"Node selectors \u002F affinity",{"type":46,"value":286},": verify the pod's constraints match at least one available node.",{"type":41,"tag":71,"props":288,"children":289},{},[290,295],{"type":41,"tag":75,"props":291,"children":292},{},[293],{"type":46,"value":294},"PVC binding",{"type":46,"value":296},": if the pod mounts a PersistentVolumeClaim, check if the PVC is Bound. If Pending, diagnose the PVC (missing StorageClass, insufficient capacity, zone mismatch).",{"type":41,"tag":49,"props":298,"children":299},{},[300],{"type":46,"value":301},"For each sub-case, provide the specific fix — do not list all possibilities when the events already tell you which one applies.",{"type":41,"tag":55,"props":303,"children":305},{"id":304},"_5-provide-remediation",[306],{"type":46,"value":307},"5. Provide Remediation",{"type":41,"tag":49,"props":309,"children":310},{},[311],{"type":46,"value":312},"Once root cause is identified:",{"type":41,"tag":139,"props":314,"children":315},{},[316,321,326,331],{"type":41,"tag":71,"props":317,"children":318},{},[319],{"type":46,"value":320},"State the root cause in one sentence with the supporting evidence (event message, log line, or metric).",{"type":41,"tag":71,"props":322,"children":323},{},[324],{"type":46,"value":325},"Provide one or two actionable commands or manifest changes the user can apply.",{"type":41,"tag":71,"props":327,"children":328},{},[329],{"type":46,"value":330},"If the fix involves deleting or force-replacing a resource, warn explicitly before suggesting it.",{"type":41,"tag":71,"props":332,"children":333},{},[334],{"type":46,"value":335},"If the issue is an application bug (not a platform issue), say so clearly and recommend the user check their application code\u002Fconfig.",{"type":41,"tag":55,"props":337,"children":339},{"id":338},"quality-standards",[340],{"type":46,"value":341},"Quality Standards",{"type":41,"tag":67,"props":343,"children":344},{},[345,350,355,360,365],{"type":41,"tag":71,"props":346,"children":347},{},[348],{"type":46,"value":349},"Always cite the specific event message or log line that reveals the cause — do not provide generic troubleshooting checklists.",{"type":41,"tag":71,"props":351,"children":352},{},[353],{"type":46,"value":354},"Distinguish between application errors and platform\u002Finfrastructure issues. The remediation path is different.",{"type":41,"tag":71,"props":356,"children":357},{},[358],{"type":46,"value":359},"If multiple pods are failing, prioritize the earliest failure — cascading failures often share a root cause.",{"type":41,"tag":71,"props":361,"children":362},{},[363],{"type":46,"value":364},"Do not suggest destructive actions (delete pod, force delete, remove finalizers) without explicit warning about consequences.",{"type":41,"tag":71,"props":366,"children":367},{},[368],{"type":46,"value":369},"If evidence is insufficient to determine root cause, ask one focused clarification question rather than speculating.",{"items":371,"total":481},[372,385,398,411,418,431,448,459,469],{"slug":373,"name":373,"fn":374,"description":375,"org":376,"tags":377,"stars":24,"repoUrl":25,"updatedAt":384},"degraded-operator-recovery","recover degraded OpenShift cluster operators","Troubleshoot ClusterOperator in Degraded, Unavailable, or not Progressing state. Use when operator status shows error conditions, reconciliation failures, or degraded health checks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[378,379,380,383],{"name":22,"slug":23,"type":15},{"name":20,"slug":8,"type":15},{"name":381,"slug":382,"type":15},"Operations","operations",{"name":13,"slug":14,"type":15},"2026-04-06T18:43:30.354728",{"slug":386,"name":386,"fn":387,"description":388,"org":389,"tags":390,"stars":24,"repoUrl":25,"updatedAt":397},"namespace-troubleshooting","troubleshoot OpenShift namespace and RBAC issues","Troubleshoot namespace stuck in Terminating state, ResourceQuota exhaustion, or RBAC permission denied errors. Use when resources cannot be created or forbidden errors occur.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[391,394,395,396],{"name":392,"slug":393,"type":15},"Access Control","access-control",{"name":22,"slug":23,"type":15},{"name":20,"slug":8,"type":15},{"name":13,"slug":14,"type":15},"2026-04-06T18:43:29.107881",{"slug":399,"name":399,"fn":400,"description":401,"org":402,"tags":403,"stars":24,"repoUrl":25,"updatedAt":410},"node-not-ready","troubleshoot OpenShift node status issues","Troubleshoot NotReady or SchedulingDisabled node status. Use when a node is down, unschedulable, or needs to be drained and restored.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[404,405,408,409],{"name":22,"slug":23,"type":15},{"name":406,"slug":407,"type":15},"Engineering","engineering",{"name":20,"slug":8,"type":15},{"name":381,"slug":382,"type":15},"2026-04-06T18:43:26.607462",{"slug":4,"name":4,"fn":5,"description":6,"org":412,"tags":413,"stars":24,"repoUrl":25,"updatedAt":26},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[414,415,416,417],{"name":22,"slug":23,"type":15},{"name":17,"slug":18,"type":15},{"name":20,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"slug":419,"name":419,"fn":420,"description":421,"org":422,"tags":423,"stars":24,"repoUrl":25,"updatedAt":430},"route-ingress-troubleshooting","troubleshoot OpenShift Route and Ingress connectivity","Troubleshoot Route or Ingress connectivity failures. Use when traffic returns 502, 503, connection refused, or the endpoint is not reachable externally.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[424,425,428,429],{"name":22,"slug":23,"type":15},{"name":426,"slug":427,"type":15},"Networking","networking",{"name":20,"slug":8,"type":15},{"name":13,"slug":14,"type":15},"2026-04-06T18:43:31.593028",{"slug":432,"name":432,"fn":433,"description":434,"org":435,"tags":436,"stars":445,"repoUrl":446,"updatedAt":447},"cluster-update-advisor","assess OpenShift cluster update readiness","Assess OpenShift cluster update (upgrade) readiness and risk. Use when evaluating whether a cluster is safe to update, when an update is available, or when the user asks about update risks, prerequisites, blockers, or best practices.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[437,440,441,442],{"name":438,"slug":439,"type":15},"Deployment","deployment",{"name":20,"slug":8,"type":15},{"name":381,"slug":382,"type":15},{"name":443,"slug":444,"type":15},"Risk Assessment","risk-assessment",5,"https:\u002F\u002Fgithub.com\u002Fopenshift\u002Fagentic-skills","2026-05-12T06:07:16.759342",{"slug":449,"name":449,"fn":450,"description":451,"org":452,"tags":453,"stars":445,"repoUrl":446,"updatedAt":458},"kubernetes-docs","search and read Kubernetes documentation","Search and read Kubernetes documentation in markdown format. Use when the user asks about Kubernetes concepts, tasks, API reference, kubectl, or any upstream k8s topic — including pods, deployments, services, RBAC, networking, storage, or scheduling.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[454,457],{"name":455,"slug":456,"type":15},"Documentation","documentation",{"name":17,"slug":18,"type":15},"2026-05-12T06:07:15.393562",{"slug":460,"name":460,"fn":461,"description":462,"org":463,"tags":464,"stars":445,"repoUrl":446,"updatedAt":468},"openshift-docs","search and read OpenShift documentation","Search and read OpenShift Container Platform documentation in markdown format. Use when the user asks about OpenShift features, configuration, installation, troubleshooting, or any OCP-specific topic — including operators, routes, services, oc, RBAC, networking, storage, or cluster administration.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[465,466,467],{"name":455,"slug":456,"type":15},{"name":17,"slug":18,"type":15},{"name":20,"slug":8,"type":15},"2026-05-12T06:07:14.03809",{"slug":470,"name":470,"fn":471,"description":472,"org":473,"tags":474,"stars":445,"repoUrl":446,"updatedAt":480},"product-lifecycle","query Red Hat product lifecycle data","Query Red Hat Product Life Cycle data for support phases, end-of-life dates, and OpenShift version compatibility. Use when evaluating whether installed operators or layered products are supported on a given OCP version, approaching end of life, or need upgrading before a cluster upgrade. Also use when the user asks about product support status, EOL dates, or lifecycle phases for any Red Hat product.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[475,476,477],{"name":20,"slug":8,"type":15},{"name":381,"slug":382,"type":15},{"name":478,"slug":479,"type":15},"Reporting","reporting","2026-07-31T05:55:39.981651",9,{"items":483,"total":445},[484,491,498,505,512],{"slug":373,"name":373,"fn":374,"description":375,"org":485,"tags":486,"stars":24,"repoUrl":25,"updatedAt":384},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[487,488,489,490],{"name":22,"slug":23,"type":15},{"name":20,"slug":8,"type":15},{"name":381,"slug":382,"type":15},{"name":13,"slug":14,"type":15},{"slug":386,"name":386,"fn":387,"description":388,"org":492,"tags":493,"stars":24,"repoUrl":25,"updatedAt":397},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[494,495,496,497],{"name":392,"slug":393,"type":15},{"name":22,"slug":23,"type":15},{"name":20,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"slug":399,"name":399,"fn":400,"description":401,"org":499,"tags":500,"stars":24,"repoUrl":25,"updatedAt":410},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[501,502,503,504],{"name":22,"slug":23,"type":15},{"name":406,"slug":407,"type":15},{"name":20,"slug":8,"type":15},{"name":381,"slug":382,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":506,"tags":507,"stars":24,"repoUrl":25,"updatedAt":26},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[508,509,510,511],{"name":22,"slug":23,"type":15},{"name":17,"slug":18,"type":15},{"name":20,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"slug":419,"name":419,"fn":420,"description":421,"org":513,"tags":514,"stars":24,"repoUrl":25,"updatedAt":430},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[515,516,517,518],{"name":22,"slug":23,"type":15},{"name":426,"slug":427,"type":15},{"name":20,"slug":8,"type":15},{"name":13,"slug":14,"type":15}]