Kubernetes 应用故障的一些定位方法

简介: 常备工作 准备一个工具镜像 其中包含 nslookup, ping, curl, 甚至是 ab、siege 等常用工具以及一个顺手的 Shell。一言不合就可以用静态 Pod 的方式将其运行到 Kubernetes 之中进行内部诊断。

  1. 常备工作
  2. 准备一个工具镜像
  3. 其中包含 nslookup, ping, curl, 甚至是 ab、siege 等常用工具以及一个顺手的 Shell。一言不合就可以用静态 Pod 的方式将其运行到 Kubernetes 之中进行内部诊断。
  4. sysctl -a | grep forwarding
  5. 你猜这是干啥的?
  6. 服务状态查询
  7. 各个 Kubernetes 组件的状态检查。可以使用 Ansible 之类的工具进行快速查询。
  8. Service 不通
  9. 这里我们首先假设 Pod 工作正常
  10. 目前我们的应用均采用的是 NodePort 模式对外提供服务:

  1. 逻辑:Service 将 符合其选择器的 Pod 暴露的端口各个 Node 的同一端 口暴露出来对外进行监听。
  2. 技术Kube-proxy 通过网络插件,一般利用 Iptables vxLan 等乌七八糟的蜜汁技术,完成对外服务负载均衡,并分发给各个 Pod 的内部 IP 的相应端口。
  3. 前面我们假设 Pod 是正常工作的,因此,这里只考虑 Service 的情况。
  4. 通过上面的陈述我们能看到大致的一些要素,下面从内向外进行列表:
  5. Pod 能够正常工作
  6. 见后文
  7. Service 的选择器能够正确的找到 Pod
  8. 这里我们可以使用kubectl describe svc panic-service命令,查看输出内容的endpoint一节内容,如果其中有 Pod 地址,也就说明选择器和 Pod 的标签是匹配的。如果为空,则需要对服务或者 Pod Controller 的定义进行排查。
  9. Proxy 的工作状态
  10. 首先可以使用systemctl -l Kube-proxy来查看服务状况。
  11. 还可以使用其他 Node 的同一端口测试访问,看是否单一节点的故障。
  12. DNS 工作状态
  13. Kubectl 查看 DNS 各个 Pod 的存活状态。
  14. 利用上面提到的工具 Pod 尝试解析服务。失败了其实也没啥办法,删 DNS Pod 重启吧。
  15. 端口是否定义正确
  16. 看 Pod 的端口是否能够正确侦听,是否符合服务定义。例如 Service 定义了到 Pod 8080 端口的访问,而 Pod 开放的却是 80,这样的情况跟标签无法匹配一样,是很常见的问题。
  17. 说完了服务,我们来说说 Pod
  18. 两个顺手的命令:
  19. kubectl get po -o wide | grep -v Running kubectl describe po unhealthy
  20. 一般来说,一个行为端正的 Pod,应该是以 Running 状态持续运行的。在进入 Running 之前,大致有调度、创建、初始化等几个环节,如果正常运行之后出了故障,会发生重启。如果在启动容器内进程时出现问题,则会进入 CrashLoopBackOff 的状态。
  21. 除了 Running/Complet 以及 CrashLoopBackOff:
  22. 这几种情况其实不同,不过随性写到这,就不深究了,首先是 describe 一下。
  23. Pod 启动有几个条件:
  24. 有符合要求的节点供其运行
    1. Taint 隔离的节点,要求 Pod 有显式声明对该种 Taint 的容错能力,才可以在其上运行。
    2. 节点和 Pod 的亲和性定义
    3. Node Selector 的定义
  25. 符合其需求的资源
    1. CPU 和 内存的 request limit 定义
    2. 可能存在的第三方资源需求定义
    3. 加载卷(nfs gluster ceph 等)/Secret/Configmap 的定义
  26. 镜像必须存在,可 Pull
  27. 调度部分一般来说查看 Pod 定义,和节点的 Describe 进行匹配即可,Describe 内容中也会明确说出无合适 Pod。
  28. 资源部分 CPU 和内存的 Describe 结果也会很明显。
  29. 存储部分,往往就需要更复杂的排查:
  30. 首先看看是不是每个 Node 都如此。
  31. 是否安装了对应的客户端驱动。
  32. 对分布式存储的访问网络是否可用。
  33. 存储服务容量是否足够分配。
  34. 是否能够成功的手工 Mount。
  35. 至于对 ConfigMap 和 Secret 的依赖,很简单,Kubectl 查询即可。
  36. CrashLoopBackOff 以及 Restart 大于 1
  37. 这种情况一般来说属于业务内部的问题,可以通过 kubectl logs -f 命令进行查看,目前经验比较多的非业务情况是:
  38. 对于 Kubernetes API 进行访问的应用,经常会是因为RBAC 权限不足导致无法启动
  39. 依赖的 Service 无法访问。
本文转自中文社区- Kubernetes Informer 详解
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
17天前
|
存储 Kubernetes API
K8S上生产环境后,90%都会遇到这个故障
K8S上生产环境后,90%都会遇到这个故障
24 0
|
2月前
|
存储 运维 Kubernetes
批处理及有状态等应用类型在 K8S 上应该如何配置?
批处理及有状态等应用类型在 K8S 上应该如何配置?
|
2月前
|
Kubernetes 应用服务中间件 nginx
百度搜索:蓝易云【使用Kubernetes部署Nginx应用教程】
现在,你已经成功在Kubernetes集群上部署了Nginx应用。通过访问Service的外部IP地址,你可以访问Nginx服务。
41 4
|
3月前
|
Kubernetes 负载均衡 Linux
Kubernetes的应用
Kubernetes的应用
34 0
|
3月前
|
存储 Kubernetes 监控
Kubernetes快速进阶与实战:构建可靠的容器化应用平台
Kubernetes快速进阶与实战:构建可靠的容器化应用平台
92 0
|
6天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
11 4
|
7天前
|
JSON Kubernetes Go
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
16 0
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
|
18天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
14 0
|
29天前
|
边缘计算 Kubernetes 负载均衡
容器编排技术在云计算中的应用
随着云计算技术的飞速发展,容器编排技术作为一种重要的部署和管理工具,正在逐渐成为云计算领域的热门话题。本文将介绍容器编排技术在云计算中的应用,探讨其在提高应用程序部署效率、资源利用率以及系统可靠性方面的优势,并分析其未来发展趋势。
|
30天前
|
人工智能 自然语言处理 Kubernetes
LLM 技术图谱(LLM Tech Map)& Kubernetes (K8s) 与AIGC的结合应用
LLM 技术图谱(LLM Tech Map)& Kubernetes (K8s) 与AIGC的结合应用
60 0