前言

按照笔者的教程,大家应该都能够比较顺畅的完成k8s集群的部署,不过由于环境、配置以及对Linux、k8s的不了解会导致很多问题、异常和故障,这里笔者分享一些处理技巧和思路,以及部分常见的问题,以供大家参考和学习。

总之,出现问题不要慌,先根据异常、故障症状初步推敲问题的所在,然后结合相关命令、工具、日志推敲出具体问题。其中,具体的日志内容是关键,请务必获得相关异常的详细日志进行诊断,而不是被表象所迷惑,或者根据表象问题(比如“XXXX”pod崩溃了)去猜、搜索或者请教他人。总体上,思路如下图所示:

如果问题实在无法解决或者无法确定是哪里的配置以及操作不当引起的,可以试着重置节点以及重置集群。

如果出现问题,我们应该怎么去分析和解决问题呢?下面,笔者将分享一些思路和经验:


目录

健康状态检查——初诊

  • 组件、插件健康状态检查

  • Kubernetes 组件异常分析

  • 节点健康状态检查

  • Pod健康状态检查


健康状态检查——初诊

首先,我们需要根据表象进行初步诊断,以便沿着线索按图索骥。

组件、插件健康状态检查

使用命令:

kubectl get componentstatus

kubectl get cs

健康情况下如下图所示:

Kubernetes组件(插件)部分默认基于systemd运行,比如kubelet、docker等,我们需要使用以下命令确保其处于活动(active)状态:

systemctl status kubelet docker

而大部分的Kubernetes的组件则运行在命名空间为“kube-system”的静态Pod 之中(参见“kubeadm init”一节),我们可以使用以下命令来查看这些Pod 的状态:

kubectl get pods -o wide -n kube-system

Kubernetes 组件异常分析

k8s组件主要分为Master组件和节点组件,Master组件对集群做出全局性决策(比如调度), 以及检测和响应集群事件。如果Master组件出现问题,可能会导致集群不可访问,Kubernetes API 访问出错,各种控制器无法工作等等。而节点组件在每个节点上运行,维护运行的Pod并提供 Kubernetes运行时环境。如果节点组件出现问题,可能会导致该节点异常并且该节点Pod无法正常运行和结束。

因此,根据不同的组件,可能会出现不同的异常。

kube-apiserver对外暴露了Kubernetes API,如果kube-apiserver出现异常可能会导致:

  • 集群无法访问,无法注册新的节点

  • 资源(Deployment、Service等)无法创建、更新和删除

  • 现有的不依赖Kubernetes API的pods和services可以继续正常工作

etcd用于Kubernetes的后端存储,所有的集群数据都存在这里。保持稳定的etcd集群对于Kubernetes集群的稳定性至关重要。因此,我们需要在专用计算机或隔离环境上运行etcd集群以确保资源需求。当etcd出现异常时可能会导致:

  • kube-apiserver无法读写集群状态,apiserver无法启动

  • Kubernetes API访问出错

  • kubectl操作异常

  • kubelet无法访问apiserver,仅能继续运行已有的Pod

kube-controller-manager和kube-scheduler分别用于控制器管理和Pod 的调度,如果他们出现问题,则可能导致:

  • 相关控制器无法工作

  • 资源(Deployment、Service等)无法正常工作

  • 无法注册新的节点

  • Pod无法调度,一直处于Pending状态

kubelet是主要的节点代理,如果节点宕机(VM关机)或者kubelet出现异常(比如无法启动),那么可能会导致:

  • 该节点上的Pod无法正常运行,如果节点关机,则当前节点上所有Pod都将停止运行

  • 已运行的Pod无法伸缩,也无法正常终止

  • 无法启动新的Pod

  • 节点会标识为不健康状态

  • 副本控制器会在其它的节点上启动新的Pod

  • Kubelet有可能会删掉当前运行的Pod

CoreDNS(在1.11以及以上版本的Kubernetes中,CoreDNS是默认的DNS服务器)是k8s集群默认的DNS服务器,如果其出现问题则可能导致:

  • 无法注册新的节点

  • 集群网络出现问题

  • Pod无法解析域名

kube-proxy是Kubernetes在每个节点上运行网络代理。如果它出现了异常,则可能导致:

  • 该节点Pod通信异常

节点健康状态检

我们可以使用以下命令来检查节点状态:

kubectl get nodes

其中,“Ready”表示节点已就绪,为正常状态,反之则该节点出现异常。节点出现问题,则Pod无法无法调度到该节点。

Pod健康状态检查

如果是集群应用出现异常,我们需要检查相关Pod是否运行正常,可以使用以下命令:

kubectl get pods -o wide

如果存在命名空间,需要使用-n参数指定命名空间。如上图所示,Pod为“Running”状态才是正常。

如果Pod运行正常,但是又无法访问(集群内部、外部),这时,我们需要检查Service是否正常,可使用以下命令:

kubectl get svc -o wide

往期内容链接

Docker+ Kubernetes已成为云计算的主流(二十五)

容器化之后如何节省云端成本?(二十六)

了解Kubernetes主体架构(二十七)

使用Minikube部署本地Kubernetes集群(二十八)

使用kubectl管理k8s集群(二十九)

使用Kubeadm创建k8s集群之部署规划(三十)

使用Kubeadm创建k8s集群之节点部署(三十一)

转载于:https://www.cnblogs.com/codelove/p/11313359.html

集群故障处理之处理思路以及健康状态检查(三十二)相关推荐

  1. 集群故障处理之处理思路以及健康状态检查(三十三)

    前言 按照笔者的教程,大家应该都能够比较顺畅的完成k8s集群的部署,不过由于环境.配置以及对Linux.k8s的不了解会导致很多问题.异常和故障,这里笔者分享一些处理技巧和思路,以及部分常见的问题,以 ...

  2. 集群故障处理之处理思路以及听诊三板斧(三十四)

    前言 本篇主要分享一些处理故障和问题绝招,比如听诊三板斧: 1)查看日志 2)查看资源详情和事件 3)查看资源配置(YAML) 如果还是不太好分析,那就祭出神器--kubectl-debug. 最后, ...

  3. Kubernetes集群服务发现之Ingress资源详解(三十)

    Ingress-nginx资源介绍及详细配置 文章目录 Ingress-nginx资源介绍及详细配置 1.Ingress原理总结 2.部署Ingress环境 2.1.部署Ingress 2.2.准备两 ...

  4. LVS均衡负载(三) LVS后端服务健康状态检查

    LVS负载均衡(三) LVS后端服务健康状态检查 上一篇分别配置NAT和DR的应用,下面将利用前面配置好的DR工作方式集群来实现LVS后端服务健康状态检查. 1.为什么需要进行LVS后端服务健康状态检 ...

  5. 32.深度解密三十二:详解影响QQ群整体排名的那些秘密

    网络营销推广技术.技巧深度解密(三十二)指南: 1.本文档适合零基础以及互联网营销推广人员,主要讲解营销QQ群排名的一些问题. 2.原创版权文档,任何抄袭或者全部.部分模仿都是侵权行为. 3.敬畏法律 ...

  6. docker容器的health健康状态检查

    Docker 原生健康检查能力 自 1.12 版本之后,Docker 引入了原生的健康检查实现.对于容器而言,最简单的健康检查是进程级的健康检查,即检验进程是否存活.Docker Daemon会自动监 ...

  7. 【博客473】Docker的health健康状态检查

    Docker的health 健康状态检查 场景: Docker 引入了原生的健康检查实现.对于容器而言,最简单的健康检查是进程级的健康检查,即检验进程是否存活.Docker Daemon 会自动监控容 ...

  8. 大规模集群故障处理,能抗住这3个灵魂拷问算你赢

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 我相信每一个集群管理员,在长期管理多个不同体量及应用场景的 ...

  9. 使用kubeadm安装k8s集群故障处理三则

    最近在作安装k8s集群,测试了几种方法,最终觉得用kubeadm应该最规范. 限于公司特别的网络情况,其安装比网上不能访问google的情况还要艰难. 慢慢积累经验吧. 今天遇到的三则故障记下来作参考 ...

最新文章

  1. feign调用走不走网关全局拦截_feign服务端出异常客户端处理的方法
  2. 阿里巴巴 Service Mesh 落地的架构与挑战
  3. 矩阵分析与多元统计 线性空间与线性变换2
  4. SSRS:使用SQL2008教程学习Reporting Services之数据库AdventureWorks2008问题_学习笔记1
  5. spring + mybatis 注解 @Transactional失效
  6. 存储管理的页面置换算法
  7. Docker核心技术之联合文件系统
  8. 3D中国跳棋 —— 记与子禾童鞋的结对编程(附网站地址及完整源码)
  9. pythonrequests发送数据_使用Python爬虫库requests发送表单数据和JSON数据
  10. 王鹏鹏计算机专业,北京工业大学2014年度授予全日制专业学位硕士人员名单
  11. 群晖挂载阿里网盘通过 cloud sync 实现加密备份
  12. WordPress 安装时出现的问题
  13. 如何编写android ANE
  14. mysql安装时损坏的图像_损坏的图像,详细教您提示损坏的图像该怎么解决
  15. 2022.10.10 英语背诵
  16. 非全日制研究生计算机学校,计算机非全日制硕士有哪些学校?
  17. 计算机语言与智能家居的关系,来谈谈“智能家居”与“家庭自动化”的区别
  18. 飞塔防火墙固定IP改动态IP网络设置
  19. Vue 2 即将成为过去
  20. 牛客网 2018年全国多校算法寒假训练营练习比赛(第二场) H.了断局-递推

热门文章

  1. linux arm9开发环境,ARM9开发板Qt环境的搭建
  2. ubuntu 删除opencv4_ubuntu16.04 卸载重装Opencv
  3. c++ qt5范例开发大全_237页建设工程监理内业资料全套范例,附百份案例表格,快拿走...
  4. 各种数字字体样式_来自中世纪建筑 文化的字体——————哥特式
  5. php 怎么验证邮箱验证码,PHP 验证邮箱是否有效 - 沃森博客
  6. 华为魔术2手机拆机图解_荣耀Magic2手机内部做工如何?荣耀Magic2手机拆机
  7. Cuiwei Li / Detection of ECG characteristic points using wavelet transforms
  8. java认证考试题库看不懂_一道JAVA认证考试试题,有点想不通,各位看看...
  9. 【李宏毅机器学习】03:误差Error
  10. windows下openresty环境配置