​k8s-apiserver 简介​

Kubernetes API 服务器验证并配置 API 对象的数据, 这些对象包括 pods、services、replicationcontrollers 等。 API 服务器为 REST 操作提供服务,并为集群的共享状态提供前端, 所有其他组件都通过该前端进行交互。

故障案例

~]# kubectl get all
The connection to the server 192.168.213.129:6443 was refused - did you specify the right host or port?

故障分析

  • kubectl 连接不上 192.168.213.129:6443 ,6443 端口就是 apiserver 监听端口,使用暴露端口的方式为 hostnetwork。
  • 此时原本调度在节点或 master 的服务不会受影响,但是新服务将不在调度
第一种情况:
使用命令: <sub>]# netstat -natp| grep 6443 | grep LISTEN
未发现监听端口
=================================================================================================
第二种情况:
使用命令: </sub>]# netstat -natp| grep 6443 | grep LISTEN
tcp6 0 0 :::6443 :::* LISTEN 59889/kube-apiserve

故障解决尝试:

  • journalctl -fu kubelet 查看日志
  • 我们可以对apiserver 进行重启,apiserver的yaml 文件目录为:/etc/kubernetes/manifests/kube-apiserver.yaml,可以对上述目录进行 mv 移动的操作,它属于静态pod ,这样就可以重启。
  • 使用其他主机探测端口 6443 是否通,使用命令 telnet 192.168.213.129 6443 命令
  • 如果端口 6443 是通的,那么可以重启kubelet。命令为: systemctl restart kubelet.service
  • 如果上述命令端口正常,此时可以使用命令tcpdump 抓包,查看 kubelet 给 apiserver 的流量走向,再次定位原因。
  • 检查 etcd 是否启动正常 docker ps -a | grep etcd ,确认是否为 up 状态,如果不是,请解决 etcd 问题
  • 如果时间有限,可以先剔除此节点,之后再模拟故障,找出原因。