CKA认证

【K8s 精选】CKA - 如何排查集群组件的故障

2022-03-28  本文已影响0人  熊本极客

1.了解集群总体情况

查询节点信息

$kubectl get nodes -owide
NAME                STATUS   ROLES                  AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE  KERNEL-VERSION   CONTAINER-RUNTIME
worker-0001     Ready    <none>                 21d   v1.20.0   192.168.1.50    <none>        EulerOS 2.0   4.18.0.x86_64   docker://18.9.0
worker-0002     Ready    <none>                 21d   v1.20.0   192.168.1.173   <none>        EulerOS 2.0   4.18.0.x86_64   docker://18.9.0
master-0001    Ready    control-plane,master   21d   v1.20.0   192.168.0.213   <none>        EulerOS 2.0   4.18.0.x86_64   docker://18.9.0
master-0002    Ready    control-plane,master   21d   v1.20.0   192.168.0.37    <none>        EulerOS 2.0   4.18.0.x86_64   docker://18.9.0
master-0003    Ready    control-plane,master   21d   v1.20.0   192.168.0.249   <none>        EulerOS 2.0   4.18.0.x86_64   docker://18.9.0
node-0          Ready    <none>                 21d   v1.20.0   192.168.0.152   <none>        EulerOS 2.0   4.18.0.x86_64   docker://18.9.0
node-1          Ready    <none>                 21d   v1.20.0   192.168.0.42    <none>        EulerOS 2.0  4.18.0.x86_64   docker://18.9.0
node-2          Ready    <none>                 21d   v1.20.0   192.168.0.187   <none>        EulerOS 2.0  4.18.0.x86_64   docker://18.9.0

查询集群的总体健康状况

$kubectl cluster-info
Kubernetes control plane is running at https://192.168.0.60:6443
KubeDNS is running at https://192.168.0.60:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

$kubectl cluster-info dump

2.查看 Kubernetes 组件的日志

主节点 Master 日志
API Server 的默认日志路径是 /var/log/kube-apiserver-xxx.log
Scheduler 调度器的默认日志路径是 /var/log/kube-scheduler-xxx.log
Controller Manager 副本控制器的默认日志路径是 /var/log/kube-controller-manager-xxx.log

$ls /var/log/
coredns-fcd78eab6a05a74abe7eb6566c55562c37f3d3d59b301bc4e12dae64081fe4d7.log
etcd-0817bf1b89eaacc27e9870c986af8c3eaa14082d8d18b931243780cb97ba74f0.log
etcd-0c2cebc0bdf3b354918afa4edbf31f9d0b2faf755dc396e41c3ec115cc007690.log
kube-apiserver-291a08641116cc4e5b7dac6c8f17fd1b014a89efb5a735492734def136a8a9e1.log
kube-apiserver-c7cfd8affa7ab2b940fad25997f878ae0fb47c7c957f85a033f787eae87eb27f.log
kube-controller-manager-e49e67a5e1d94d12921fef52ba8be7da62f9980c150eba3c79d64cc976c22c3b.log
kube-flannel-ds-mlh9r_kube-system_install-cni-c41196adaf23151a7028f13d0e1052e541c349bf09c9ee9ce6b211aa9a4499ab.log
kube-flannel-ds-mlh9r_kube-system_kube-flannel-99818f4e512c7f8353ca8d9781835f8ac7e3c33ee474e3f7462e2437d9ae244c.log
kube-proxy-bxl8q_kube-system_kube-proxy-c2f9cf8aaed9ae8afd4215c2e99fb9b117525d099c87d0c4386358b74c064223.log
kube-scheduler-45504c0c811e2ba330188a75a591fdff7329ed77d8806c3acf7bb9a8695f24bd.log
kube-scheduler-bf1b2919e4e8a5cc5ef8f1b0afaec2c4f61f22abcadda9e53c9b0e30285b230f.log

工作节点 Node 日志
Kubelet 的默认日志路径在工作节点的 /var/log/kubelet_xxx.log,或者使用利用 journalctl ,例如 journalctl -u kubelet |grep xxx 搜索关键字。
Kube Proxy 负责均衡器的默认日志路径在工作节点的 /var/log/kube-proxy_xxx.log

#进入目标的工作节点
$ssh node-1
#查看pod的日志文件
$ls /var/log
deployment-flink-jobmanager-5f89c74868-8plpm_7e911648-ca73-4202-b968-48c47d1e2c7d.log 
kube-proxy-bxj8x_aca6dae2-7965-4ed2-8096-f43a1dbec22f.log

3.集群故障的常见原因及其解决方案

3.1 API Server 所在的 VM 关机或者 API Server 崩溃

常见表象
① 不能停止、更新后者启动新的 PodService 或者副本控制器 Deployment
② 现有的 PodService 在不依赖 Kubernetes API 的情况下应该能继续正常工作
缓解手段:自动 VM 重启功能

3.2 API Server 的后端存储数据丢失

常见表象
API Server 可能启动失败
Kubelet 将不能访问 API Server,但是能够继续运行之前的 Pod 和提供相同的 Proxy
③ 在 API Server 重启之前,需要手动恢复或者重建 API Server 的状态
缓解手段:在运行 Etcd 的 VM,使用可靠的分布式存储卷,例如 AWS EBS 卷

3.3 Kubernetes 组件(节点控制器、副本控制器管理器、调度器等)所在的 VM 关机或者崩溃

常见表象
① 这些组件对应的功能会异常
② 如果有这些组件有多副本,其功能可能不受影响
缓解手段:采用高可用配置,可以容许 1 个或者多个节点或组件同时出现故障

3.4 单个节点(VM 或者物理机)关机或者 Kubelet 故障

常见表象:此节点上的所有 Pod 都停止运行
缓解手段
① 对该 Pod 使用副本控制器 Deployment
Pod 设置为容许异常重启

3.5 网络阻断

常见表象:分区 A 认为分区 B 中所有的节点都已宕机;分区 B 认为 API Servre (位于分区 A)宕机

上一篇下一篇

猜你喜欢

热点阅读