目录

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状态:

  1. 说明Pod的YAML文件已提交给Kubernetes
  2. API对象已经被创建并保存在Etcd当中

原因:这个Pod里有些容器因为某种原因而不能被顺利创建。

可能原因:

  • 调度不成功
  1. 可以通过命令查看到当前Pod的事件,进而判断为什么没有调度。
kubectl describe pod {podname}
  • 资源不足
  1. 原因:集群内所有的Node都不满足该Pod请求的CPU、内存、GPU等资源
  2. 解决方法:增加资源配置/优化容器资源使用方式
  • HostPort 已被占用
  1. 解决方法:使用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.自动重启的可能原因:

  1. Xms超出了k8s分配
  2. docker容器的内存限制
  3. 出现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重启策略及重启可能原因相关推荐

  1. K8s中Pod生命周期和重启策略

    这周项目组提到了POD 的健康检查,自己在春节之中刚好度过,现在认真复习一下 复习以下<K8s权威指南>中第三章节深入理解pod中的关于POD 声明周期和重启策略的内容 一.POD状态: ...

  2. docker学习笔记-为容器配置重启策略

    docker容器配置重启策略 docker restart policies docker容器的退出状态码 0 表示正常退出 非0 表示异常退出(退出状态码采用chroot标准) 125 Docker ...

  3. Flink的重启策略

    Flink的重启策略 Flink支持不同的重启策略,这些重启策略控制着job失败后如何重启.集群可以通过默认的重启策略来重启,这个默认的重启策略通常在未指定重启策略的情况下使用,而如果Job提交的时候 ...

  4. 【Flink】源码-Flink重启策略-简介 Task恢复策略 重启策略监听器

    文章目录 1.概述 3.固定间隔 4.失败率 4.1 案例 5. 无重启策略 5.1 案例 6.实际代码演示 7. Task恢复策略 8.重启策略监听器 8.1 测试 M.参考 1.概述 ​ Flin ...

  5. k8s 查看pod流量_Kubernetes K8S之Pod生命周期与探针检测

    K8S中Pod的生命周期与ExecAction.TCPSocketAction和HTTPGetAction探针检测 主机配置规划 Pod容器生命周期 Pause容器说明 每个Pod里运行着一个特殊的被 ...

  6. k8s之pod资源管理

    k8s启动pod中,可以使用requests来设置各容器需要的最小资源 limits用于限制运行时容器占用的资源,用来限制容器的最大CPU.内存的使用率. 当容器申请内存超过limits时会被终止,并 ...

  7. k8s之Pod详解(五)【Kubernetes(K8S) 入门进阶实战完整教程,黑马程序员K8S全套教程(基础+高级)】

    参考于Kubernetes(K8S) 入门进阶实战完整教程,黑马程序员K8S全套教程(基础+高级) Pod Pod的结构 每个Pod中都可以包含一个或者多个容器 这些容器可以分为两类: 用户自定义用的 ...

  8. 玩转k8s:Pod详解

    1 Pod详解 1.1 Pod介绍 1.1.1 Pod结构 每个Pod中都可以包含一个或者多个容器,这些容器可以分为两类: 用户程序所在的容器,数量可多可少 Pause容器,这是每个Pod都会有的一个 ...

  9. .net core i上 K8S(四).netcore程序的pod管理,重启策略与健康检查

    目录 1.pod管理 2.重启策略 3.健康检查 4.进入容器 正文 上一章我们已经通过yaml文件将.netcore程序跑起来了,但还有一下细节问题可以分享给大家. 1.pod管理 1.1创建pod ...

最新文章

  1. 计算机视觉CV算法分类,计算机视觉(CV)的算法有哪些,具体都有哪些特点?...
  2. 快速排序详解以及java实现
  3. Google浏览器中的开发工具.
  4. Linux的基本指令(2)-Linux从入门到精通第三天(非原创)
  5. 自写的简单屏蔽特定字符的TextBox和数字TextBox
  6. atitit.nfc 身份证 银行卡 芯片卡 解决方案 attilax总结
  7. 第三篇:DAMA数据管理知识体系
  8. xmlspy xsd生成java_XmlSpy / XSD 以及 验证
  9. 南海云课堂春季10(T)K3
  10. 很激励人的一首歌《逍遥叹》(ZT)
  11. 微信答题小程序开发遇到过的坑
  12. 使用微软官方工具下载最新系统(win10为例)
  13. 无需翻墙,快速接入免费网页版 ChatGPT 到 Java 应用程序中
  14. NSSCTF web题记录
  15. 2021全球十大外盘期货交易平台排名
  16. java数组显示_Java 1.5中显示数组
  17. 怎么撰写一份优秀的数据分析报告(三)
  18. 如何恢复录音删除的录音文件_如何使用goldwave给麦克风录音
  19. 银行卡在哪个银行都能取款吗?
  20. WebSocket和SocketIO总结

热门文章

  1. 临汾市副市长陈忠辉率临汾市创卫工作现场会各县市参会代表一行80余人,在乡宁县委书记樊洪平、副县长卢冬等领导的陪同下走进我新城区幼儿园观摩了健康教育,视察了创卫工作情况。
  2. 微信小程序领取查看优惠券,会员卡总结
  3. 解决虚拟机ping不通主机,但是主机可以ping通虚拟机的问题
  4. arduino字符串处理函数
  5. vue_案例_点击div的时候,改变背景色
  6. 60个灵遁者诗歌集句子摘录
  7. pat basic 1089 狼人杀-简单版
  8. 【Linux指令集】---cp指令(超详细)
  9. uni-app 导航栏透明设置
  10. java统计文章中单词出现的次数