这是一个创建于 1391 天前的主题,其中的信息可能已经有所发展或是发生改变。
我司有七八十个微服务,大部分是 Java 。我们的测试环境运行在单个虚拟机上,128G 内存,4 核,MicroK8s 环境。
现在的问题是在测试环境全新启动过程中会突发所有 Pod 同时被删除重启的问题,原因是 SandboxChanged 。
> Warning FailedCreatePodSandBox 14m kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "9070dfeabddbd48c08e36377868ed671240653ff4a9fd4fdf03b4af9c9b72dfe": context deadline exceeded
> Normal SandboxChanged 14m (x2 over 16m) kubelet Pod sandbox changed, it will be killed and re-created.
原因是 Node 短暂失联后恢复,导致所有 Pod 重新部署。
> Warning ContainerGCFailed 31m kubelet rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial unix /var/snap/microk8s/common/run/containerd.sock: connect: no such file or directory"
> Normal NodeNotReady 31m kubelet Node c7-test-env-11-206 status is now: NodeNotReady
估计是太多服务同时启动,CPU 压力过高导致 Node 上的 API 超时,从而 kubelet 认为 Node 断联导致的。
将 CPU 增加到 8 个后此问题再没有重现。但因为资源不足,某些测试环境暂时无法增加 CPU 。
因此,有没有什么方法可以在系统负载过大时合理地降低 Pod 调度速度,从而减轻此问题呢?
3 条回复 • 2021-03-16 20:07:34 +08:00
|
|
1
hzfyjgw 2021-02-02 21:50:53 +08:00
测试环境 kubelet 与 api server 之间的心跳检测时间拉长试试
|
|
|
2
Devopsre 2021-02-24 18:53:37 +08:00 via Android
魔改 scheduler
|