经过几个月的良好工作后,kube-apiserver 在启动时开始死机 - 我如何检查其日志?

经过几个月的良好工作后,kube-apiserver 在启动时开始死机 - 我如何检查其日志?

阶段:一台控制平面机器,裸机 Ubuntu 22.04 上的 kubernetes 1.24.3,安装了 kubeadm,还有一个工作节点。整个设置运行良好,持续了 4 个月,直到昨天出现了一些不为人知的无声爆炸(我实际上不排除突然的硬件问题)

问题:控制平面机器启动后的最初几分钟内,端口 6443 被 netstat 列出,然后消失。当它开启时,apiserver 无论如何都没有响应 - 对它的任何连接尝试都会被对等端重置。也就是说,kube-apiserver 端应该存在一些严重问题,但我不知道它对什么不满意。

我检查了一些显而易见的事情 - IP 地址没有改变,磁盘空间足够,k8s 的证书没有过期。所以我需要以kube-apiserver某种方式检查日志。

至于日志,官方页面

在基于 systemd 的系统上,您可能需要使用 journalctl 而不是检查日志文件。

但是...我应该为哪个组件运行 journalctl?如果我为 kubelet ( journalctl -u kubelet) 运行它,除了“无法连接到 :6443”之外,我看不到太多与 apiserver 相关的日志

kube-apiserver当我运行例如...时,我没有看到任何同名或类似的服务。systemctl此外,也没有登录/var/log/(这并不奇怪,因为它是一个基于 systemd 的系统,但我还是检查了一下)

我想知道是否有办法检查 apiserver 的日志,或者我是否遗漏了一些问题?如果能提供任何帮助,我将不胜感激!

答案1

在我的集群上,kube-apiserver 在一个 pod 中运行(并且可以通过 kubectl logs 获取日志)。

如果 apiserver 关闭了,我会直接登录到节点并使用容器运行时检查容器日志(例如,crictl 日志或 docker 日志或任何适合您的系统的内容)。

例如:

# Find the kube-apiserver pod
root@infra-control-plane:/# crictl pods | grep kube-apiserver
ca01411d447a6       3 days ago          Ready               kube-apiserver-infra-control-plane                  kube-system          0                   (default)
# Find container in that pod
root@infra-control-plane:/# crictl ps --pod ca01411d447a6
CONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID              POD
44da6bf198244       400e6a4878256       3 days ago          Running             kube-apiserver      0                   ca01411d447a6       kube-apiserver-infra-control-plane
# Look at logs for that container
root@infra-control-plane:/# crictl logs 44da6bf198244 |& tail -2
Trace[1944612718]: ---"Writing http response done" 1254ms (21:59:45.444)
Trace[1944612718]: [1.255113794s] [1.255113794s] END

相关内容