![经过几个月的良好工作后,kube-apiserver 在启动时开始死机 - 我如何检查其日志?](https://linux22.com/image/781340/%E7%BB%8F%E8%BF%87%E5%87%A0%E4%B8%AA%E6%9C%88%E7%9A%84%E8%89%AF%E5%A5%BD%E5%B7%A5%E4%BD%9C%E5%90%8E%EF%BC%8Ckube-apiserver%20%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E5%BC%80%E5%A7%8B%E6%AD%BB%E6%9C%BA%20-%20%E6%88%91%E5%A6%82%E4%BD%95%E6%A3%80%E6%9F%A5%E5%85%B6%E6%97%A5%E5%BF%97%EF%BC%9F.png)
阶段:一台控制平面机器,裸机 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