-- SRETALK 9月14日 k8s更新了1.28.2版本,这更新速度杠杠的,你们还在用什么版本,停留在1.18-1.20的小伙伴举个手 --k8s k8s故障排查常用方式 在Kubernetes中排查故障是一个常见但有时复杂的任务 以下是常用的方式和方法,可以帮排查Kubernetes中的故障: 查看Pod状态和事件: 使用 kubectl get pods 命令来获取Pod的状态。 排查资源限制: 检查Pod的资源请求和限制,确保资源分配合理。 使用 kubectl top pods 和 kubectl top nodes 命令来查看资源使用情况。 Kubernetes组件排查: 如果问题似乎涉及Kubernetes控制平面组件(如kube-apiserver、kube-controller-manager、kube-scheduler等),检查它们的日志以获取更多信息 在排查故障时,重要的是有系统地方法来分析问题,从Pod级别到节点级别,甚至到集群级别。同时,建议使用自动化工具来监视和报警,在故障发生时快速采取措施,以减少影响。
是关于在之前项目中,k8s 线上集群中 Node 节点状态变成 NotReady 状态,导致整个 Node 节点中容器停止服务后的问题排查。 文章中所描述的是本人在项目中线上环境实际解决的,那除了如何解决该问题,更重要的是如何去排查这个问题的起因。 关于 Node 节点不可用的 NotReady 状态,当时也是花了挺久的时间去排查的。 毫无疑问,Node 节点是否健康,直接影响该节点下所有的实例容器的健康状态,直至影响整个 K8S 集群。 那么如何解决并排查 Node 节点的健康状态? 因此排查Pod的健康状态的意义就在于,是什么原因会导致Node节点服务不可用,因此这是一项非常重要的排查指标。 也是和 K8S 强相关的内容,后续也还会继续和大家分享关于 K8S 相关的知识。 如果您也是 K8S 的使用者,或者想接触学习 K8S,欢迎关注个人公众号!
基本上,排查systemd的问题,我用到了四个方法,(调试级别)日志,core dump,代码分析,以及live debugging。
2、因为 kmem account 是 cgroup 的扩展能力,因此runc、docker、k8s 层面也进行了该功能的支持,即默认都打开了kmem 属性。 3、因为3.10 的内核已经明确提示 kmem 是实验性质,我们仍然使用该特性,所以这其实不算内核的问题,是 k8s 兼容问题。 方案三 在 k8s 维度禁用该属性。issue 中一般建议修改 kubelet代码并重新编译。 对于v1.13及其之前版本的kubelet,需要手动替换以下两个函数。 影响范围 k8s在 1.9版本开启了对 kmem 的支持,因此 1.9 以后的所有版本都有该问题,但必须搭配 3.x内核的机器才会出问题。 、docker 而言,kmem 属性属于正常迭代和优化,至于 3.x 的内核上存在 bug 不能兼容,不是k8s 关心的问题。
原文通过 AI Agent 自动排查 K8s 问题郭子龙 发表于 2025/11/18一、背景与痛点现状痛点(Dev & Ops):研发:排查 K8s 问题需要熟悉 kubectl/日志命令,遇到 CrashLoopBackOff 知识沉淀:排查过程自动留痕,方便团队回溯和经验传承。二、使用方式Agent 自动完成排查,也可以再通过继续对话交互深入分析。技术指导(如 K8s 最佳实践咨询)和需求支持(如资源配额调整建议)。 @机器人 排查告警信息。自动回复结构化诊断结论、建议和关键日志片段2. @机器人,提出任何k8s相关需求,如资源优化。3. @机器人 排查容器异常退出。 三、实现方式技术流程:能力覆盖:场景支持:Pod 异常、Node 状态、Service 网络、镜像拉取、调度失败等常见问题信息聚合:容器日志、K8s 事件、资源状态、配置信息、调度详情、网络连通性等关键排查数据一次性呈现核心能力 四、后续改进统一运维 Agent 入口,屏蔽底层差异:以 K8s 排查为起点,逐步整合更多运维能力:日志查询与分析(SLS)、指标监控与告警(Prometheus/Grafana)、服务拓扑与依赖关系(
问题背景 k8s集群,总共5个节点,信息如下所示: 集群 污点 k8s版本 系统版本 master 无 1.14 Centos 7.1 work1 有 1.14 Centos 7.1 work2 无 1.14 看到这里,问题原因大概找到了,原因是因为机器在关机同时,k8s自动为这个节点添加了不可被调度污点 node.kubernetes.io/unreachable:NoExecute,所以也就导致我的业务Pod 解决过程 一开始个人想法只要把k8s添加的污点给删除了,也就可以被调度了,于是我开始手动删除污点,具体执行命令如下所示: kubectl taint node k8snode2 node.kubernetes.io 怎么办,乖乖看官方文档去,这么成熟的k8s怎么会有这种低级问题? 深入探究 K8S ConfigMap 和 Secret Kubernetes入门培训(内含PPT) ----
如果出现terminating状态的话,可以提供让容器专家进行排查,不建议直接强行删除,会可能导致一些业务上问题。 -l8xrw": Error response from daemon: mkdir /var/lib/docker/aufs/mnt/1f09d6c1c9f24e8daaea5bf33a4230de7dbc758e3b22785e8ee21e3e3d921214 # kubectl describe node | grep -A 5 Allocatable //Allocatable 表示此节点 k8s 能够申请的资源总和 # 可以在 pod 里 telnet 一下 dns 的 53 端口 # telnet 172.16.1.2 53 //连 dns service 的 cluster ip 如果检查到是网络不通,就需要排查下网络设置 = 期望Completions 数量,低版本 kubectl 不容忍,delete job 的时候打开debug(加-v=8),会看到kubectl不断在重试,直到达到timeout时间。
any-name: my-app spec: containers: - name: cont1 image: learnk8s ports: - port: 80 targetPort: 8080 selector: name: app --- apiVersion: networking.k8s.io any-name: my-app spec: containers: - name: cont1 image: learnk8s - port: 80 targetPort: 8080 selector: any-name: my-app --- apiVersion: networking.k8s.io
为了解决这一问题,我们在非生产环境通过压测工具进行复现,如下是具体排查和优化过程。 02、请求链路 当时采用的是nginx作为流量网关反向代理微服务网关,微服务和其网关跑在k8s集群上,微服务网关通过NodePort的形式暴露,为了方便问题复现和排查,我们把复现环境的Pod设置为单副本 03、排查与分析过程 1、起初怀疑是节点带宽满了,经查看监控,流量都很正常,所以暂时排除; 2、查看skywalking调用链监控,发现这些请求都有一个共同点,在nginx upstream这个环节耗时较长
问题排查 上面错误信息可以通过 journalctl -u kubelet -f 或者 tail -f /var/log/messages 命令查看到。 kubelet 默认把一些数据信息存放在 /var/lib/kubelet 目录下,通过 Pod Id,能查找到 9e6d9bdd-1554-45e6-8831-53e83f8ea263 pod 挂载的数据 # 查看 pods 下面数据 $ ls /var/lib/kubelet/pods/9e6d9bdd-1554-45e6-8831-53e83f8ea263/ containers etc-hosts # 删除 9e6d9bdd-1554-45e6-8831-53e83f8ea263 目录 $ cd /var/lib/kubelet/pods/ $ rm -rf 9e6d9bdd-1554-45e6 -8831-53e83f8ea263 现在在通过 journalctl -u kubelet -f 命令看kubelet日志,就没有 Orphaned pod found - but volume paths
一些VM-to-VM的报文无法到达其它节点 要对此进行排查,首先需要搞清楚这是控制平面问题还是数据平面问题。对于控制平面问题,以下命令将是最有用的。 (这在诸如以kubectl描述pod的各个地方都可以看到) networkPlugin cni failed to set up pod "coredns-5644d7b6d9-p8fkk_kube-system
目录 问题 解决 总结 问题 录制服务生成了一些 m3u8 文件,现在,把这些 m3u8 文件推流上屏之后,出现了规律性卡顿。但是播放视频源文件,发现文件本身没有问题,播放很流畅。
在k8s集群中部署springboot 应用,应用启动较慢,如图: ? 如果基于kubelet log -f pod 查看日志时,日志打印同样较慢 调试改动后: ? 所以也导致上层应用因之引发的问题表现随机,不易排查。 比如,在Java社区,/dev/random设备引致的问题早在jdk-1.4版本时就已经有bug报告。 security/java.security中的 securerandom.source=file:/dev/random 改为 securerandom.source=file:/dev/urandom 排查建议 对于Java程序启动慢,或者进程耗时不正常,请优先排查是不是/dev/random的问题。
AP 设备当前可用内存空间不足,无法加载新版本文件 以PC作为FTP/SFTP/TFTP服务器时,本地防火墙拦截文件传输请求 FTP Server 不支持REST断点续传命令,影响文件下载流程 三、详细排查步骤 四、故障信息采集 若以上排查步骤无法解决问题,需采集以下信息用于进一步定位故障: 版本信息 [Huawei-diagnose] vrbd [Huawei-diagnose] display upgrade-assistant-package
$ kubectl run hostnames --image=k8s.gcr.io/serve_hostname \ --labels=app=hostnames "default", "selfLink": "/api/v1/namespaces/default/services/hostnames", "uid": "428c8b6c 问题8:kube-proxy 正常工作吗? 如果您到了这里,那么 Service 正在运行,也有 Endpoints,而您的 Pod 实际上也正在服务。
为了解决这一问题,我们在非生产环境通过压测工具进行复现,如下是具体排查和优化过程。 02、请求链路 当时采用的是nginx作为流量网关反向代理微服务网关,微服务和其网关跑在k8s集群上,微服务网关通过NodePort的形式暴露,为了方便问题复现和排查,我们把复现环境的Pod设置为单副本 03、排查与分析过程 1、起初怀疑是节点带宽满了,经查看监控,流量都很正常,所以暂时排除; 2、查看skywalking调用链监控,发现这些请求都有一个共同点,在nginx upstream这个环节耗时较长
1.背景: 最近在ubuntu804上适配k8s的时候,部署到业务pod的时候,出现了服务器卡死,top查看发现负载很高,进行CPU排序发现如下信息,可知是CoreDNS服务导致。 ? 2. 分析排查: 1.分析CoreDNS问题 根据coredns状态是CrashLoopBackOff # kubectl get pod -n kube-system -l k8s-app=kube-dns systemd/resolve/resolv.conf {% else %} resolvConf: /etc/resolv.conf {% endif %} 修改kubelet启动文件,再重新部署k8s root@ubuntu1804:~# kubectl get pod -n kube-system -l k8s-app=kube-dns NAME READY # kubectl -n kube-system logs -f coredns-8f9b4c9f5-9rvjq .:53 2021/06/03 06:20:28 [INFO] CoreDNS-1.1.3g
但转念一想,这简直是K8s界的“月经问题”!连夜肝出这篇《Pod Pending八宗罪》,看完直接让Bug原地消失! 1. 资源不足:你的集群被“榨干”了吗? 标签对不上:K8s版“相亲翻车现场” NodeSelector太挑剔:Pod非要找带“高富帅”标签的节点,结果全集群都是“普信男”! 破局姿势: kubectl describe pod | grep -i "failed to pull" # 看镜像怎么作妖 保命技巧:本地先docker pull测试,别让K8s背锅! 调度器摆烂:K8s的“大脑死机了” 调度器躺平:kube-scheduler进程偷偷摸鱼! 策略太奇葩:亲和性设置成“必须和仇人在同一节点”,直接死锁! ️ 核武器: kubectl drain <node> --force # 强制“拔网线” kubectl delete node <node> # 直接“踢出群聊” 终极排查六连招(
经过昨天晚上的调试,发现了一个主要问题:使用圆网格标定板标定时,不能使用cornerSubPix()函数,否则寻找角点时,会导致图一的情况(裁剪为30万像素)。就找到能参考的程序,推进还是很快的。
这里直接列出最容易踩的 5 个坑,对照排查即可解决。 1. 容器网络隔离:Localhost 的陷阱 这是新手最常犯的错误。 Docker 网络:如果两者在同一个 Docker Network 下,直接用 n8n 的容器名(如 http://n8n:5678/...)。 而 n8n 的 Webhook 节点默认有时会设为 GET。 检查点: 打开 n8n 的 Webhook 节点设置,确保 HTTP Method 显式选择为 POST。 保存 n8n 工作流,并开启 Active 状态。 4. 如果 n8n 无法正确读取,后续节点就会报错。