FailedCreatePodSandBox
- 错误
Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:402: getting the final child's pid from pipe caused: EOF: unknown
- 处理
清理 cache
|
|
- 原因
内存碎片过多
calico-node 不停重启 increase max user
- 错误
runtime: failed to create new OS thread (have 11 already; errno=11),runtime: may need to increase max user processes (ulimit -u)
- 处理
增加 ulimit 限制额度
|
|
- 原因
用户进程数耗尽
calico-node BIRD is not ready
- 错误
Readiness probe failed: calico/node is not ready: BIRD is not ready: Error querying BIRD: unable to connect to BIRDv4 socket: dial unix /var/run/calico/bird.ctl: connect: connection refused
- 处理
执行 ifconfig
找到当前主机 IP 绑定的网卡,例如 ens192
。
kubectl -n kube-system edit ds calico-node
将
|
|
改为
|
|
使得 interface 值能正则匹配上 ens192
即可。
- 原因
Calico 没有自动识别到正确的网卡。
cgroup 内存泄露问题 cannot allocate memory
- 错误
mkdir /sys/fs/cgroup/memory/kubepods/burstable/pod7a1e89bd-b85e-46c6-9674-bbfd3ead02d1: cannot allocate memory
如果有 fork
相关字样,可能是 PID 耗尽。
- 临时处理
清理 cache
|
|
- 永久处理
- 修改
/etc/default/grub
GRUB_CMDLINE_LINUX
加上了 cgroup.memory=nokmem
- 生成配置
/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg
- 重启机器
reboot
- 原因
cgroup 内存泄露
kubectl 404 page not found
- 错误
执行 kubectl exec
时,报错 error: unable to upgrade connection: 404 page not found
- 处理
在 kubelet 启动参数中添加当前节点的 IP,Environment="KUBELET_EXTRA_ARGS=--node-ip=x.x.x.x"
- 原因
安装工具未能准确识别主机 IP
容器内系统调用出错、没权限
- 错误
Problem executing scripts
Post-Invoke
Sub-process returned an error code
没权限提示
- 处理
在运行时,添加参数 --security-opt seccomp=unconfined
禁用 seccomp
- 原因
内核中的 Seccomp 安全模块,限制了容器对主机的系统调用能力。
NodePort 服务不能通过 localhost 访问
- 错误
NodePort 暴露的服务,不能通过 localhost:port 访问,只能通过主机的 ip:port 访问。
- 处理
检测回环转发参数
|
|
临时生效
|
|
永久生效
|
|
- 原因
ipvs 模式默认关闭了该转发路径
创建 Pod 失败 fork/exec /usr/bin/runc
- 错误
|
|
- 处理
查看 PID 限制
|
|
查看当前用户使用
|
|
永久调大 PID 限制
echo "kernel.pid_max=65535 " >> /etc/sysctl.conf && sysctl -p
kubelet volume subpaths are still present on disk
- 错误
kubelet 大量错误日志
|
|
- 原因
使用 --force --grace-period=0
强制删除 Pod 时,资源没有被回收。
- 处理
在 /var/lib/kubelet/pods/
找到相关 Pod 信息,确认 Pod 已经停止之后,删除 Pod 的目录。
查看 Pod 名字
|
|
fmovedaemon-b9c68cd45-qm2wr
即为 Pod 名字,确认 Pod 停止后,直接删除目录即可。
|
|
kubelet MountVolume failed
- 错误
|
|
- 处理
编辑多路径文件
|
|
新增如下内容:
|
|
重启服务
|
|
- 原因
多路径为任何符合条件的设备路径创建了多路径设备,包括 Longhorn 存储卷设备,导致 Kubelet 挂载错误。
大内存 Pod 启动失败 page allocation failure
- 错误
|
|
- 处理
|
|
- 原因
系统内存碎片化,导致创建系统 namespace 时没有足够的大页内存。可以通过一下命令查看内存使用,如果 0 较多说明内存碎片化严重:
|
|
使用 IPVS 模式下,服务 No route to host
- 错误
No route to host
- 原因
当有大量短连接时,很多链接处于 TIME_WAIT 状态,内核会重用这些链接端口。
内核参数 net.ipv4.vs.conn_reuse_mode
设置为 0 ,重用端口时,IPVS 将流量直接转发至之前的 RS,绕过负载均衡,部分流量被转发到销毁的 Pod 上,导致 No route to host。
- 处理
在内核 5.9 版本之前建议使用 iptables 模式。
但 iptables 模式下,当集群的服务数量超过 2000 之后,变更规则、转发效率会开始明显下降,CPU 使用率会上升。
在内核 5.9 版本之后建议使用 IPVS 模式。
net.ipv4.vs.conn_reuse_mode
设为 1,强制复用连接走负载均衡net.ipv4.vs.conntrack
设为 0,防止 IPVS 对复用连接进行 DROP SYNC 操作
集群 kube-apiserver P99 解决 20s
- 错误
- 处理
删除掉已经停机的、状态为 NotReady
的节点。
- 原因
可能的原因是,集群中有节点已经停机,但是没有从集群中被剔除。导致某处经过 kube-apiserver 的请求,需要等待超时,超时时间为 20s。
具体原因还需要进一步验证,但删除已经停机的节点后,kube-apiserver P99 能恢复正常。
Pod 创建慢
- 错误
Sep 11 08:23:17 node3 kubelet[1437]: E0911 08:23:17.770706 1437 kubelet_volumes.go:225] "There were many similar errors. Turn up verbosity to see them." err="orphaned pod \"10ff3c51-ebf2-47dd-b837-fd584319a754\" found, but error not a directory occurred when trying to remove the volumes dir" numErrs=10
- 原因
可能的原因之一是,创建 Pod 依赖 Secret、ConfigMap 等资源,但在当前命名空间下,这些资源不存在,导致 Kubelet 一直尝试去获取这些资源,直到超时,影响了 Pod 的创建。
- 处理
找到缺失的资源,创建之。
创建调试的 Pod
- 创建 DaemonSet
|
|
- 指定节点创建 Deployment
|
|