- 一、pod状态异常查看方法
- 1.查看Pod状态
- 2.常见Pod状态
- 3.输出Pod的yaml文件
- 4.查看Pod详细信息
- 5.查看Pod里对应容器的日志
- 二、Pod几种异常状态问题分析
- 1.详细解释Pod常见异常状态
- 三、故障排查案例
- 1.镜像拉取失败案例分析
- 2.Pid占用导致docker无法启动
#使用--all-namespaces查看所有命名空间下的pod kubectl get pod -n2.常见Pod状态-o wide
# -o可以指定文件输出格式如yaml、josn等 kubectl get pod4.查看Pod详细信息-n -o yam #修改yaml文件可用edit kubectl edit <控制器类型> pod -n -o yaml
kubectl describe pod5.查看Pod里对应容器的日志-n
#使用logs -f参数可以实时跟踪日志 kubectl logs二、Pod几种异常状态问题分析 1.详细解释Pod常见异常状态-c -n
1.pending状态 Pending是挂起状态: 表示创建的Pod找不到可以运行它的物理节点, 不能调度到相应的节点上运行,我门可以从两个层面分析问题: 物理层面: 查看节点资源使用情况: 如free -m查看内存、 top查看CPU使用率、 df – h查看磁盘使用情况, 这样就可以快速定位节点资源情况, 判断是不是节点有问题 查看节点污点: kubectl describe nodes master1(控制节点名字),如果节点定义了污点, 那么Pod不能容忍污点, 就会导致调度失败, 如下: Taints: node-role.kubernetes.io/master:NoSchedule 这个看到的是控制节点的污点, 表示不允许Pod调度(如果Pod定义容忍度, 则可以实现调度) HostPort被占用 pod本身分析: 在定义pod时, 如果指定了nodeName是不存在的, 那也会调度失败 在定义Pod时, 如果定义的资源请求比较大, 导致物理节点资源不够也是不会调度的 2.ImagePullBackOff状态 拉取镜像时间长导致超时 配置的镜像有错误: 如镜像名字不存在等 配置的镜像无法访问: 如网络限制无法访问hub上的镜像 配置的私有镜像仓库参数错误: 如imagePullSecret没有配置或者配置错误 dockerfile打包的镜像不可用 3.CrashLoopBackOff状态 容器内应用一直在崩溃,健康检查失败 yaml文件中对pod的一些字段配置有误 k8s集群的部署有问题 4.Error/Terminating/Unknow状态 Error:依赖的ConfigMap、 Secret、 PV、 StorageClass等不存在; 请求的资源超过了管理员设置的限制, 比如超过了limits等; 无法 *** 作集群内的资源, 比如开启RBAC后, 需要为ServiceAccount配置权限。 违反集群的安全策略,比如违反了 PodSecurityPolicy 等 Terminating:pod未被正确回收 Unknow:kubelet未启动 kubelet节点与apiserver通信异常 5.Waiting /ContainerCreating/Evicted Waiting /ContainerCreating: 镜像拉取失败,比如配置了镜像错误、Kubelet 无法访问镜像、私有镜像的密钥配置错误、镜像太大,拉取超时等 CNI 网络错误,一般需要检查 CNI 网络插件的配置,比如无法配置 Pod 、无法分配 IP 地址 容器无法启动,需要检查是否打包了正确的镜像或者是否配置了正确的容器参数 Evicted:多见于系统内存或硬盘资源不足三、故障排查案例 1.镜像拉取失败案例分析
问题现象:济南节点coredns镜像拉取失败
排查思路:
Pod imagepullbackoff常见情况
拉取镜像时间长导致超时
配置的镜像有错误: 如镜像名字不存在等
配置的镜像无法访问: 如网络限制无法访问hub上的镜像
配置的私有镜像仓库参数错误: 如imagePullSecret没有配置或者配置错误
dockerfile打包的镜像不可用
详细步骤:查看docker日志去对应节点查看你详细信息
解决方案
Telent 仓库ip :80 不通
镜像仓库策略问题,复制本地正常镜像到故障机器,重新reload下,恢复正常。
通过查看节点信息可以看到node状态处于Notready导致caclico异常。
#查看节点详细信息 kubectl get node -o wide
#查看calico的网卡信息 calicoctl node status #在线下载calicoctl的方法 Curl方法: curl -O https://github.com/projectcalico/calicoctl/releases/download/v3.5.4/calicoctl Wget方法: wget https://github.com/projectcalico/calicoctl/releases/download/v3.5.4/calicoctl -O /usr/bin/calicoctl
通过journalctl -u kubelet命令查看kubelet日志发现kubelet启动失败。这里尝试重启还是失败。那么我们就需要看下docker的状态的了。
#通过时间去查找当天的日志信息 journalctl -u <服务名> -S '2021-12-29' #实时跟踪产生的日志 journalctl -xefu <服务名>
这里我们查看了docker状态,发现是failed,尝试systemctl start docker直接退出。
这个时候需要我们看一下docker的日志。
journalctl -u docker -f
我这里没有看到docker日志,所以那就看下service文件有没有配置错误的参数。(如果docker有日志,就查看docker的报错信息。)
确定service文件没错之后,我们用启动命令debug一下。不加参数启动成功。看来问题是出现在参数部分。
/usr/bin/dockerd
因为之前的docker服务退出异常,pid还在被占用。备份将这个pid移走。再次启动服务即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)