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 详解
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
9月前
|
缓存 Kubernetes Docker
GitLab Runner 全面解析:Kubernetes 环境下的应用
GitLab Runner 是 GitLab CI/CD 的核心组件,负责执行由 `.gitlab-ci.yml` 定义的任务。它支持多种执行方式(如 Shell、Docker、Kubernetes),可在不同环境中运行作业。本文详细介绍了 GitLab Runner 的基本概念、功能特点及使用方法,重点探讨了流水线缓存(以 Python 项目为例)和构建镜像的应用,特别是在 Kubernetes 环境中的配置与优化。通过合理配置缓存和镜像构建,能够显著提升 CI/CD 流水线的效率和可靠性,助力开发团队实现持续集成与交付的目标。
|
9月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
581 277
|
7月前
|
Kubernetes Shell Windows
【Azure K8S | AKS】在AKS的节点中抓取目标POD的网络包方法分享
在AKS中遇到复杂网络问题时,可通过以下步骤进入特定POD抓取网络包进行分析:1. 使用`kubectl get pods`确认Pod所在Node;2. 通过`kubectl node-shell`登录Node;3. 使用`crictl ps`找到Pod的Container ID;4. 获取PID并使用`nsenter`进入Pod的网络空间;5. 在`/var/tmp`目录下使用`tcpdump`抓包。完成后按Ctrl+C停止抓包。
224 12
|
8月前
|
Kubernetes 持续交付 开发工具
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
239 2
|
7月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
167 0
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
|
8月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
121 1
|
8月前
|
Kubernetes 持续交付 开发工具
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
|
9月前
|
存储 监控 对象存储
ACK容器监控存储全面更新:让您的应用运行更稳定、更透明
介绍升级之后的ACK容器监控体系,包括各大盘界面展示和概要介绍。
|
11月前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
515 60
|
8月前
|
运维 分布式计算 Kubernetes
ACK One多集群Service帮助大批量应用跨集群无缝迁移
ACK One多集群Service可以帮助您,在无需关注服务间的依赖,和最小化迁移风险的前提下,完成跨集群无缝迁移大批量应用。

推荐镜像

更多