首页 > 其他分享 >Kubernetes 故障排除简单指南

Kubernetes 故障排除简单指南

时间:2025-01-06 10:58:42浏览次数:3  
标签:指南 kubectl Kubernetes 应用程序 故障 集群 Pod 节点

Kubernetes 故障排除简单指南

介绍

毫无疑问,Kubernetes 在部署和管理容器化应用程序的方法上带来了标准转变。然而,无论系统设计得多么好,随着时间的推移,它们都会遇到问题。

本指南概述了 Kubernetes 部署期间最常见的故障源以及解决这些问题的方法组合。这包括资源分配调整、网络干扰、镜像拉取错误等问题,本指南将提供解决方案,以确保您的 Kubernetes 应用程序继续正常运行。

常见问题:

通过本指南,您将了解如何识别和解决 Pod、服务、Ingress 等问题。

1- 是否有待处理(pending)的 Pod?

命令:

## 获取 Pod 列表和状态
$ kubectl get pods -n namespace
可能的问题:

注意:Pod 处于 Pending 状态,意味着它尚未被调度到节点上。

  • 集群已满:待处理的 Pod 通常意味着集群中没有足够的资源。

  • 资源配额限制:ResourceQuota 或 LimitRange 约束可能阻止调度。

  • PersistentVolumeClaims (PVCs) 问题:Pod 正在等待存储,但 PersistentVolumeClaim 未绑定到 PersistentVolume。

解决方案:
  • 提供更大的集群:通过添加更多节点或调整现有节点的大小来扩展集群,以提供额外的 CPU 或内存。

  • 放宽资源配额:使用新的 YAML 定义增加或调整配额。

apiVersion: v1
kind: ResourceQuota

$ kubectl edit resourcequota <quota-name>
  • 修复 PersistentVolumeClaims:使用kubectl describe pvc <PVC-Name> 检查错误并确保存储类配置正确。

2. Pod 是否在运行?

命令:

kubectl describe pod <pod-name>
可能的问题:
  • 节点问题:Pod 可能由于调度器或 Kubelet 问题而未分配到节点。

  • 应用程序级错误:检查应用程序日志中的错误。

  • CrashLoopBackOff:由于配置错误导致的持续重启。

解决方案:
  • 调度器或 Kubelet 问题:确保节点健康并检查调度器日志。同时检查 Kubelet 是否运行并具有足够的权限。

kubectl get nodes
  • 应用程序错误:检查 Pod 日志

kubectl logs -f <pod-name>
  • CrashLoopBackOff:检查容器镜像或入口点问题。同时验证 Dockerfile 中的 CMD/入口点命令或检查健康检查。

3. Pod 是否准备就绪?

命令:

kubectl describe pod <pod-name>
可能的问题:
  • 就绪探针失败:应用程序可能尚未准备好处理请求。

  • 容器崩溃日志:如果容器终止过快,就绪探针可能会失败。

解决方案:
  • 修复就绪探针:更新部署 YAML 中的就绪探针设置:

## 就绪探针文件示例
readinessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 10
  • 检查之前的日志:使用kubectl logs <pod-name> --previous 了解崩溃原因。

4. 应用程序是否可访问?

命令:

## 8080 是本地机器上的端口,<pod-port> 是 Pod 内的端口
kubectl port-forward <pod-name> 8080:<pod-port>
可能的问题:
  • 应用程序配置错误:Pod 内的应用程序可能未配置为监听正确的端口。

  • 网络问题:端口在 Kubernetes 集群或 Pod 内可能未正确暴露。

解决方案:
  • 修复容器端口:确保 Pod 规范中的容器containerPort 与应用程序配置监听的端口匹配。

  • 更新应用程序设置:验证应用程序是否监听0.0.0.0 而不是127.0.0.1,以允许外部连接。监听127.0.0.1 意味着应用程序仅在 Pod 内部可访问,而监听0.0.0.0 允许外部连接访问应用程序。

5. 服务是否运行正确?

命令:

kubectl describe service <service-name>
可能的问题:
  • 端点缺失:服务选择器可能与 Pod 标签不匹配。这意味着服务无法将流量转发到正确的 Pod。

  • 网络问题:服务可能没有分配 ClusterIP。没有 ClusterIP,服务在 Kubernetes 集群内没有内部 IP 地址。

解决方案:
  • 修复服务选择器:确保服务 YAML 中的选择器与 Pod 标签匹配。这允许服务正确识别并路由流量到目标 Pod。

## 标签和选择器示例
selector:
  app: my-app
  • 调试端点:使用以下命令检查服务的端点并验证正确的 Pod 是否列出。

kubectl get endpoints

6. Ingress 是否运行正确?

命令:

## 获取指定 Ingress 资源的详细信息
$ kubectl describe ingress <ingress-name>
可能的问题:
  • 服务配置错误:Ingress 可能未指向正确的服务,这意味着它无法将流量路由到正确的应用程序。

  • 后端问题:Ingress 可能无法将流量路由到后端服务,这可能是由于配置错误或后端服务本身的问题。

解决方案:
  • 修复 Ingress 设置:更新 Ingress YAML 中的serviceName 和servicePort 以匹配目标服务。这确保流量正确路由到目标服务。

backend:
  serviceName: my-service
  servicePort: 8080
  • 调试 Ingress 控制器:检查 Ingress 控制器的日志以识别任何错误或问题。不同的 Ingress 控制器(例如 NGINX)在集群中运行特定的 Pod 来管理 Ingress 资源。

kubectl logs <ingress-controller-pod>

7. 常见的镜像拉取问题

命令:

kubectl describe pod <pod-name>
可能的问题:
  • 私有仓库访问:从私有仓库拉取镜像可能会失败,如果 Kubernetes 集群没有访问该仓库的权限。这是因为未提供必要的凭据。

  • 错误的镜像标签:使用无效或不存在的镜像标签会导致问题。如果指定的标签在仓库中不存在,镜像拉取将失败。

解决方案:
  • 配置 imagePullSecrets:如果您尝试从私有仓库拉取镜像,您需要在部署 YAML 中配置imagePullSecrets。这为 Kubernetes 提供了访问私有仓库所需的凭据。

imagePullSecrets:
- name: my-registry-secret
  • 验证镜像可用性:检查镜像是否存在于仓库中并确保使用正确的标签。

8. PersistentVolumeClaim 问题

命令:

kubectl describe pvc <pvc-name>
可能的问题:
  • 存储类配置错误:请求的存储类可能不存在或指定错误。如果存储类未正确定义,PVC 将无法绑定到 PersistentVolume。

  • 存储不足:集群可能没有足够的可用存储来满足 PVC 请求。如果没有任何 PV 具有足够的容量或命名空间的存储配额已耗尽,可能会发生这种情况。

解决方案:
  • 修复存储类:确保 PVC 中指定的存储类正确且存在于您的集群中。需要在 PVC yaml 中检查存储类名称并确保其与现有存储类匹配。

storageClassName: storage-class
  • 提供更多存储:如果存储不足,需要向集群添加更多存储容量或调整现有声明。这可能涉及创建具有所需容量的新 PV 或调整现有卷的大小(如果存储提供商支持)。

9. 查看集群事件

  • 排除 Kubernetes 集群故障的第一步是检查集群内发生的事件。

  • 以下命令提供所有命名空间的所有事件,允许您发现与 Pod、节点和其他资源相关的错误、警告和问题。

$ kubectl get events --all-namespaces

10. 检查节点状态

  • 节点是 Kubernetes 集群的骨干。要确保一切运行顺利,请执行以下命令查看所有节点的状态。

## 列出集群中的所有节点及其当前状态
$ kubectl get nodes
  • Ready:表示节点健康并准备好接受和运行容器。

  • NotReady:节点存在问题,无法运行容器,例如资源限制或网络问题。

  • SchedulingDisabled:节点被标记为不可调度,适用于维护或故障排除。

  • Unknown:由于与 Kubernetes 控制平面的通信问题,节点状态未知。

11. 资源指标

  • 资源使用指标对于识别性能问题至关重要。

  • 它们提供 CPU 和内存使用的实时洞察。

## 监控节点的 CPU 和内存使用情况:
$ kubectl top nodes

## 查看特定命名空间中 Pod 的资源使用指标
$ kubectl top pods -n my-namespace

标签:指南,kubectl,Kubernetes,应用程序,故障,集群,Pod,节点
From: https://blog.csdn.net/qq_37844084/article/details/144958627

相关文章

  • 本地(或自下载)浏览器插件 安装指南
    作者:京东科技贾玉龙1首先准备好安装包通过不用渠道下载所要安装插件的压缩包2安装流程第一步解压解压压缩包至文件夹中,请确保您的电脑上已安装解压工具,否则会解压失败1)mac系统中,双击压缩包即可完成解压。2)win系统解压工具可自行下载zip包解压工具2.1)安装后,可选中领航......
  • kubeadm 快速搭建 Kubernetes 集群
    快速搭建K8s集群角色ipk8s-master-01192.168.111.170k8s-node-01192.168.111.171k8s-node-02192.168.111.172服务器需要连接互联网下载镜像软件版本Docker24.0.0(CE)Kubernetes1.28初始化配置关闭防火墙systemctlstopfirewalld&&......
  • Spring Boot 集成 Easysearch 完整指南
    Easysearch的很多用户都有这样的需要,之前是用的ES,现在要迁移到Easysearch,但是业务方使用的是SpringBoot集成的客户端,问是否能平滑迁移。Easysearch是完全兼容SpringBoot的,完全不用修改,本指南将探讨如何将SpringBoot和ES的high-level客户端与Easysearch进行集......
  • Dockerfile完全指南
    Dockerfile完全指南基础镜像的选择基础原则官方镜像优于非官方的镜像,如果没有官方镜像,则尽量选择Dockerfile开源的。固定版本Tag而不是每次都使用lastest尽力选择体积小的镜像<-alpine精简版>[root@node01~]#dockerimagesREPOSITORYTAGIMAG......
  • 高效撰写文献综述的指南:利用ChatGPT提升研究能力
    进行文献综述是一项颇具挑战性的任务。作为学术研究的重要组成部分,它要求我们对以往在特定主题上发表的研究成果进行全面而深入的分析。这一过程不仅帮助我们理解该领域的现状,还能识别出研究中的空白,为未来的探索奠定基础。在本文中,我将从8个方面详细介绍如何利用ChatGPT强大......
  • 转型传统行业避坑指南!
    0前言大环境不好,很多程序员被优化,被逼转型传统行业,但:不同级别的人,咋融入传统行业?转型传统行业的同学会经历哪3个经典阶段?入局后的“坑”1不同阶层,咋转型传统行业?1.1高层总监及总监以上的VP、C*O等。最重要的是想尽一切办法找到价值,同时带领团队做出有价值的事:找......
  • SQLite 调试与性能优化指南
    在前几篇文章中,我们深入了解了SQLite的基础和高级功能,以及如何利用其扩展能力。本篇文章将重点讲解SQLite的调试工具和性能优化技巧,以帮助您解决常见问题并进一步提升数据库性能。常见问题及解决方法SQLite的轻量级特性使其非常易用,但在某些场景下可能会遇到以下常......
  • 「Java 数据结构全面解读」:从基础到进阶的实战指南
    「Java数据结构全面解读」:从基础到进阶的实战指南数据结构是程序设计中的核心部分,用于组织和管理数据。Java提供了丰富的集合框架和工具类,涵盖了常见的数据结构如数组、链表、栈、队列和树等。本文将系统性地介绍这些数据结构的概念、特点以及在Java中的实现,并通过代码......
  • Spring MVC注解故障追踪记15
    SpringMVC是美团点评很多团队使用的Web框架。在基于SpringMVC的项目里,注解的使用几乎遍布在项目中的各个模块,有Java提供的注解,如:@Override、@Deprecated等;也有Spring提供的注解,如:@Controller、@Service、@Autowired等;同时还可能有自定义注解等。注解一方面可以作为标记说明使......
  • GitHub 基础使用指南
        GitHub是一个流行的代码托管平台,主要用于版本控制和协作开发项目。它为开发者提供了强大的工具来管理项目、追踪问题、以及进行代码审查。    本文将介绍GitHub的一些基础功能,包括镜像站点、导航栏的使用、贡献设置、以及如何寻找特定代码或仓库。1.Gi......