【问题小排查】针对containerd V1.4.3拉取镜像的问题
问题描述
在 containerd 运行时的 kubernetes 线上环境中,出现了镜像无法下载的情况,具体报错如下:
|
|
containerd 的日志中也有相关日志:
|
|
尝试复现
分析环境信息:
- container v1.4.3 运行时。
- 基于 1.10 版本的 docker 制作的镜像(比如 dockerhub 镜像仓库中的 redis:2.8.23)。
然后根据以上版本信息构造相同环境,通过如下命令拉取镜像:
|
|
问题复现,基本确认跟 containerd 版本与打包镜像的 docker 版本有关。
【问题小排查】Pod状态一直Terminating
Need to kill Pod
$ kubectl describe pod/apigateway-6dc48bf8b6-clcwk -n cn-staging
Normal Killing 39s (x735 over 15h) kubelet, 10.179.80.31 Killing container with id docker://apigateway:Need to kill Pod
可能是磁盘满了,无法创建和删除 pod
处理建议是参考Kubernetes 最佳实践:处理容器数据磁盘被写满
【问题小排查】排查 CLOSE_WAIT 堆积
TCP 连接的 CLOSE_WAIT 状态,正常情况下是短暂的,如果出现堆积,一般说明应用有问题。
CLOSE_WAIT 堆积的危害
每个CLOSE_WAIT
连接会占据一个文件描述,堆积大量的CLOSE_WAIT
可能造成文件描述符不够用,导致建连或打开文件失败,报错too many open files
:
|
|
如何判断?
检查系统CLOSE_WAIT
连接数:
|
|
检查指定进程CLOSE_WAIT
连接数:
|
|
为什么会产生大量 CLOSE_WAIT?
我们看下 TCP 四次挥手过程:
【问题小排查】Service无法解析
检查kube-dns或CoreDNS服务是否正常
- kubelet 启动参数 –cluster-dns 可以看到 dns 服务的 cluster ip:
|
|
- 找到 dns 的 service:
|
|
- 看是否存在 endpoint:
|
|
- 检查 endpoint 的 对应 pod 是否正常:
|
|
【问题小排查】关于怎么查IO高负载
系统如果出现 IO WAIT 高,说明 IO 设备的速度跟不上 CPU 的处理速度,CPU 需要在那里干等, 这里的等待实际也占用了 CPU 时间,导致系统负载升高,可能就会影响业务进程的处理速度,导致业务超时。
如何判断 ?
使用top
命令看下当前负载:
|
|
%wa
(wait) 表示 IO WAIT 的 cpu 占用,默认看到的是所有核的平均值,要看每个核的%wa
值需要按下 “1”:
【问题小排查】Linux任务计划crontab不执行的问题排查
朋友弄了一个小项目,要我帮忙做下 Linux 系统运维,上线一段时间后,发现项目偶尔会挂掉导致服务不可用。 开发朋友一时之间也没空去研究项目奔溃的根因,只好由我这个运维先写一个项目进程自拉起脚本, 通过 Linux 任务计划每分钟检查一下进程是否存在来避免项目挂了没人管的情况。
自拉起脚本很简单,随便写几行就搞定了:
|
|
然后丢到 crontab,1 分钟执行一次:
|
|
-_-不过进程还是挂了