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. vuex bug & vue computed setter

    vuex bug & vue computed setter https://vuejs.org/v2/guide/computed.html#Computed-Setter [Vue war ...

  2. Typescript & React & optional parameters & default parameters

    Typescript & React & optional parameters & default parameters Typescript & optional ...

  3. vue & $router & History API

    vue & $router gotoTemplateManage(e) { e.preventDefault(); this.$router.push({ path: `/operate-to ...

  4. MongoDB的下载、安装与部署

    1.什么是MongoDB? 它是介于关系型数据库和非关系型数据库之间的一种NoSQL数据库,用C++编写,是一款集敏捷性.可伸缩性.扩展性于一身的高性能的面向文档的通用数据库. 2.为什么要用Mong ...

  5. MySQL修改表中字段的字符集

    MySQL修改表中字段的字符集 ALTER TABLE 表名 MODIFY 字段名 要修改的属性: 例:ALTER TABLE `guaduates` MODIFY `studentno` CHAR( ...

  6. HQYJ嵌入式学习笔记——C语言复习day2

    1.计算机的数值表示 数值类型和非数值类型 二进制 0,1 (0b1001) 八进制 0~7   (0146) 十进制 0~9 十六进制 0~f (0x3f) 八进制转二进制-->一位八进制数换 ...

  7. 基于ros2 dashing的建图导航探索

    基于ros2 dashing的建图导航探索 1. 环境准备 安装ros2 dashing, 参考链接: https://index.ros.org/doc/ros2/Installation/Dash ...

  8. 完整的 LDAP + phpLDAPadmin安装部署流程 (ubuntu18.04)

    LDAP 安装部署以及基础使用 因工作需求需要使用ldap管理用户权限,在踩了一系列坑之后,总结了一些流畅的文档,希望可以帮到和曾经的我一样迷茫的人. 基础环境:Ubuntu 18.04 一.安装 r ...

  9. 看完我的笔记不懂也会懂----git

    Git学习笔记 - 什么是Git - 首次使用Git - DOS常用命令 - Git常用命令 - 关于HEAD - 版本回退 - 工作区.暂存区与版本库 - git追踪的是修改而非文件本身 - 撤销修 ...

  10. 清晰图解深度分析HTTPS原理

    前言 很高兴遇见你~ Https现在基本已经覆盖所有的http请求了,作为一个伟大的发明,保障了我们的通信安全.在Android中对于HTTPS其实感知不多,因为这些内容都有成熟的框架帮我们完成了,例 ...