Skip to main content

排查pod异常

根据pod状态排查错误。

确认 pod 状态

# 设置默认命名空间,后续执行相关命令时可以不带“-n onecloud” 
$ kubectl config set-context --current --namespace=onecloud

# 查看 pod 状态
$ kubectl get pod

检查pod相关事件

当查看到 pod 状态不是 running 状态时,可以通过 describe 命令查看更多信 息。

# 举例为查看 host 服务的 pod 的事件信息
$ kubectl describe pod default-host-z8j5r

查看日志

可以通过检查日志来查看应用程序是否正常运行。

# 查看 host 服务的日志信息
$ kubectl logs default-host-z8j5r -c host -f

pod 常见错误及处理方法

CrashLoopBackOff状态

CrashLoopBackOff 状态说明容器曾经启动了,但又异常退出。此时可以先查看 一下容器的日志。通过 kubectl logs 命令可以发现一些容器退出的原因:

  • 通过查看日志发现是脏数据导致的
[root@test ~]#kubectl get pod | grep region
default-region-75bc7d474f-rjpkm 0/1
CrashLoopBackOff 12 2d20h
default-region-dns-88s7z 1/1 Running
0 2d20h
[root@test ~]# kubectl logs default-region-75bc7d474f￾rjpkm | less
[I 200618 16:13:32
appsrv.(*Application).ServeHTTP(appsrv.go:237)]
hlgxXm4i2qF10tkBXu3rAVrCC-w= 200 b5e0b2 GET
/networks?admin=true&delete=all&details=true&filter.0=updated_at.
ge%28%272020-06-
03+07%3A56%3A04%27%29&filter.1=manager_id.isnullorempty%28%29&fil
ter.2=external_id.isnullorempty%28%29&limit=1024&offset=0&order=a
sc&order_by.0=updated_at&pending_delete=all (10.105.232.12:55236)
34.50ms
[F 200618 16:13:32 models.(*SGuest).GetDriver(guests.go:557)]
Unsupported hypervisor Aliyun
  • pod 中对应的配置文件中格式不对

Evicted状态

出现这种情况,多见于系统内存或硬盘资源不足。通过“kubectl describe命令”查看异常pod。

[root@test-interface ~]# kubectl describe -n onecloud pod default-ovn-north-7689f47894-tqp2g
Name: default-ovn-north-7689f47894-tqp2g
Namespace: onecloud
Priority: 0
Node: test-interface/
Start Time: Fri, 20 Mar 2020 18:38:27 +0800
Labels: app=ovn-north
app.kubernetes.io/component=ovn-north
app.kubernetes.io/instance=onecloud-cluster-8p2p
app.kubernetes.io/managed-by=onecloud-operator
app.kubernetes.io/name=onecloud-cluster
pod-template-hash=7689f47894
Annotations: cni.projectcalico.org/podIP: 10.40.180.212/32
onecloud.yunion.io/last-applied-configuration:
{"volumes":[{"name":"certs","secret":{"secretName":"default-certs","items":[{"key":"ca.crt","path":"ca.crt"},{"key":"service.crt","path":"...
Status: Failed
Reason: Evicted
Message: The node was low on resource: ephemeral-storage. Container ovn-north was using 109956Ki, which exceeds its request of 0.

ImagePullBackOff状态

通常是镜像名称配置错误或者私有镜像的密钥配置错误导致。通过“kubectl describe命令”查看异常pod。

Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 35s default-scheduler Successfully assigned onecloud/default-region-85ff9dcd5-mh8cl to yunion320
Normal Pulling 34s kubelet, yunion320 Pulling image "registry.cn-beijing.aliyuncs.com/yunionio/region:v3.2.1"
Normal Pulled 33s kubelet, yunion320 Successfully pulled image "registry.cn-beijing.aliyuncs.com/yunionio/region:v3.2.1"
Normal Created 33s kubelet, yunion320 Created container init
Normal Started 33s kubelet, yunion320 Started container init
Normal Pulling 15s (x2 over 28s) kubelet, yunion320 Pulling image "registry.cn-beijing.aliyuncs.com/yunionio/region:v3.2.2"
Warning Failed 15s (x2 over 28s) kubelet, yunion320 Failed to pull image "registry.cn-beijing.aliyuncs.com/yunionio/region:v3.2.2": rpc error: code = Unknown desc = Error response from daemon: manifest for registry.cn-beijing.aliyuncs.com/yunionio/region:v3.2.2 not found: manifest unknown: manifest unknown
Warning Failed 15s (x2 over 28s) kubelet, yunion320 Error: ErrImagePull
Normal BackOff 3s kubelet, yunion320 Back-off pulling image "registry.cn-beijing.aliyuncs.com/yunionio/region:v3.2.2"
Warning Failed 3s kubelet, yunion320 Error: ImagePullBackOff

Pending状态

Pending状态,这个状态意味着,Pod的yaml文件已经提交给Kubernetes,API对象已经被创建并保存在Etcd 当中。但是,这个Pod里有些容器因为某种原因而不能被顺利创建。

  • 调度不成功(可以通过 kubectl describe pod 命令查看到当前 Pod 的事件,进而判断为什么没有调度)。
  • 可能原因: 资源不足(集群内所有的 Node 都不满足该 Pod 请求的 CPU、内存、GPU 等资源);
  • HostPort 已被占用(通常推荐使用 Service 对外开放服务端口)。

Error状态

通常处于 Error 状态说明 Pod 启动过程中发生了错误。常见的原因包括:

  • 依赖的 ConfigMap、Secret 或者 PV 等不存在;
  • 请求的资源超过了管理员设置的限制,比如超过了 LimitRange 等;
  • 违反集群的安全策略,比如违反了 PodSecurityPolicy 等;
  • 容器无权操作集群内的资源,比如开启 RBAC 后,需要为 ServiceAccount 配置角色绑定;