阶段:一台控制平面机器,裸机 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