master上的组件共同组成了控制平面
01 若apiserver出问题了 会导致整个K8s集群不可以使用,因为apiserver是K8s集群的大脑
02 若etcd出问题了 apiserver和etcd则无法通信,kubelet也无法更新所在node上的状态
03 当scheduler或者controller manager出现问题时 会导致deploy,pod,service等无法正常运行
解决方案 :出现问题时,监听到自动重启或者搭建高可用的master集群
worker节点挂掉或者上面的kubelet服务出现问题时,w上的pod则无法正常运行。
dns和网络插件比如calico发生问题时,集群内的网络无法正常通信,并且无法根据服务名称进行解析。
-
查看Node的状态
kubectl get nodes kubectl describe node-name
-
查看集群master和worker组件的日志
journalctl -u apiserver journalctl -u scheduler journalctl -u kubelet journalctl -u kube-proxy ...
K8s中最小的操作单元是Pod,最重要的操作也是Pod,其他资源的排查可以参照Pod问题的排查
kubectl get pods -n namespace
kubectl describe pod pod-name -n namespace
kubectl get pod pod-name -o yaml
kubectl logs ...
-
处于Pending状态
说明Pod还没有被调度到某个node上,可以describe一下详情。可能因为资源不足,端口被占用等。
-
处于Waiting/ContainerCreating状态
可能因为镜像拉取失败,或者是网络插件的问题,比如calico,或者是容器本身的问题,可以检查一下容器的yaml文件内容和Dockerfile的书写。
-
处于ImagePullBackOff状态
镜像拉取失败,可能是镜像不存在,或者没有权限拉取。
-
处于CrashLoopBackOff状态
Pod之前启动成功过,但是又失败了,不断在重启。
-
处于Error状态
有些内容不存在,比如ConfigMap,PV,没有权限等,需要创建一下。
-
处于Terminating状态
说明Pod正在停止
-
处于Unknown状态
说明K8s已经失去对Pod的管理监听。