-
OOMkilled状态:
- 表示pod因为内存不足(Out Of Memory)被k8s终止。
- 这表明pod的内存请求不足(requests.memory)或者限制(limits.memory)设置不足。
-
OOMkilled问题分析:
- pod的内存使用量超过k8s设置的内存限制(limits.memory)。
- 也有可能是应用程序本身的内存需求较高,或者存在内存泄漏。
-
解决方法:
-
增加内存限制:
-
修改pod的 limits.memory 配置,增加内存限制。
-
示例:
resources:limits:memory: "2Gi"requests:memory: "1Gi"
-
检查应用程序是否存在内存泄漏或不合理的内存使用。
-
-
ContainerStatusUnknown问题分析:
- 原因:
- k8s无法获取容器的状态,可能是节点或容器运行时的问题。
- 也有可能是容器崩溃后k8s无法正确报告状态。
-
解决方法:
-
检查节点的状态
- 使用以下命令检查节点是否正常:
kubectl get nodes kubectl describe node <node-name>
-
检查容器的日志:
-
使用以下命令查看容器的日志,排查具体错误:
kubectl logs <pod-name> -n 命名空间
-
-
重启pod:
- 删除 Pod,让 Kubernetes 重新调度:
kubectl delete pod <pod-name> -n 命名空间
-
-
具体操作过程如下:
-
检查pod的配置:
查看 bk-cwreport-cw-report 的资源配置: kubectl get pod <pod-name> -n 命名空间 -o yaml
-
调整资源配置:
如果内存不足,可以修改 Deployment 或 StatefulSet 的资源配置:找到 pod所对应的 Deployment 或 StatefulSet: kubectl get deployment -n 命名空间 | grep '关键信息'编辑资源配置: kubectl edit deployment deployment的名字 -n 命名空间增加内存限制: resources:limits:memory: "2Gi"requests:memory: "1Gi"
-
检查应用程序日志:
查看问题 Pod 的日志,排查具体错误: kubectl logs <pod-name> -n 命名空间
-
重启pod:
如果 Pod 状态为 ContainerStatusUnknown,可以尝试删除 Pod,让 Kubernetes 重新调度: kubectl delete pod <pod-name> -n 命名空间
-
监控和告警:
使用 Prometheus 或 Kubernetes 自带的监控工具,监控 Pod 的内存使用情况。设置告警规则,当内存使用接近限制时及时通知。
-