Pod的状态
[root@k8s-master1 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-3 1/1 Running 2 (34m ago) 14h
#NAME Pod的名称
#READY 代表Pod里面有几个容器,前面是启动的后面是总数1/1
#STATUS就是当前Pod状态,最常见的就是Running正在运行,最期望的状态,只要不是RUnning的就说明有问题,就算是Running的就不一定没有问题
pod最终是运行在某一个node节点上的,他是通过scheduler根据内部的调度算法根据RBAC基于角色控制的方式来把一个pod和某一个node节点进行绑定,我们在创建之前是不知道最终运行在那个node节点上,我们需要调度器scheduler根据内部算法,把你这个pod指定某一个node节点之上,这个是根据内部调度算法生成的
Pod 状态及 Pod故障排查命令
状态 |
说明 |
Pending(挂起) |
再执行创建pod过程中,命令行已经执行,pod已经被k8s系统接受,但仍有一个或多个容器未被创建,可以通过kubectl describe 查看处于Pending状态的原因 |
Running(运行中) |
Pod 已经被绑定到一个节点上,并且所有的容器都已经被创建,而且至少有一个是运行状态,或者是正在启动或者重启,可以通过 kubectl logs 查看 Pod 的日志 |
Succeeded(成功) |
所有容器执行成功并终止,并且不会再次重启,可以通过kubectl logs 查看Pod的日志 |
Failed(失败) |
至少有一个容器没有正常退出,以失败告终,在Linux上每个命令都有个状态值和信号值,状态值正常是0-255之间正常状态值为0,容器的创建状态只要是非0就是异常的 |
Unknown(未知) |
通常是是通信出问题了,不知道状态是啥通常是Uknown |
imagePullBackOffErrimagePull(镜像拉取失败) |
镜像拉取失败,一般是由于镜像不存在、网络不通或者需要登录认证引起的,可以使用 describe 命令查看具体原因 |
CrashLoopBackOff(容器启动失败) |
容器启动失败,有可能是打的镜像文件本身就有问题,不能正常来启动,可以通过 logs 命令查看具体原因,一般为启动命令不正确,健康检查不通过等 |
OOMKilled(内存溢出) |
内存溢出,运行的容器本身出现内存溢出,Tomcat JVM 栈 基于JVM做各种各样的内存限制,对容器本身要做资源限制,一旦容器本身资源不够了,我们对这个容器本身资源限制和JVM那种内存冲突了,比如JVM需要4个G,结果容器只给2个G,那这样就出现内存溢出,不够用,还有一种方式,程序本身有问题,JVM和容器内存限制都够用,还是内存溢出了JVM本身给的内存不够用造成的报错叫OOM内存溢出错误,一旦出现这种错误容器或者程序本身会自动kill掉,程序一旦自己把自己kill掉意味着容器就没了,这个OOM就是容器里面的程序内存溢出了,一般是内存limit设置太小 |
Terminating(终止) |
Pod正在被删除,可以通过 describe 查看状态 |
SysctlForbidden(内核启动失败) |
和Linux内核相关,在启动pod的时候加了一些内核的需求,但是没有开放需求,就会造成内核启动失败 |
Completed(主进程退出) |
容器内部主进程退出, 一般计划任务执行结束会显示该状态 |
ContainerCreateing(创建容器) |
Pod 正在创建, 一般为正在下载镜像, 或者有配置不当的地方, 可以通过 describe 查看具体原因 |
describe
[root@k8s-master1 ~]# kubectl describe pods nginx-3
Name: nginx-3
#pod名字
Namespace: default
#Namespace
Priority: 0
#优先级
Service Account: default
#默认使用default
Node: k8s-node1.guoguo.com/192.168.1.101
#绑定的节点node1
Start Time: Sun, 06 Aug 2023 17:32:26 +0800
#创建的时间
Labels: app=nginx
#标签,如果我们没有加标签,会自动加一个标签如果是pod通常是run=pod名称
env=dev
Annotations: cni.projectcalico.org/containerID:
#资源注解
a121ada4cbabc46e302ba38008a7d6887f8f4035c8b42f781233f4fa3013bd96
cni.projectcalico.org/podIP: 192.26.131.132/32
#pod的ip
cni.projectcalico.org/podIPs: 192.26.131.132/32
Status: Running
#当前状态
IP: 192.26.131.132
#pod ip
IPs:
IP: 192.26.131.132
Containers:
nginx:
Container ID: containerd://57a204528d873a006134dcb7e58739b6adcbbd1b299d4b7e4984c451d47af86c
Image: harbor.guoguo.com/apps/ubuntu-nginx:1.22.1
#镜像
Image ID: harbor.guoguo.com/apps/ubuntu-nginx@sha256:8818a74320ea5451b340d47faadba66cc9f582c9b734526c65076808412803a1
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Mon, 07 Aug 2023 07:24:36 +0800
Last State: Terminated
Reason: Unknown
Exit Code: 255
Started: Sun, 06 Aug 2023 21:17:40 +0800
Finished: Mon, 07 Aug 2023 07:23:29 +0800
Ready: True
Restart Count: 2
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-9lwkh (ro)
Conditions:
Type Status
#类型 #状态
Initialized True
#初始化 #成功
Ready True
#准备 #成功
ContainersReady True
#容器准备 #成功
PodScheduled True
#pod调度 #成功
Volumes:
#卷组
kube-api-access-9lwkh:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
#服务类
Node-Selectors: <none>
#没有节点选择 #为none就说明没有给Node-selectors提特殊的节点选择
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events: <none>