Kubernetes中Deployment部署故障排除

字符型思维导图

  1. 排查pod状态(带标签):kubectl get pods,是否有等待处理的pod?

    1. 是?kubectl describe pod <pod-name>,集群资源是否已经爆满?

      1. 是?增加更多的磁盘资源
      2. 否?您是否达到ResourceQuota限制?
        1. 是?放宽ResourceQuota限制,修改pod的规格。
        2. 否?是否挂载了PersistentVolumeClaim(PVC)。
          1. 是?修复PersistentVolumeClaim(PVC)存储
          2. 否?kubectl get pods -o wide ,Pod是否已分配给节点
            1. 是?Kubelet可能存在问题,排查kubelet日志和状态
            2. 否?Scheduler可能存储问题,排查Scheduler进程状态和日志
    2. 否?Pod正在Running吗?
      1. 是?Pod准备好了吗?

        1. 是?kubectl port-forward <pod-name> 8080:<pod-port>,是否可以访问该应用程序吗?

          1. 是?Pod是运行正常的。可以检查一下Service应用,kubectl describe service <service-name>,检查是否可以看到Service对应的endpoints列表?

            1. 是?kubectl port-forward service/<service-name> 8080:<service-port>,现在可以访问该应用程序吗?

              1. 是?Service服务运行正常。检查kubectl describe ingress <ingress-name>,检查可以看到后端列表(backends)吗?

                1. 是?检查kubectl port-forward <ingress-pod-name> 8080:<ingress-port>,重新测试是否可以访问该应用程序吗?

                  1. 是?Ingress正常运行。该应用程序应该正在运行。 您可以尝试从公共互联网访问它看看?

                    1. 是?END检查结束.
                    2. 否?问题可能出在基础架构以及如何暴露集群端口上面(expose)
                  2. 否?这个问题特定于Ingress控制器。查阅相关Ingress文档
                2. 否?检查serviceName和servicePort是否与Service匹配?
                  1. 是?这个问题特定于Ingress控制器。查阅相关Ingress文档
                  2. 否?修改入口serviceName和servicePort问题。
              2. 否?服务上的targetPort是否与Pod中的containerPort相匹配?
                1. 是?问题可能出在Kube Proxy上。
                2. 否?修改Service服务targetPort和containerPort相同
            2. 否?检查规格选择器是否与正确的Pod标签匹配?
              1. 是?Kubelet存在问题,检查对应的进程日志。
              2. 否?修改为正确的规格选择器,使它与Pod标签匹配
          2. 否?检查容器暴露的端口是否正确并且正在监听0.0.0.0?
            1. 是?未知状态
            2. 否?检查这个容器应用,并且更正容器内端口
        2. 否?kubectl describe pod <pod-name>,检查一下准备就绪探针是否失败?
          1. 是?准备就绪探针是否失败?
          2. 否?未知错误
      2. 否?kubectl logs <pod-name>,可以查看该应用程序的日志详情
        1. 是?解决应用程序日志中的问题
        2. 否?看下是容器生存周期时间设置太短了吗?
          1. 是?kubectl logs <pod-name> --previous,输出pod中曾经运行过,但目前已终止的容器的日志,判断程序情况
          2. 否?kubectl describe pod <pod-name>,Pod状态为ImagePullBackOff(镜像拉取失败)状态吗?
            1. 是?可以先看下拉取镜像的名称是否正确?

              1. 是?看下镜像的标签是否正确?
              2. 否?修改为正确镜像的名称
                1. 是?看下是否从私有镜像仓库里面拉取镜像?
                2. 否?修改为正确的标签
                  1. 是?配置特定的私有仓库秘钥拉取私有仓库镜像
                  2. 否?问题可能出在CRI(容器运行时接口)或Kubelet程序
            2. 否?Pod状态为CrashLoopBackOff(崩溃循环状态)吗?
              1. 是?是否检查了日志并修复了崩溃的容器应用程序?

                1. 是?是否忘记了Dockerfile中的CMD指令?

                  1. 是?修改Dockerfile文件
                  2. 否?观察下Pod是否经常重启? 在Running和CrashLoopBackoff之间循环?
                    1. 是?修改一下livenessprobe(存活探针)
                    2. 否?未知状态
                2. 否?修复崩溃的应用
              2. 否?Pod状态为RunContainerError(运行容器错误)吗?
                1. 是?这个问题可能和挂载volume(卷)有关
                2. 否?查询下是否容器溢出问题

流程性思维导图

下图可帮助你调试Kubernetes Deployment。点击此处(https://kuboard.cn/statics/learning/troubleshooting-kubernetes.pdf)获取该图的PDF版本

Kubernetes中Deployment部署故障排除的更多相关文章

  1. # k8s-jenkins在kubernetes中持续部署

    k8s-jenkins在kubernetes中持续部署 1. k8s-jenkins在kubernetes中持续部署 Kubernetes Continuous Deploy插件:用于将资源配置部署到 ...

  2. 利用Ring Buffer在SQL Server 2008中进行连接故障排除

    原文:利用Ring Buffer在SQL Server 2008中进行连接故障排除 出自:http://blogs.msdn.com/b/apgcdsd/archive/2011/11/21/ring ...

  3. 教你在Kubernetes中快速部署ES集群

    摘要:ES集群是进行大数据存储和分析,快速检索的利器,本文简述了ES的集群架构,并提供了在Kubernetes中快速部署ES集群的样例:对ES集群的监控运维工具进行了介绍,并提供了部分问题定位经验,最 ...

  4. 【转】kubernetes 中 deployment 支持哪些键值

    这个比较全,可以参考 ================= https://www.addops.cn/post/kubernetes-deployment-fileds.html ========== ...

  5. Sentry实时应用错误跟踪系统在Kubernetes中私有化部署

    应用错误跟踪系统:对软件系统运行过程中产生的错误日志进行收集从而实现监控告警. 虽然软件错误❌是不可避免的,但是可以降低错误数. 提高对错误的治理能力能让错误带来的损失降到最低 ​

  6. Kubernetes Deployment故障排除图解指南

     个人K8s还在学习中,相关博客还没有写,准备学第二遍再开始学,发现这篇文章挺好,先转载一下. 原创: 白明的赞赏账户 下面是一个示意图,可帮助你调试Kubernetes Deployment(你可以 ...

  7. 分步骤讲解Deployment故障排除

    背景假设 当你希望在Kubernetes中部署应用程序时,你通常会定义三个组件: 一个Deployment - 这是一份用于创建你的应用程序的Pod副本的"食谱": 一个Servi ...

  8. 在Kubernetes中部署GlusterFS+Heketi

    目录 简介 Gluster-Kubernetes 部署 环境准备 下载相关文件 部署glusterfs 部署heketi server端 配置heketi client 简介 在上一篇<独立部署 ...

  9. 如何将云原生工作负载映射到 Kubernetes 中的控制器

    作者:Janakiram MSV 译者:殷龙飞 原文地址:https://thenewstack.io/how-to-map-cloud-native-workloads-to-kubernetes- ...

随机推荐

  1. nest cli bug

    nest cli bug Error: Collection "@nestjs/schematics" cannot be resolved. Error: Collection ...

  2. vuex & redux

    vuex & redux https://vuex.vuejs.org/ https://github.com/xgqfrms/VAIO/ https://scrimba.com/playli ...

  3. js 实现简单的parseInt和parseFloat

    function myParseInt(str: string): number { let result = NaN; for (let i = 0; i < str.length; i++) ...

  4. PM2 in depth

    PM2 in depth ecosystem.config.js module.exports = { apps : [{ name: "app", script: ". ...

  5. 新手如何通过SPC算力生态获得多重收益?

    DeFi市场在去年的一波又一波热潮之后,在今年余温有些褪去.而资本市场也将目光从DeFi市场中转移开来,他们将目光对准了新的市场,即算力市场.算力,其实从区块链技术在大范围普及以来,就是一个常见的话题 ...

  6. 2. Vue语法--插值操作&动态绑定属性 详解

    目录 1. 设置vue模板 2. vue语法--插值操作 3. 动态绑定属性--v-bind 一. 设置vue模板 我们经常新建一个vue项目的时候, 会写如下的一段代码 <!DOCTYPE h ...

  7. 02.描述统计 (descriptive statistics)

    1.数据的可靠性和有效性 2.利用图表对数据进行可视化 2.1分类变量的可视化 2.11无序分类变量 2.12有序分类变量的可视化 2.1数值变量的可视化 数据的分布

  8. (1)MySQL进阶篇在linux环境下安装

    1.概述 对于mysql二进制安装,优点是可以安装到任何路径下,灵活性好,一台服务器可以安装多个mysql.缺点是已经编译过,性能不如源码编译得好,不能灵活定制编译参数.如果用户即不想安装最简单却不够 ...

  9. Redis Lua 脚本使用

    本文转载自Redis Lua 脚本使用 Lua 简介 Lua语言提供了如下几种数据类型:booleans(布尔).numbers(数值).strings(字符串).tables(表格). 下面是一些 ...

  10. 开工大吉:TcaplusDB将持续为您提供可靠的数据服务

    开工大吉 新的一年 新的开始 我们也带着新的心意 向您奔赴而来    在此,TcaplusDB祝广大客户朋友,开工大吉,2021,我们将一如既往地守护您的数据,继续做您最坚实的后盾.    作为专为游 ...