故障分析 | Kubernetes 故障诊断流程

news2025/1/8 5:34:41

一、本文概述及主要术语

1.1 概述

本文基于 Pod 、Service 和 Ingress 三大模块进行划分,对于 Kubernetes 日常可能出现的故障问题,提供了较为具体的排查步骤,并附上相关解决方法或参考文献。

1.2 主要术语

  1. Pod: Kubernetes 中创建和管理的、最小的可部署的计算单元。是一组(一个或多个) 容器;这些容器共享存储、网络、以及怎样运行这些容器的声明。

  2. Port-forward: 通过端口转发映射本地端口到指定的应用端口。

  3. Service: 一个 Kubernetes 的 Service 是一种抽象,它定义了一组 Pods 的逻辑集合和一个用于访问它们的策略 - 有时被称为微服务。

  4. Ingress: 提供了集群外部到内部 HTTP 和 HTTPS 服务的路由通信,流量路由通过 Ingress 资源上定义的规则控制。

二、故障诊断流程

2.1 Pods 模块检查

  • 以下流程若成功则继续往下进行,若失败则根据提示进行跳转。

2.1.1 检查是否有 pod 处于 PENDING 状态

  1. kubectl get pods:如果有 pod 处于 PENDING 状态则往下看,否则前往 2.1.5 。

[root@10-186-65-37 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp-deploy-55b54d55b8-5msx8 0/1 Pending 0 5m
 

2 kubectl describe pod <pod-name>:若正确输出指定的一个或多个资源的详细信息,则判断是否集群资源不足,若不足则进行拓展,否则前往 2.1.2 。

2.1.2 检查是否触发 ResourceQuota limit

  1. kubectl describe resourcequota -n <namespace>:

 

2  如有限制则进行相应资源释放或拓展,参考:https://kubernetes.io/zh/docs/concepts/configuration/manage-resources-containers/#extended-resources

否则前往 2.1.3

2.1.3 检查是否有 PVC 处于 PENDING 状态

  1. 持久卷(PersistentVolume,PV)是集群中的一块存储,可以由管理员事先供应,或者使用存储类(Storage Class)来动态供应;持久卷申领( PersistentVolumeClaim, PVC )表达的是用户对存储的请求。

  2. kubectl describe pvc <pvc-name>:若 STATUS 为 Pending

 

则参考如下链接进行解决:https://kubernetes.io/zh/docs/concepts/storage/persistent-volumes/

否则前往 2.1.4 。

2.1.4 检查 pod 是否被分配至 node

  1. kubectl get pods -o wide:若已被分配至 node

 

则是 Scheduler 方面的问题,参考如下链接进行解决:https://kubernetes.io/zh/docs/concepts/scheduling-eviction/kube-scheduler/

否则为 Kubectl 的问题。

2.1.5 检查是否有 pods 处于 RUNNING 状态

  1. kubectl get pods -o wide:如果 pods 处于 RUNNING 状态则前往 2.1.10 ,否则前往 2.1.6 。

2.1.6 检查 pod 日志

  1. kubectl logs <pod-name>:

若能正确获取日志则根据日志修复相关问题。

  1. 若无法获取日志则判断容器是否快速停止运行,若快速停止则执行:kubectl logs <pod-name> --previous

  2. 无法获取日志,且容器并非快速停止运行,则前往2.1.7

2.1.7 Pod 状态是否处于 ImagePullBackOff

  1. kubectl describe pod <pod-name>:查看 status 是否为 ImagePullBackOff ?不为 ImagePullBackOff 则前往2.1.8 。

  2. 查看 image 名称是否正确,错误则修正。

  3. 查看 image tag 是否存在并经过验证。

  4. 是否从 private registry 拉取镜像?若是则确认配置信息正确。

  5. 若并非从 private registry 拉取镜像,问题可能出在 CRI(容器运行时接口) 或 kubectl 。

2.1.8 Pod 状态是否处于 CrashLoopBackOff

  1. kubectl describe pod <pod-name>:查看 status 是否为 CrashLoopBackOff ?否则前往 2.1.9 。

  2. 若是则查看日志并修复应用程序崩溃。

  3. 确认是否遗漏了 Dockerfile 中的 CMD 指令?Docker history < image-id > (后可加 --no-trunc 显示完整输出)

 

 

  1. Pod 状态是否频繁重启且状态处于 Running 和 CrashLoopBackOff 之间切换?若是则需修复 liveness probe(存活探测器)的问题,请参考如下链接:https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

2.1.9 Pod 状态是否处于  RunContainerError

  1. kubectl describe pod <pod-name>:查看 status 是否为 RunContainerError 。

  2. 若状态为 RunContainerError 问题可能由于挂载卷 (volume) 导致,请参考如下链接:https://kubernetes.io/zh/docs/concepts/storage/volumes/

  3. 否则请在 StackOverflow 等网站寻求帮助。

2.1.10 检查是否有 pods 处于 READY 状态

  1. 若处于 READY 状态,则继续往下执行进行映射设置

 

若无处于 READY 状态的 pods 则前往 2.1.11 。

2. kubectl port-forward <pod-name> 8080:<pod-port> 

3. 映射成功前往 2.2 。

a)进行映射

 b)验证映射成功

 

失败则需确认程序可被所有地址监听,设置语句如下

 

若无法被所有地址监听则为未知状态(Unknown state)。

2.1.11 检查 Readiness(就绪探测器)

  1. kubectl describe pod <pod-name>

  2. 正常输出则根据日志和参考如下链接修复相应问题 https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

  3. 失败则为未知状态(Unknown state)。

2.2 Service 模块检查

2.2.1 Service 当前状态检查

  1. kubectl describe service <service-name> 成功输出如下

 

2 是否能看到 Endpoints 列且有正常输出?非正常输出则前往 2.2.2 。

3  kubectl port-forward service/<service-name> 8080:<service-port> 成功输出如下

 

4成功则前往 2.3 ,失败则前往 2.2.4 。

2.2.2 Selector 与 Pod label 比对

  1. 查看 pod 的 label 信息 kubectl describe pod <pod-name>

 

2 查看 service 的 selector 信息 kubectl describe service <service-name>

3 比对两者是否正确匹配,错误则进行修正,正确则前往 2.2.3 。

2.2.3 检查 Pod 是否已分配 IP

  1. 查看 pod 的 ip 信息 kubectl describe pod <pod-name>

  2. 已正确分配 ip ,则问题是由于 kubectl 导致。

 

 

3未分配 ip ,则问题是由于 Controller manager 导致。

2.2.4 检查 Service TargetPort 与 Pod ContainerPort

  1. 查看 service 的 TargetPort 信息: kubectl describe service <service-name>

 

2 查看 pod 的 ContainerPort 信息: kubectl describe pod <pod-name>

 

3 上方两者一致则问题是由于 kube-proxy 导致,不一致则进行信息修正。

2.3 Ingress 模块检查

2.3.1 Ingress 当前状态检查

  1. kubectl describe ingress <ingress-name> 成功输出如下:

 

2 是否能看到 backends 列且有正常输出?正常输出前往 2.3.4 ,否则前往 2.3.2 。

2.3.2 检查 ServiceName 和 ServicePort

  1. kubectl describe ingress <ingress-name>

  2. kubectl describe service <service-name>

 

3  检查前两者的 ServiceName 和 ServicePort 书写是否正确,若正确则前往2.3.3,错误请修正。

2.3.3 Ingress controller 文档

  1. 问题是由于 Ingress controller 导致,请查阅文档寻找解决方法:https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/

2.3.4检查 port-forward ingress

  1. kubectl port-forward <ingress-pod-name> 8080:<ingress-port> 测试是否能正常访问:curl localhost:8080

可正常访问前往 2.3.5 ,否则前往 2.3.3 。

2.3.5 检查能否在外网通过 Ingress 进行访问

  1. 可从外网成功访问,故障排查结束。

  2. 若无法从外网访问,则问题是由于基础设施(infrastructure)或集群暴露(exposed)方式导致,请排查。

参考文献 

故障分析 | Kubernetes 故障诊断流程 (qq.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/787600.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot日志:SLF4J和Logback

日志的分类 SpringBoot中的日志库分为两种&#xff1a; 实现库&#xff1a;提供具体的日志实现&#xff0c;例如日志级别的控制、打印格式、输出目标等。外观库&#xff1a;自身不提供日志实现&#xff0c;而是对其他日志库进行封装&#xff0c;从而方便使用。基于外观模式实…

接口自动化测试-Python+Requests+Pytest+YAML+Allure配套撸码(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 接口自动化框架&a…

软件测试/测试开发丨Pytest测试框架学习笔记

Pytest 参数化用例 测试登录场景 测试登录成功&#xff0c;登录失败(账号错误&#xff0c;密码错误)*创建多种账号: 中⽂文账号&#xff0c;英⽂文账号*普通测试用例方法Copy 多份代码 or 读⼊入参数?*一次性执⾏多个输⼊入参数* def test_param_login_ok():# 登录成功user…

解决分类任务中数据倾斜问题

大家好&#xff0c;在处理文本分类任务时&#xff0c;基准测试流行的自然语言处理架构的性能是建立对可用选项的理解的重要步骤。在这里&#xff0c;本文将深入探讨与分类相关的最常见的挑战之一——数据倾斜。如果你曾经将机器学习&#xff08;ML&#xff09;应用于真实世界的…

selenium---滑动框验证码破解

前言 目前常见的验证码有很多种&#xff0c;比如数字验证码&#xff0c;滑动验证码&#xff0c;以及滑动补全图像验证码等&#xff0c;关于验证码的操作属于我们在UI自动化很大的一个障碍&#xff0c;今天安静来介绍下如何通过python来实现我们滑动验证码 滑动验证码 先来一…

MySQL之全文索引二三事

全文索引 MySQL全文索引是一种用于快速搜索文本字符串的索引&#xff0c;在MySQL数据库中&#xff0c;它可以用来提高文本搜索的效率。全文索引不同于普通索引&#xff0c;普通索引只是对列值进行排序&#xff0c;而全文索引则会对列的内容进行分词&#xff0c;并且对每个分词…

RocketMQ重复消费的解决方案::分布式锁直击面试!

文章目录 场景分析方法的幂等分布式锁Redis实现分布式锁抢锁的设计思路 分布式锁案例 直击面试rocketmq什么时候重复消费消息丢失的问题消息在哪里丢失发送端确保发送成功并且配合失败的业务处理消费端确保消息不丢失rocketmq 主从同步刷盘 场景分析 分布式系统架构中,队列是分…

go-zero学习 第六章 分布式事务dtm

go-zero学习 第六章 分布式事务dtm 1 参考文档2 官方示例3 go-zero使用dtm参考代码3.1 go-zero支持dtm 代码操作步骤※3.2 gozerodtm 代码操作步骤 4 注意事项4.1 grpc接口地址※4.2 动态调用过程4.3 dtm的回滚补偿4.4 barrier的空补偿、悬挂等4.5 barrier在rpc中本地事务 1 参…

多媒体工作中用到的小工具

安利下嵌入式多媒体用到的各种小工具 下面是同事们推荐的 以下是对这些软件的简要介绍: ocenaudio:ocenaudio是一款跨平台的音频编辑软件,它提供了直观的界面和丰富的功能,可以帮助用户进行音频剪辑、修复、转码等操作。 MKVToolNix:MKVToolNix是一款开源的多媒体容器格…

web-vim信息泄露

&#xff08;1&#xff09;知识补充 vim 交换文件名 在使用vim时会创建临时缓存文件&#xff0c;关闭vim时缓存文件则会被删除&#xff0c;当vim异常退出后&#xff0c;因为未处理缓存文件&#xff0c;导致可以通过缓存文件恢复原始文件内容   以 index.php 为例&#xff1…

Redis一主二从三哨兵模式

文章目录 Redis一主二从三哨兵模式环境配置实践配置主从配置哨兵模式 测试主从复制测试模拟master宕机恢复master Redis一主二从三哨兵模式 当你使用Redis作为主从复制的架构&#xff0c;并且希望在出现主节点故障时自动进行故障转移时&#xff0c;适用于一主而从三哨兵模式。…

android 面试题目之handler消息机制

Handler消息机制是Android里面很基础的东西&#xff0c;基本上属于必考题 一般会从如下几个方面来考查 实现原理&#xff0c;Handler/Message/MessageQueue/Looper 几个类的实现流程&#xff0c;Handler导致的内存泄露怎么处理主线程的Looper是什么时候创建的&#xff1b;如果…

3. Spring 更简单的读取和存储对象(五大类注解 方法注解)

目录 1. 存储 Bean 对象 1.1 配置扫描路径 1.2 添加注解存储 Bean 对象 1.2.1 Controller&#xff08;控制器存储&#xff09; 1.2.2 Service&#xff08;服务存储&#xff09; 1.2.3 Repository&#xff08;仓库存储&#xff09; 1.2.4 Component&#xff08;组件存储&…

C语言学习笔记 Ubuntu系统下部署gcc编译工具-01

在22.04版本 ubuntu系统下&#xff1a; 1.进行apt工具包更新 sudo apt-get update 2.安装gcc工具 sudo apt-get install -y gcc 3.创建一下文件&#xff0c;并编译它输出相应的内容 touch hello.c 4.使用gcc编译c源程序并运行 格式&#xff1a;gcc 源文件名 -o 生成的执行文…

AcWing 1210. 连号区间数

输入样例1&#xff1a; 4 3 2 4 1输出样例1&#xff1a; 7输入样例2&#xff1a; 5 3 4 2 5 1输出样例2&#xff1a; 9样例解释 第一个用例中&#xff0c;有 77 个连号区间分别是&#xff1a;[1,1],[1,2],[1,3],[1,4],[2,2],[3,3],[4,4][1,1],[1,2],[1,3],[1,4],[2,2],[3,3…

记一次vscode配置CMake编译task的坑

事情经过是这样的&#xff0c;博主在一个项目中需要使用交叉编译链进行项目编译&#xff0c;但是在CMake中有一个自定义的编译选项&#xff0c;在vscode中配置task任务后&#xff0c;编译发现终端报静态库.a文件格式错误&#xff0c;如下图所示&#xff1a; 但是如果在CMakeLis…

python与深度学习(七):CNN和fashion_mnist

目录 1. 说明2. fashion_mnist实战2.1 导入相关库2.2 加载数据2.3 数据预处理2.4 数据处理2.5 构建网络模型2.6 模型编译2.7 模型训练2.8 模型保存2.9 模型评价2.10 模型测试2.11 模型训练结果的可视化 3. fashion_mnist的CNN模型可视化结果图4. 完整代码 1. 说明 本篇文章是C…

Install the Chinese input method on Linux

Open terminal and input: sudo -i apt install fcitx fcitx-googlepinyinWait for it to finish. Search fcitx: "设置"-->"输入法": Finally, we get the following result&#xff1a; Ctrl Space&#xff1a;Switch the input method. The test …

Redis追本溯源(三)内核:线程模型、网络IO模型、过期策略与淘汰机制、持久化

文章目录 一、Redis线程模型演化1.Redis4.0之前2.Redis4.0之后单线程、多线程对比3.redis 6.0之后 二、Redis的网络IO模型1.基于事件驱动的Reactor模型2.什么是事件驱动&#xff0c;事件驱动的Reactor模型和Java中的AIO有什么区别3.异步非阻塞底层实现原理 三、Redis过期策略1.…

印刷和数字设计的页面布局软件 QuarkXPress 2023 Crack

QuarkXPress 2023 用于印刷 和数字设计的页面布局软件&#xff0c;使用 QuarkXPress 释放您的创造力并最大限度地提高生产力 图形设计和桌面出版流程早就应该进行创新和颠覆&#xff0c;所以 QuarkXPress 就来了。自 1987 年首次亮相市场以来&#xff0c;成千上万的创意专业人士…