一文学会 K8S故障处理

1 集群故障概述

在k8s集群的部署过程中,大家可能会遇到很多问题。这也是本地部署k8s集群遇到的最大挑战,因此本篇文章讲述了问题处理思路和常见错误,希望能够给予大家帮助。

2 pod常见问题解决思路与方法

排查Kubernetes部署故障的3个步骤:

(1)应确保Pods正常运行;

(2)确保于服务可以将流量调度到Pod;

(3)检查是否正确配置了入口。

可以用下面几个命令用来排查Pod故障:

(1) kubectl logs <pod name> :用来查看Pod容器日志。

(2) kubectl describe pod <pod name>:用于查看与Pod相关的事件列表。

(3) kubectl get pod <pod name>:用于获取Pod的YAML定义。

(4) kubectl exec -ti <pod name> bash:对进入Pod容器进行交互式终端。

Pod可能会出现各种启动和运行时错误。

(1)启动错误:

ImagePullBackoff,ImageInspectError,ErrImagePull,ErrImageNeverPull,RegistryUnavailable,InvalidImageName

(2)运行时错误:

CrashLoopBackOff,RunContainerError,KillContainerError,VerifyNonRootError,RunInitContainerError,CreatePodSandboxError,ConfigPodSandboxError,KillPodSandboxError,SetupNetworkError,TeardownNetworkError

3 Pod启动异常:部分节点无法启动Pod --Waiting 或 ContainerCreating状态

首先还是通过 kubectl describe pod <pod-name> 命令查看到当前 Pod 的事件。可能的原因包括

(1)镜像拉取失败,比如配置了镜像错误、Kubelet 无法访问镜像、私有镜像的密钥配置错误、镜像太大,拉取超时等
(2)CNI 网络错误,一般需要检查 CNI 网络插件的配置,比如无法配置 Pod 、无法分配 IP 地址
(3)容器无法启动,需要检查是否打包了正确的镜像或者是否配置了正确的容器参数

4 pending状态问题排查

Pending 说明 Pod 还没有调度到某个 Node 上面。可以通过kubectl describe pod <pod-name> 命令查看到当前 Pod 的事件,进而判断为什么没有调度。可能的原因包括资源不足,集群内所有的 Node 都不满足该 Pod 请求的 CPU、内存、GPU 等资源HostPort 已被占用,通常推荐使用 Service 对外开放服务端口。

5 Pod状态异常排查问题集-- Evicted状态

出现这种情况,多见于系统内存或硬盘资源不足,可df-h查看docker存储所在目录的资源使用情况,如果百分比大于85%,就要及时清理下资源,尤其是一些大文件、docker镜像。

(1)清除状态为Evicted的pod:

kubectl get pods | grep Evicted | awk '{print $1}' | xargs kubectl delete pod

(2)删除所有状态异常的pod:

kubectl delete pods $(kubectl get pods | grep -v Running | cut -d ' ' -f 1)

(3)删除集群中没有在使用的docker镜像(慎用):

docker system prune -a

(4)查看pod对应的服务(镜像)版本:

kubectl --server=127.0.0.1:8888 get rc -o yaml | grep image: |uniq | sort | grep ecs-core

(5)附:删除某类历史镜像(仅保留当前使用的)

docker images | grep ecs-core | grep -v docker images | grep ecs-core -m 1 | awk '{print $2}' | awk '{print $3}' | xargs docker rmi -f

6 ImagePullBackoff状态问题解决方法

这也是我们测试环境常见的,通常是镜像拉取失败。这种情况可以使用 docker pull <image> 来验证镜像是否可以正常拉取。

或者docker images | grep <images>查看镜像是否存在(系统有时会因为资源问题自动删除一部分镜像)

主要三个原因:

(1)镜像名称无效。例如,输错名字,或者镜像不存在。

(2)为镜像指定了一个不存在的标签。

(3)尝试检索的镜像属于一个私有注册表,但是Kubernetes没有设置权限访问。

解决方法:

(1)前两种情况可以通过修改镜像名和标签来解决。

(2)第三个问题,需要在注册表中添加凭据,并在Pod中引用。

官方文档中有一个有关如何实现此目标的示例。

7 crashloopbackoff状态问题解决方法

CrashLoopBackOff 状态说明容器曾经启动了,但可能又异常退出了。此时可以先查看一下容器的日志
(1)容器进程退出

(2)健康检查失败退出

解决方法:

(1)应该查看容器中日志,了解详细失败的原因。

kubectl logs <pod-name> --previous

RunContainerError

当容器无法启动时出现错误,直至在容器内的应用程序启动之前。

该问题通常是由于配置错误,例如:

挂载不存在的卷,例如ConfigMap或Secrets

将只读卷安装为可读写

解决方法:

对该错误应该使用kubectl describe pod <pod-name>来收集和分析错误。

8 error状态问题解决方法

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

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

9 Terminating或Unknown状态处理方法

从 v1.5 开始,Kubernetes 不会因为 Node 失联而删除其上正在运行的 Pod,而是将其标记为 Terminating 或 Unknown 状态。想要删除这些状态的 Pod 有三种方法:

(1)从集群中删除该 Node。使用公有云时,kube-controller-manager 会在 VM 删除后自动删除对应的 Node。而在物理机部署的集群中,需要管理员手动删除 Node(如 kubectl delete node <node-name>)。
(2)Node 恢复正常。Kubelet 会重新跟 kube-apiserver 通信确认这些 Pod 的期待状态,进而再决定删除或者继续运行这些 Pod。
(3)用户强制删除。用户可以执行 kubectl delete pods <pod> --grace-period=0 --force 强制删除 Pod。除非明确知道 Pod 的确处于停止状态(比如 Node 所在 VM 或物理机已经关机),否则不建议使用该方法。
特别是 StatefulSet 管理的 Pod,强制删除容易导致脑裂或者数据丢失等问题。

10 pod健康检查:存活性探测&就绪性探测

如果Pod正在运行但未就绪,则表示"就绪"探针失败。

当就绪探针失败时,Pod未连接到服务,并且不会有流量转发到该实例。

解决方法

准备就绪探针失败是特定于应用程序的错误,因此应该检查kubectl描述中的"事件"部分以识别错误。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容