kubernetes(八)问题排查

1.Master

master上的组件是运行k8s的不可缺少的一部分,共同管理k8s集群

1)如果apiserver出问题    
  apiserver是K8s集群最重要的组件,提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是      整个系统的数据总线和数据中心。所有的命令都需要和apiserver进行交互,是k8s的"大脑",api-server不可用会导致整个K8s集      群不可用

2)如果etcd出问题  
  etcd是一个高可用的分布式键值(key-value)数据库,主要用于共享配置和服务发现
  (服务发现:在一个分布式集群中的服务如何才能找到对方并与其建立连接)
  apiserver和etcd无法通信,会导致无法找到对应的node,那么kubelet也就无法更新所在node上的状态  

 3)如果scheduler或者controller manager出现问题 
  scheduler负责调度 : 为每一个Pod从Node列表中选择一个合适的Node
  controller manager : 负责集群内的Node,Pod副本,namespace等的管理,当某个Node意外宕机,CM会及时发现此故障并执    行自动化修复流程,确保集群始终处于预期的工作状态

 二者出现问题会导致deployment,pod,service等资源无法正常分配到Node,无法正常运行

解决方案:出现问题时,自动重启或者搭建高可用的master集群

2.Worker 

worker节点挂掉或者上面的kubelet服务出现问题时,worker上的pod则无法正常运行

3.Addons

dns和网络插件比如calico发生问题时,集群内的网络无法正常通信,并且无法根据服务名称进行解析

4.系统问题排查 

#查看Node的状态
kubectl get nodes 
kubectl describe node-name

#查看集群master和worker组件的日志
journalctl -u apiserver 
journalctl -u scheduler 
journalctl -u kubelet 
journalctl -u kube-proxy ...

5.Pod的问题排查 

K8s中最小的操作单元是Pod,最重要的操作也是Pod,其他资源的排查可以参照Pod问题的排查
 

#查看Pod运行情况
kubectl get pods -n namespace

#查看Pod的具体描述,定位问题
kubectl describe pod pod-name -n namespace 

#检查Pod对应的yaml是否有误
kubectl get pod pod-name -o yaml

#查看pod日志
kubectl logs pod-name

Pod可能会出现哪些问题及解决方案
1.处于Pending状态    说明Pod还没有被调度到某个node上,可以describe一下详情。可能因为资源不足,端口被占用等。

2.处于Waiting/ContainerCreating状态    可能因为镜像拉取失败,或者是网络插件的问题,比如calico,或者是容器本身的问题,可以检查一下容器的yaml文 件内容和Dockerfile的书写   

3.处于ImagePullBackOff状态    镜像拉取失败,可能是镜像不存在,或者没有权限拉取。    

4.处于CrashLoopBackOff状态    Pod之前启动成功过,但是又失败了,不断在重启。   

5.处于Error状态    有些内容不存在,比如ConfigMap,PV,需要创建一下,或者没有权限。   

6.处于Terminating状态    说明Pod正在停止   

7.处于Unknown状态    说明K8s已经失去对Pod的管理监

发布了47 篇原创文章 · 获赞 12 · 访问量 5083

猜你喜欢

转载自blog.csdn.net/qq_35448165/article/details/103462185