K8S集群核心组件异常排错

一、按照不同的核心组件异常后的影响和可能原因分析

kube-apiserver 无法启动会导致:
  • 集群不可访问;
  • 已有的 Pod 和服务正常运行(依赖于 Kubernetes API 的除外);
etcd 集群异常会导致:
  • kube-apiserver 无法正常读写集群状态,进而导致 Kubernetes API 访问出错;
  • kubelet 无法周期性更新状态;
kube-controller-manager/kube-scheduler 异常会导致:
  • 复制控制器、节点控制器、云服务控制器等无法工作,从而导致 DeploymentService 等无法工作,也无法注册新的 Node 到集群中来;
  • 新创建的 Pod 无法调度(总是 Pending 状态);
Node 本身宕机或者 Kubelet 无法启动会导致
  • Node 上面的 Pod 无法正常运行(异常的pod会根据当前环境设置进行在其它节点重建);
  • 已在运行的 Pod 无法正常终止;

二、查看日志

一般来说,Kubernetes 的主要组件有两种部署方法

  • 直接使用 systemd 等启动控制节点的各个服务(二进制安装方式)
  • 使用 Static Pod 来管理和启动控制节点的各个服务(kubeadm安装方式)

2.1、使用 systemd 等管理控制节点服务时,查看日志必须要首先 SSH 登录到机器上,然后查看具体的日志文件。如:

journalctl -l -u kube-apiserver
journalctl -l -u kube-controller-manager
journalctl -l -u kube-scheduler
journalctl -l -u kubelet
journalctl -l -u kube-proxy

或者直接查看日志文件

/var/log/kube-apiserver.log
/var/log/kube-scheduler.log
/var/log/kube-controller-manager.log
/var/log/kubelet.log
/var/log/kube-proxy.log

2.2、K8S环境(kubeadm):

而对于使用 Static Pod 部署集群控制平面服务的场景,可以参考下面这些查看日志的方法:

kube-apiserver 日志
PODNAME=$(sudo kubectl -n kube-system get pod -l component=kube-apiserver -o jsonpath='{.items[0].metadata.name}')
sudo kubectl -n kube-system logs $PODNAME --tail 500
kube-controller-manager 日志
PODNAME=$(sudo kubectl -n kube-system get pod -l component=kube-controller-manager -o jsonpath='{.items[0].metadata.name}')
sudo kubectl -n kube-system logs $PODNAME --tail 500
kube-scheduler 日志
PODNAME=$(sudo kubectl -n kube-system get pod -l component=kube-scheduler -o jsonpath='{.items[0].metadata.name}')
sudo kubectl -n kube-system logs $PODNAME --tail 500
Kubelet 日志

查看 Kubelet 日志需要首先 SSH 登录到 Node 上。

journalctl -l -u kubelet
Kube-proxy 日志

Kube-proxy 通常以 DaemonSet 的方式部署

[root@k8s-10 ~]# kubectl -n kube-system get pod -owide| grep kube-proxy
kube-proxy-292cn                        1/1     Running     2          309d   10.65.3.4       k8s-10.65.3.4    <none>           <none>
kube-proxy-2jlg2                        1/1     Running     4          163d   10.65.3.47      k8s-10.65.3.47   <none>           <none>
kube-proxy-2zc89                        1/1     Running     2          266d   10.65.3.14      k8s-10.65.3.14   <none>           <none>

$ kubectl -n kube-system logs kube-proxy-2zc89

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!