K8S 报错笔记--持续更新
一、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 报错笔记--持续更新相关推荐
- PyCharm使用期间出现报错集合 持续更新ing
PyCharm使用期间出现报错集合 持续更新ing 啥时候用PyCharm发现了奇奇怪怪的错误就整理上来 这几天帮同学安装torch的时候出现了一些奇奇怪怪的问题 1.torch始终安装失败 描述一下 ...
- react+typescript报错集锦持续更新
typescript报错集锦 错误:Import sources within a group must be alphabetized.tslint(ordered-imports) 原因:impo ...
- MySQL数据库报错汇总(持续更新中)
报错1:DATA truncated FOR COLUMN 'description' AT ROW 1 错误再现 表中存在null字段 此时,修改表中某字段为主键 解决方法 不允许数据库中出现nul ...
- 重拾CCNA,学习笔记持续更新ing......(4)
重拾CCNA,学习笔记持续更新ing......(4) 路由器作用功能的经典解说(笑)(非原创) 假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大 ...
- 开启SQLServer数据库的CDC报错:无法更新元数据来指示已对数据库 XXX 启用了变更数据捕获
开启SQLServer数据库的CDC时,运行报错: 无法更新元数据来指示已对数据库 XXX 启用了变更数据捕获.执行命令 'SetCDCTracked(Value = 1)' 时失败.返回的错误为 1 ...
- EF更新或者删除的时候报错“存储区更新、插入或删除语句影响到了意外的行数(0)。实体在加载后可能被修改或删除“
ScheduleDown表 主键: ① 字段为MachineNum,类型为String . ②字段ScheduleStart,类型为DateTime. using (MESDB db = new ME ...
- SpringCloud学习笔记,课程源自黑马程序员,笔记持续更新中...
@SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式: 学习内容 1.服务拆分-服务远程调用: 2.搭建eureka服务: 2.1.eureka服务注册-client 2 ...
- JS逆向学习笔记 - 持续更新中
JS逆向学习笔记 寻找深圳爬虫工作,微信:cjh-18888 文章目录 JS逆向学习笔记 一. JS Hook 1. JS HOOK 原理和作用 原理:替换原来的方法. (好像写了句废话) 作用: 可 ...
- 谷粒商城最全报错笔记
P71中 1.30 分钟讲了直接去哪里拷贝前端代码.P74结束再次说不写前端代码了.P83第10.5分钟解决了所有前端代码问题. 22年阿里OSS新用户可以免费试用100G三个月.花钱不用开通.后面2 ...
最新文章
- ThinkPHP框架学习之使用数组进行查询
- php 设置时区_为什么没有 Asia/Beijing 时区?
- java中引用一个文件数据_JAVA-基础-引用数据类型(类)
- javascript12-object04-毕包
- 3D 服务器端以向量计算为主的角色位置的算法
- 原生Aajax 和jQuery Ajax 写法个人总结(简单)
- 手机隔空充电,会有辐射吗?
- NSDictionary NSArray 转中文输出
- java 静态代码块_JAVA静态代码块
- LeetCode 1773. 统计匹配检索规则的物品数量
- C++学习之路 | PTA乙级—— 1042 字符统计 (20 分)(精简)
- 学习android 画板源代码,Android实现画画板案例
- EffectiveJava读书笔记--01继承的使用注意
- 【es】es 的 cat API是如何加载的
- pku1067----取石子游戏(博弈)
- spark++读写mysql_spark读写mysql
- M1到底有多强!这是一份不深不浅的MacBook Air M1测评
- php rsa2 微博,微博登录分析
- Unity3D:HTTP请求模块
- arcos的matlab定义,想用matlab解一个带arccos的方程。可是结果好像没有解析解。求帮助解数值解...