一、ContainerCreating

这种报错其实不算报错,容器正在创建中,通常是我们配置问题导致的,

1、docker服务问题

有一天起来有个应用说容器创建不出来,卡在ContainerCreateing状态

按照习惯,我们去describe去看事件,但并没发现有什么报错信息,容器本身还创建出来了

并且通过exec 是可以登陆的,当然logs日志看不了,尝试重启node节点上的kube-proxy、kubelet后

依然是不可用的,重启docker服务后创建成功就绪, 原因未查明( ̄﹃ ̄)

2、 K8挂载远程存储问题

这种情况通常是远程nfs、gfs等存储问题导致的,这个我们可以还原一下

举个栗子

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginxname: nginxnamespace: default
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: nginximagePullPolicy: Alwaysname: nginxvolumeMounts:- mountPath: /tmp/name: wwwvolumes:- name: wwwnfs:path: /nfs/web/datereadOnly: trueserver: 192.168.1.21

这里的nfs主机并不存在,我们直接去部署这个yaml,他会一直卡在创建中

查看报错事件

类似 mount failed: exit status 32的报错很多,比如

1、nfs  挂载报错mount failed: exit status 32 是存储nfs不存在2、 nfs 挂载报错mount failed: exit status 1   记不清了,反正在nfs的问题,试试挂载目录或者权限吧3、 gfs  挂载报错mount failed: exit status 32  是指 node节点上没有安装 gfs的客户端4、 gfs 挂载报错mount failed: exit status 1  可能是我们没有在gfs服务端创建要挂载的卷

上面的不一定全对,提供一个思路,存储之类的报错通常都可以从pod的事件信息中得到的

3、configmap 问题

这个不是很常见,不过也出现过,在搞paas平台的时候,我们写应用通常要传入一些paas的变量,这个通过挂载configmap来获取,但因为奇奇怪怪的原因没挂上,就会出现了,或者简单点就是cm的名称写错了之类的

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginxname: nginxnamespace: default
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: nginximagePullPolicy: Alwaysname: nginxvolumeMounts:- mountPath: /tmp/name: wwwvolumes:- name: wwwconfigMap: name: nginx-config

返回

Events:Type     Reason       Age                  From               Message----     ------       ----                 ----               -------Normal   Scheduled    2m21s                default-scheduler  Successfully assigned default/nginx-59d6d76f78-2kh7n to vm-16-16-centosWarning  FailedMount  18s                  kubelet            Unable to attach or mount volumes: unmounted volumes=[www], unattached volumes=[www kube-api-access-hvk9s]: timed out waiting for the conditionWarning  FailedMount  13s (x9 over 2m21s)  kubelet            MountVolume.SetUp failed for volume "www" : configmap "nginx-config" not found

解决方法

每个人的环境不同解决方法也不一样,如果是自己写错了名称,改一下就OK如果是别人开发的环境,那就只能找开发来看了

这部分能想到的就这些,其他有的再补充

二、ErrImagePull   或者    ImagePullBackOff

1、仓库镜像问题

这种情况一般是镜像推送的流程有问题,我们做了ci/cd,但是在推送镜像的时候刚好赶上镜像仓库在清理镜像,那么就会有部分的仓库同步不到镜像,这样可能导致我们拉取镜像失败

,简单来说就是仓库没镜像

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginxname: nginxnamespace: default
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: nginx:1111111111      #不存在的镜像imagePullPolicy: Alwaysname: nginxvolumeMounts:- mountPath: /tmp/name: wwwvolumes:- name: wwwconfigMap: name: nginx-config

2、startContainer

这个报错好久没看到了,我隐约记得是在更新二进制的docker更新崩了后出现的

 解决方法

把docker和container 的文件清理掉重新安装即可
rm -rf /var/run/containerd/*
rm -rf /var/lib/docker/*

三、Pending

pending状态其实涉及的方向有很多的这里先简单列举一下

1、 K8调度组件 scheduler 组件异常,  集群组件挂了2、 sa 没有权限或者不存在3、 用户指定的匹配节点策略有问题  (nodeselector  容忍、污点等等调度策略)通常是应用用户标签写错了4、 节点没有足够的资源满足调度  //测试环境通常资源较小,用户软限制太大无法调度5、pv 卷问题

隐约记得还有几项的,但是想不起来了,想起来在加

四、CrashLoopBackOff  或者 ERROR

这种涉及到的方向也不少,这种情况我们大多数的时候都可以通过容器日志、容器服务日志得到答案

1、 容器服务配置有问题,导致容器服务的守护进程启动直接挂掉了,检查配置2、容器健康检查探针检查端口不正常会杀死容器重启,3、容器有什么启动后的操作,操作到一般发现跑不下去了,比如容器服务启动脚本里面有//ftp 链接//域名无法解析//远程主机端口无法通讯等等4、容器资源限制太小,内存软硬限制一般是1:1的  然后内存超出我们的硬限制后oom 导致容器重启报错

五、Terminating或Unknown

这种资源一般情况下都是 大批量node节点掉线导致的,比如之前我们集群网络波动,所有node需要重启组件  就能看到大量的 这种状态的pod, 或者说我们在删除某个pod的时候node节点发生了异常导致 出现   1/1 Terminating  的情况,这种直接强制删除pod就行

六、UnexpectedAdmissionError

说白了,就是node节点上磁盘满了,我们node写不进去日志了

你可以发现大量这种的pod都是来自于同一台node主机,你登陆node主机去把文件系统清理一下,然后批量删除掉这些pod

kubectl get pods -A | grep  UnexpectedAdmissionError | awk '{print("kubectl delete pod ", $2, " -n ", $1)}' | /bin/bash

七,一个误以为是K8问题的linux问题

 我们K8集群环境有一天发现有个节点掉了(notready)登陆主机发现df -h命令阻塞无法使用

猜测为远程挂载存储异常,但主机数量非常多,不清楚是那里的存储导致的下面是解决方法

 还原场景

//部署nfs服务
echo "/home/nfs  *(rw,async,no_root_squash)" >> /etc/exports//启动nfs
systemctl start nfs//登陆客户端创建目录
mkdir -p /tmp/test1///挂载nfs
mount -t nfs 10.0.16.16:/home/nfs /tmp/test1///查看
df -h | grep /tmp/test1

这个前提是我们df -h 能用的情况下,下面我们演示df -h 不可用的情况怎么查询

//停止nfs服务
systemctl stop nfs//查看df命令
df -h

可以看到nfs挂掉后df -h已经阻塞不可用了,下面我们通过mount -l命令去查询挂载信息

mount -l | grep nfs

 通过mount 命令我们得知nfs地址是10.0.16.16,登陆nfs主机重启服务恢复

番外

1、docker无法启动

突然有几个环境node掉了,查看node组件,docker也起不来了,日志报错如下

Failed to start containerd: timeout waiting for containerd to start

这个是节点的containerd服务卡死了,第一次碰到后重启node节点恢复了,但过几天又开始报这个,排查时发现有个周期脚本会定期重置node节点所有组件,包括挂载设备目录,有一个fuser -ck 挂载目录的操作,通过ps -ef | grep docker 发现有很多fuser -ck 僵死的进程,手动将他们kill -9 掉,发现dockerd服务弹出来了,但依旧无法启动docker服务,将docker-runc进程也kill掉后,重新挂载docker目录设备/var/lib/docker,发现docker可以正常重启了,未查明原因,随后补充

ps aux|grep docker|grep -v grep |awk '{print $2}'|xargs kill -9
systemctl start docker#主要是杀掉"docker-runc init"  进程

2、node节点状态反复横跳

有一天下午,集群突然大量开始进入not ready状态,一下就跳了几十台,但是在几分钟内就恢复了,还没郁闷又开始跳了,通过沟通得知有个应用在部署了一个ds的控制器,在每个node节点都启动了一个pod,但是配置存在问题pod在反复重启,刚开始都没觉得pod会影响到集群状态,之前重启几万次的pod不是没有,各种排查etcd、apiserver、kubelet日志反反复复了出来看,没看出个所以然,node节点的kubelet也没重启,突然想起来去年有个朋友说他们环境用deploy的某种方式替代了ds,说是ds有个什么bug导致集群崩掉,让应用先吧部署的ds删除了,但依旧存在问题,偶然间发现K8S管理的pod依旧被清理了,但是宿主机上docker依然能看到那些ds的容器UP状态,手动杀掉容器卡死,先杀进程在杀容器

ps -ef | grep docker | 容器id
kill  piddocker rm 容器id

猜想可能是大量的ds报错导致apiserver压力较大导致的,很早之前在其他环境也碰到过类似的,不过都是单个node反复重启,会报个PLEG的错误,根据提示把对应容器给干掉就能恢复,后续观察补充

K8S 报错笔记--持续更新相关推荐

  1. PyCharm使用期间出现报错集合 持续更新ing

    PyCharm使用期间出现报错集合 持续更新ing 啥时候用PyCharm发现了奇奇怪怪的错误就整理上来 这几天帮同学安装torch的时候出现了一些奇奇怪怪的问题 1.torch始终安装失败 描述一下 ...

  2. react+typescript报错集锦持续更新

    typescript报错集锦 错误:Import sources within a group must be alphabetized.tslint(ordered-imports) 原因:impo ...

  3. MySQL数据库报错汇总(持续更新中)

    报错1:DATA truncated FOR COLUMN 'description' AT ROW 1 错误再现 表中存在null字段 此时,修改表中某字段为主键 解决方法 不允许数据库中出现nul ...

  4. 重拾CCNA,学习笔记持续更新ing......(4)

    重拾CCNA,学习笔记持续更新ing......(4) 路由器作用功能的经典解说(笑)(非原创) 假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大 ...

  5. 开启SQLServer数据库的CDC报错:无法更新元数据来指示已对数据库 XXX 启用了变更数据捕获

    开启SQLServer数据库的CDC时,运行报错: 无法更新元数据来指示已对数据库 XXX 启用了变更数据捕获.执行命令 'SetCDCTracked(Value = 1)' 时失败.返回的错误为 1 ...

  6. EF更新或者删除的时候报错“存储区更新、插入或删除语句影响到了意外的行数(0)。实体在加载后可能被修改或删除“

    ScheduleDown表 主键: ① 字段为MachineNum,类型为String . ②字段ScheduleStart,类型为DateTime. using (MESDB db = new ME ...

  7. SpringCloud学习笔记,课程源自黑马程序员,笔记持续更新中...

    @SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式: 学习内容 1.服务拆分-服务远程调用: 2.搭建eureka服务: 2.1.eureka服务注册-client 2 ...

  8. JS逆向学习笔记 - 持续更新中

    JS逆向学习笔记 寻找深圳爬虫工作,微信:cjh-18888 文章目录 JS逆向学习笔记 一. JS Hook 1. JS HOOK 原理和作用 原理:替换原来的方法. (好像写了句废话) 作用: 可 ...

  9. 谷粒商城最全报错笔记

    P71中 1.30 分钟讲了直接去哪里拷贝前端代码.P74结束再次说不写前端代码了.P83第10.5分钟解决了所有前端代码问题. 22年阿里OSS新用户可以免费试用100G三个月.花钱不用开通.后面2 ...

最新文章

  1. ThinkPHP框架学习之使用数组进行查询
  2. php 设置时区_为什么没有 Asia/Beijing 时区?
  3. java中引用一个文件数据_JAVA-基础-引用数据类型(类)
  4. javascript12-object04-毕包
  5. 3D 服务器端以向量计算为主的角色位置的算法
  6. 原生Aajax 和jQuery Ajax 写法个人总结(简单)
  7. 手机隔空充电,会有辐射吗?
  8. NSDictionary NSArray 转中文输出
  9. java 静态代码块_JAVA静态代码块
  10. LeetCode 1773. 统计匹配检索规则的物品数量
  11. C++学习之路 | PTA乙级—— 1042 字符统计 (20 分)(精简)
  12. 学习android 画板源代码,Android实现画画板案例
  13. EffectiveJava读书笔记--01继承的使用注意
  14. 【es】es 的 cat API是如何加载的
  15. pku1067----取石子游戏(博弈)
  16. spark++读写mysql_spark读写mysql
  17. M1到底有多强!这是一份不深不浅的MacBook Air M1测评
  18. php rsa2 微博,微博登录分析
  19. Unity3D:HTTP请求模块
  20. arcos的matlab定义,想用matlab解一个带arccos的方程。可是结果好像没有解析解。求帮助解数值解...

热门文章

  1. ajax防止表单重复提交
  2. 机器学习的可解释性(总结)
  3. MySQL之CentOS安装MySQL
  4. emacs org初学者指南
  5. ctf从零开始学 0x1:Windows下的二进制安全学习路线
  6. STM32F411核心板固件库开发(一) GPIO基本配置
  7. Linux:Centos7升级内核
  8. 2022-2028全球与中国嵌入式计算机市场现状及未来发展趋势
  9. ES 与关系型数据库的对比
  10. C语言结构体typedef struct详解