【K8S系列】Pod重启策略及重启可能原因
目录
1 重启策略
1.1 Always
1.2 OnFailure
1.3 Nerver
1.4 yaml示例
2 Pod常见异常状态
2.1 Pending状态
2.2 Waiting/ContainerCreating状态
2.3 CrashLoopBackOff状态
2.4 ImagePullBackOff状态
2.5 Error状态
2.6 其他状态说明
tips:
3.自动重启的可能原因:
3.1 Xms超出了k8s分配
3.2 docker容器的内存限制
3.3 出现OOMKilled事件
4 投票
努力最大的意义在于谋求更多的选择权,储蓄更多的安全感,让内心不失控,生活不失序。
文章标记颜色说明:
- 黄色:重要标题
- 红色:用来标记结论
- 绿色:用来标记一级论点
- 蓝色:用来标记二级论点
1 重启策略
1.1 Always
Pod中的容器,不管因为什么原因停止,都会自动重启。
该为默认策略,
没有定义重启策略时,默认的就是always
1.2 OnFailure
Pod中的容器,非正常停止/异常退出时,会自动重启容器,如果是正常停止,则不会
1.3 Nerver
Pod中容器不管以什么原因退出,都不会自动重启容器
1.4 yaml示例
其关键字为:restartPolicy
apiVersion: v1 kind: Pod metadata:name: nginx-pod-test spec:restartPolicy: Always/OnFailure/Nerver # 重启策略,根据需求选择一种即可containers:- name: nginx-pod-testimage: nginx
2 Pod常见异常状态
- Pending状态
- Waiting/ContainerCreating状态
- CrashLoopBackOff状态
- ImagePullBackOff状态
- Error状态
- 其他状态说明
2.1 Pending状态
Pending状态:
- 说明Pod的YAML文件已提交给Kubernetes
- API对象已经被创建并保存在Etcd当中
原因:这个Pod里有些容器因为某种原因而不能被顺利创建。
可能原因:
- 调度不成功
- 可以通过命令查看到当前Pod的事件,进而判断为什么没有调度。
kubectl describe pod {podname}
- 资源不足
- 原因:集群内所有的Node都不满足该Pod请求的CPU、内存、GPU等资源
- 解决方法:增加资源配置/优化容器资源使用方式
- HostPort 已被占用
- 解决方法:使用Service对外开放服务端口
2.2 Waiting/ContainerCreating状态
首先通过 命令查看当前Pod的事件
kubectl describe pod {podname}
可能的原因有:
- 镜像拉取失败:比如镜像地址配置错误、拉取不了国外镜像源(gcr.io)、私有镜像密钥配置错误、镜像太大导致拉取超时 (可以适当调整kubelet的-image-pull-progress-deadline和-runtime-request-timeout选项)等。
- CNI网络错误:检查CNI网络插件的配置,比如:无法配置Pod 网络、无法分配IP地址。
- 容器无法启动:检查是否打包了正确的镜像或者是否配置了正确的容器参数
- Failed create pod sandbox:查看kubelet日志,原因可能是磁盘坏道(input/output error)。
2.3 CrashLoopBackOff状态
处于CrashLoopBackOff状态
说明容器曾经启动了,但又异常退出。1.查看容器的日志,查看退出原因
kubectl logs {podname} kubectl logs --previous {podname}
2.进入容器查看
kubectl exec {mypodname} -c {containername} -it -- bash
3.ssh登录Node查看
2.4 ImagePullBackOff状态
处于ImagePullBackOff状态
原因:是镜像名称配置错误或者私有镜像的密钥配置错误导致。
2.5 Error状态
Pod处于Error状态,说明Pod启动过程中发生了错误。
2.6 其他状态说明
CrashLoopBackOff: #容器退出,kubelet正在将它重启
InvalidImageName: #无法解析镜像名称
ImageInspectError: #无法校验镜像
ErrImageNeverPull: #策略禁止拉取镜像
ImagePullBackOff: #正在重试拉取
RegistryUnavailable: #连接不到镜像中心
ErrImagePull: #通用的拉取镜像出错
CreateContainerConfigError: #不能创建kubelet使用的容器配置
CreateContainerError: #创建容器失败
m.internalLifecycle.PreStartContainer #执行hook报错
RunContainerError: #启动容器失败
PostStartHookError: #执行hook报错
ContainersNotInitialized: #容器没有初始化完毕
ContainersNotReady: #容器没有准备完毕
ContainerCreating: #容器创建中
PodInitializing:pod #初始化中
DockerDaemonNotReady: #docker还没有完全启动
NetworkPluginNotReady: #网络插件还没有完全启动
Evicte: #pod被驱赶
tips:
k8s中不支持重启Pod资源,只有删除重建!重建!
3.自动重启的可能原因:
- Xms超出了k8s分配
- docker容器的内存限制
- 出现OOMKilled事件
3.1 Xms超出了k8s分配
在没有给jvm指定内存大小的情况下,机器物理内存很大时,jvm默认占用的内存Xms超出了k8s分配给pod的内存,导致pod内存溢出,从而k8s不断重启pod。
或者:运行过程中,jvm不断申请内存直到最大heap内存Xmx,Xmx超出了k8s分配给pod的内存,从而k8s自动重启pod。
解决方法:在启动的脚本中设置jvm内存-Xms、-Xmx参数
例如:java -Xms1024m -Xmx1024m -jar test.jar
3.2 docker容器的内存限制
设置了docker容器的内存限制,制作的镜像未对JVM进行配置,
JVM 会默认设置堆栈的大小。
这样,当jvm占用内存超过docker容器限制时,就会出现container 被docker killed情况。
解决方法:一样是设置jvm内存-Xms、-Xmx参数
注意要小于docker容器的内存限制。
3.3 出现OOMKilled事件
pod运行过程中出现了OOMKilled事件
即pod运行过程内存需求持续增加,超过为pod设置的内存大小时,pod会被重启。
解决方法:将pod的内存配置项的值修改大点。
例如之前是1/2,可改为2/4
4 投票
【K8S系列】Pod重启策略及重启可能原因相关推荐
- K8s中Pod生命周期和重启策略
这周项目组提到了POD 的健康检查,自己在春节之中刚好度过,现在认真复习一下 复习以下<K8s权威指南>中第三章节深入理解pod中的关于POD 声明周期和重启策略的内容 一.POD状态: ...
- docker学习笔记-为容器配置重启策略
docker容器配置重启策略 docker restart policies docker容器的退出状态码 0 表示正常退出 非0 表示异常退出(退出状态码采用chroot标准) 125 Docker ...
- Flink的重启策略
Flink的重启策略 Flink支持不同的重启策略,这些重启策略控制着job失败后如何重启.集群可以通过默认的重启策略来重启,这个默认的重启策略通常在未指定重启策略的情况下使用,而如果Job提交的时候 ...
- 【Flink】源码-Flink重启策略-简介 Task恢复策略 重启策略监听器
文章目录 1.概述 3.固定间隔 4.失败率 4.1 案例 5. 无重启策略 5.1 案例 6.实际代码演示 7. Task恢复策略 8.重启策略监听器 8.1 测试 M.参考 1.概述 Flin ...
- k8s 查看pod流量_Kubernetes K8S之Pod生命周期与探针检测
K8S中Pod的生命周期与ExecAction.TCPSocketAction和HTTPGetAction探针检测 主机配置规划 Pod容器生命周期 Pause容器说明 每个Pod里运行着一个特殊的被 ...
- k8s之pod资源管理
k8s启动pod中,可以使用requests来设置各容器需要的最小资源 limits用于限制运行时容器占用的资源,用来限制容器的最大CPU.内存的使用率. 当容器申请内存超过limits时会被终止,并 ...
- k8s之Pod详解(五)【Kubernetes(K8S) 入门进阶实战完整教程,黑马程序员K8S全套教程(基础+高级)】
参考于Kubernetes(K8S) 入门进阶实战完整教程,黑马程序员K8S全套教程(基础+高级) Pod Pod的结构 每个Pod中都可以包含一个或者多个容器 这些容器可以分为两类: 用户自定义用的 ...
- 玩转k8s:Pod详解
1 Pod详解 1.1 Pod介绍 1.1.1 Pod结构 每个Pod中都可以包含一个或者多个容器,这些容器可以分为两类: 用户程序所在的容器,数量可多可少 Pause容器,这是每个Pod都会有的一个 ...
- .net core i上 K8S(四).netcore程序的pod管理,重启策略与健康检查
目录 1.pod管理 2.重启策略 3.健康检查 4.进入容器 正文 上一章我们已经通过yaml文件将.netcore程序跑起来了,但还有一下细节问题可以分享给大家. 1.pod管理 1.1创建pod ...
最新文章
- 调整cisco参数设置
- php使用redis持久化,redis如何持久化
- display:table的几个用法
- java调用oracle 存储过程 以及游标使用
- Java各个类型转化
- 腾讯手机QQ更新:最想要的功能终于实现了!
- 【Java】使用MapReduce程序统计UV数量
- spring-cloud 学习四 服务网关
- HDU2007 平方和与立方和【序列处理+入门】
- 【王道计组笔记】Cache高速缓存基本工作原理
- 网络嵌入之STNE model
- 2050: 技术未必会使我们摆脱愚昧,有时正相反(上)
- STM32电机库(ST-MC-Workbench)学习记录——电流采样参数设置
- Diamond软件的使用(5)--建立Modelsim仿真环境
- 制作自己的印章,和自己的爱人表白纪念!
- 4本建模必读的书籍,每天学一点,获益匪浅
- 全连MGRE与星型拓扑MGRE
- 充电慢、掉电快、续航短?这份电动车过冬指南请查收!
- 记一次批量定时抓取微信公众号文章的实现
- 计算机视觉基础知识(第一章)
热门文章
- [Windows 8] disable ASLR
- git安装mmdetection
- 矩阵运算时⊗和·的区别?
- Utterance-Level Aggregation For Speaker Recognition In The Wild
- vue注册Regist.vue
- 【人机对话】阿里云人工智能ET化身CEO,对话蜻蜓FM猫局长
- 使用FineReport打造考试分析系统
- delphi 注册表操作(读取、添加、删除、修改)完全手册
- Spider-Man IG-impostors: cityscapes and beyond翻译
- [Swift]LeetCode1025. 除数博弈 | Divisor Game