Please enable Javascript to view the contents

Kubernetes 集群 troubleshooting

 ·  ☕ 2 分钟

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

1
echo 3 > /proc/sys/vm/drop_caches
  • 原因

内存碎片过多

calico-node 不停重启

  • 错误

runtime: failed to create new OS thread (have 11 already; errno=11),runtime: may need to increase max user processes (ulimit -u)

  • 处理

增加 ulimit 限制额度

1
ulimit -u unlimited
  • 原因

用户进程数耗尽

应用起不来,cgroup 内存泄露问题

  • 错误

mkdir /sys/fs/cgroup/memory/kubepods/burstable/pod7a1e89bd-b85e-46c6-9674-bbfd3ead02d1: cannot allocate memory

如果有 fork 相关字样,可能是 PID 耗尽。

  • 临时处理

清理 cache

1
echo 3 > /proc/sys/vm/drop_caches
  • 永久处理
  1. 修改 /etc/default/grub

GRUB_CMDLINE_LINUX 加上了 cgroup.memory=nokmem

  1. 生成配置

/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg

  1. 重启机器

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 访问。

  • 处理

检测回环转发参数

1
sysctl net.ipv4.conf.all.route_localnet

临时生效

1
sysctl -w net.ipv4.conf.all.route_localnet=1

永久生效

1
echo "net.ipv4.conf.all.route_localnet=1" >> /etc/sysctl.conf && sysctl -p
  • 原因

ipvs 模式默认关闭了该转发路径

fork/exec /usr/bin/runc 无法创建 Pod

  • 错误
1
OCI runtime create failed: unable to retrieve OCI runtime error (open /run/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/488165d6dd80c997d252ac1a5f36f41edc567cc828d98c0c0b8f1c2acf2e2524/log.json: no such file or directory): fork/exec /usr/bin/runc
  • 处理

查看 PID 限制

1
cat /proc/sys/kernel/pid_max

查看当前用户使用

1
ps -eLf | wc -l

永久调大 PID 限制

echo "kernel.pid_max=65535 " >> /etc/sysctl.conf && sysctl -p

微信公众号
作者
微信公众号