Diagnostic step 1
On an affected node, compare kubelet cgroup driver to Docker: run 'ps -p 1 -o comm=' to confirm init and check 'docker info | grep -i cgroup' and kubelet flags (--cgroup-driver). Do not change config yet; just record outputs.
Generated Oct 14, 2026, 9:39:02 AM
On an affected node, compare kubelet cgroup driver to Docker: run 'ps -p 1 -o comm=' to confirm init and check 'docker info | grep -i cgroup' and kubelet flags (--cgroup-driver). Do not change config yet; just record outputs.
Inspect cgroup tree for an OOMKilled container: find the container ID from 'kubectl describe pod', then check /sys/fs/cgroup/memory/docker/<id>/memory. View memory.limit_in_bytes and memory.max_usage_in_bytes. If those files are missing or inconsistent between containers, collect findings.
Check kernel OOM messages: run 'dmesg --ctime | grep -i oom' and cross-reference killed PIDs with container PIDs (pod UID shown in kubectl describe). Save logs for analysis.
Confirm whether the system moved to cgroup v2: test presence of /sys/fs/cgroup/cgroup.controllers and check 'mount | grep cgroup'. If cgroup version changed recently, plan for coordinated kubelet/runtime config change; do not change both on production nodes without maintenance window.
Validate resource manifests: use 'kubectl get deploy -o yaml' to confirm limits are present and correctly unit-suffixed (e.g., '2Gi', not '2000M' if templating may alter units). Use 'kubectl describe pod' on multiple replicas to compare container limits at runtime before editing manifests permanently (reversible).","If evidence points to kernel/runtime-level accounting issues (cgroup mismatch or cgroup v2 transition), escalate to cluster infrastructure team to schedule a rolling node maintenance: align kubelet cgroup-driver with Docker or migrate container runtime to a consistent cgroup v2-aware configuration. Changes at this level should be tested in staging and rolled with node drains; consider opening a support ticket with your runtime vendor if unsure.