K8s关于异常Pod的处理
前言
某天开发人员开发环境发布失败,于是找到了这边处理一下.
过程
<1>发布环境是Centos系统的k8s测试集群,从jenkins上看编译正常,编译后镜像正常,结果在启动和注册时候一直不成功直到超时发布失败.
<2>服务器上进行查看,发现pod状态为Pending
(该状态通常是调度异常,通常是k8s 的node资源不足)
kubectl get pod -n <namespace> |grep 项目名称
kubectl get pod -n <namespace> -o wide <pod-name>
kubectl get pod -n <namespace> -o yaml <pod-name>
<3>查看Pod的日志
kubectl logs -f <pod-name> -n <nameSpace> -c <container_name>
命令无错,容器没起来所以没有日志
<4>查看 Pod 的事件
kubectl describe pod <pod-name> -n <nameSpace>
没截图.英语不好的把报错复制到翻译软件,它会告知是哪个资源不足导致的异常
<5>查看node的资源
kubectl top node
kubectl top pod -n <namespace>
实际情况是各个节点上都有资源,但每个node剩余的资源,都不符合该项目的内存和cpu配置,无法调度pod到某一个node上启动
篮球无法放到小瓶子里
处理方法
方法一
新添加node节点
线上环境建议直接增加节点
方法二
对该项目中同一代码模块pod的数量进行调整,也就是调整实例数
需要和开发人员沟通,缩减某pod的数量到某个值,是否影响测试的可靠性和准确性
方法三
占用node节点资源的通常是pod的日志,过期的旧镜像和状态异常但未删除的pod
关于pod日志的切割和清理,建议配置计划任务和脚本进行切割和清理,但是重要的日志还是需要进行备份.否则当业务较繁忙时,日志大量产生触发脚本,虽然保证了节点的可用性,但日志会被清空.如果业务繁忙,在监控上会频繁出现短暂的磁盘报警再恢复的现象.
关于过期的旧镜像.可根据需求,清理未启动容器的镜像或者按创建时间删除老版本的镜像
关于状态异常但未删除的pod,应保持良好习惯,即使资源足够,在排错后也要删除异常pod,否则占用资源影响报警.
删除pod演示
<1>删除pod
kubectl delete pod -n <namespace> <pod-name>
如果只删除pod,deployment会自动重建,所以在删除后pod又重启了,应先删除deployment
<2>删除deployment
kubectl get deployment -n <namespace>
kubectl delete deployment <deployment_name> -n <namespace>
删除deployment后果是,其 对应的所有 pod 之后也会被删除
<3>再删除pod
kubectl delete pod -n <namespace> <pod-name>
<4>Terminating的pod有些特殊,需要强制删除
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0
补充
Pod的常见的几种状态,其他的百度即可
Pending 挂起
Pending 说明Pod还没有调度到某个Node 上面。可能的原因资源不足,集群内每个noode都不满足该Pod请求的资源需求;HostPort被占用
ContainerCreating 容器创建中
还处于创建中.可能的原因:网络问题导致Kubelet无法访问镜像或拉取镜像超时;配置镜像错误,导致容器无法启动;配置异常,无法分配pod网络
ImagePullBackOff 正在重试拉取
通常是镜像拉取失败。可能原因:配置镜像的名称错误,无法拉取.可以docker pull拉取试一下
CrashLoopBackOff 容器退出,kubelet正在将它重启
CrashLoopBackOff 容器启动但又异常退出。可能原因: apollo配置异常,例如内存相关 代码逻辑问题.可以查看该pod的日志
Terminating 结束
可能原因:node节点内核出现bug,导致状态异常,重启node. 可使用强制删除
Evicted 驱赶
可能原因: 系统内存或硬盘资源不足.驱赶pod到其他节点
K8s关于异常Pod的处理相关推荐
- k8s关于Orphaned pod <pod_id> found,volume paths are still present on disk 的解决方法
问题描述 因k8s节点异常关机导致启动后业务Pod重新部署,关机之前的Pod状态已被删除,今天在查看日志时发现在异常关机之前的集群节点Pod是非正常移除的,一直刷报错信息:如下: 问题排查 查看系统日 ...
- 【K8S系列】Pod重启策略及重启可能原因
目录 1 重启策略 1.1 Always 1.2 OnFailure 1.3 Nerver 1.4 yaml示例 2 Pod常见异常状态 2.1 Pending状态 2.2 Waiting/Con ...
- K8S中的pod、services、容器的概念和区别
K8S中的pod.services.容器的概念和区别 k8s的部署架构 kubernetes中有两类资源,分别是master和nodes,master和nodes上跑的服务如下图: 1 kube-ap ...
- K8S集群Pod资源自动扩缩容方案
K8S集群Pod资源自动扩缩容方案 1.为什么要是有自动扩缩容 在K8S集群中部署的应用程序都是以Pod的形式部署的,我们在部署Pod资源时都会指定Pod资源的副本数,但是这个数量是写死的,平时可能启 ...
- k8s核心概念pod 基本定义和命令
文章目录 工作负载 pod定义 pod分类 关系 静态pod 控制器管理的pod 镜像拉取策略 pod常用命令 创建pod 查看pod 删除pod 删除单个pod 删除多个pod pod的标签命令 查 ...
- K8s JavaClient watch Pod检测状态变更、和Read timed out异常
watch k8s很多命令都有watch机制,持续检测状态变化,如pod列表,如果pod状态发生变化,就会输出 kubectl get pod -w 或者--watch JAVA Cient watc ...
- K8S日常问题-k8s中大量pod 状态 evicted
背景 在查看k8s的环境的时候,突然发现存在n多个pod状态为Evicted.差不多得有几百个.在这里插入图片描述 eviction,即驱赶的意思,意思是当节点出现异常时,kubernetes将有相应 ...
- K8S!之Pod概念与网络通讯方式详解!
文章目录 前言 一:pod概念 1.1 pod的种类 1.11特点: 1.2 pod网络 1.3 pod存储 1.4 使用pod 1.5 pod控制器类型 1.6 服务发现 二:网络通讯方式 2.1: ...
- K8S调度之pod亲和性
目录 Pod Affinity Pod亲和性调度 pod互斥性调度 Pod Affinity 通过<K8S调度之节点亲和性>,我们知道怎么在调度的时候让pod灵活的选择node,但有些时候 ...
最新文章
- slub object 内存布局
- 你的二次元老婆,被AI变成了暗黑系
- 2020携程“BOSS直播”大数据发布:GMV累计超11亿
- Object-C 入门介绍
- 测试工具–super-mack
- slice,substring,substr的区别
- php中的__autoload()函数
- 区块链BaaS云服务(29) 溪塔科技 CITA-Cloud 二
- apachebench ab.exe压力测试
- ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters
- 【BZOJ】【4010】【HNOI2015】菜肴制作
- 大学计算机基础字母缩写大全,大学计算机基础缩写词.pdf
- 一篇非常 Nice 的 UmiJS 教程
- 抠图算法(交互式)以及证件照的自动抠图
- C# winform国际版,中英文转换
- matlab 求特征值的命令,matlab中求解特征值方程函数eig
- 不懂就要问!流量卡拒收对个人会有影响吗?
- c语言的职业兴趣测试,职业生涯规划计算机
- Influxdb自定义数据采样(CQ)
- CCNA思科的一些基础知识