目录​​​​​​​

一、重启策略

1、在k8s集群中有如下三种重启策略

2、Always

3、Never

4、OnFailure

4.1、非0状态

4.2、为0状态

二、Pod状态

1、Pod 一直处于Pending状态

2、Pod一直处于Waiting 或 ContainerCreating状态

3、Pod 一直处于ImagePullBackOff状态

4、Pod 一直处于CrashLoopBackOff状态

5、Pod处于Error状态

6、Pod 处于Terminating或 Unknown状态


一、重启策略

在k8s集群中,当某个pod资源需要重启时,我们只会对其进行删除,由其pod控制器进行重新构建。

k8s集群的自愈也是对资源的一个重新构建, 在k8s中是没有重启一说的。我们 常说的重启,其实就是对pod资源的重新构建,那么k8s集群在对资源进行管理时,其“重启”规则又是什么呢?

1、在k8s集群中有如下三种重启策略

  1. Always:当容器终止退出后,总是重启容器,默认策略
  2. OnFailure:当容器异常退出(退出状态码非0)时,重启容器
  3. Never:当容器终止退出,从不重启容器。

重启策略适用于pod对象中的所有容器,首次需要重启的容器,将在其需要时立即进行重启,随后再次需要重启的操作将由kubelet延迟一段时间后进行,且反复的重启操作的延迟时长为10s,20s,40s,80s,160s,300s,300s是最大延迟时长

重启策略设置建议

因为重启策略默认的是Always,这也是合理的,因此在一般情况下,重启策略不需要设置,这里仅仅是作为知识点拿出来展示一下,在实际使用中,在大多数情况下都不需要进行重启策略配置

2、Always

apiVersion: v1
kind: Pod
metadata:name: foo
spec:containers:- name: busyboximage: busyboxargs:- /bin/sh- -c- sleep 30; exit 3

没有定义重启策略时,默认的就是always

kubectl apply -f always.yaml
kubectl get pod -o wide -w

注:证明重启策略默认是always,总是自动拉取

3、Never

apiVersion: v1
kind: Pod
metadata:name: foo01
spec:containers:- name: busyboximage: busyboxargs:- /bin/sh- -c- sleep 30; exit 3restartPolicy: Never

4、OnFailure

4.1、非0状态

apiVersion: v1
kind: Pod
metadata:name: foo02
spec:containers:- name: busyboximage: busyboxargs:- /bin/sh- -c- sleep 20; exit 3restartPolicy: OnFailure

kubectl apply -f onfailure.yaml
kubectl get pod -o wide -w

==当容器异常退出(退出状态码非0)时,重启容器 ==

4.2、为0状态

我们在创建pod时,有时使用的为一次性pod,正常执行完退出后,不需要对其进行重启,这时就需要设置PnFailure

apiVersion: v1
kind: Pod
metadata:name: foo03
spec:containers:- name: busyboximage: busyboxargs:- /bin/sh- -c- sleep 20; exit 0restartPolicy: OnFailure

kubectl apply -f infailure.yaml
kubectl get pod -o wide -w

退出后显示的完成,说明正常退出,只是完成了这个动作,并不是错误。

退出状态码为0时包含两种状态,一种是正常完成后返回值0,(complated);第二种 手动指定 exit 0

二、Pod状态

常见异常状态:

1、Pod 一直处于Pending状态

Pending状态意味着Pod的YAML文件已经提交给Kubernetes,API对象已经被创建并保存在Etcd当中。但是,这个Pod里有些容器因为某种原因而不能被顺利创建。比如,调度不成功(可以通过kubectl describe pod命令查看到当前Pod的事件,进而判断为什么没有调度)。

可能原因

资源不足(集群内所有的Node都不满足该Pod请求的CPU、内存、GPU等资源); HostPort 已被占用(通常推荐使用Service对外开放服务端口)。

2、Pod一直处于Waiting 或 ContainerCreating状态

首先还是通过 kubectl describe pod命令查看当前Pod的事件。

可能的原因有:

1、镜像拉取失败,比如镜像地址配置错误、拉取不了国外镜像源(gcr.io)、私有镜像密钥配置错误、镜像太大导致拉取超时 (可以适当调整kubelet的-image-pull-progress-deadline和-runtime-request-timeout选项)等。

2、CNI网络错误,一般需要检查CNI网络插件的配置,比如:无法配置Pod 网络、无法分配IP地址。

3、容器无法启动,需要检查是否打包了正确的镜像或者是否配置了正确的容器参数

4、Failed create pod sandbox,查看kubelet日志,原因可能是磁盘坏道(input/output error)。

3、Pod 一直处于ImagePullBackOff状态

通常是镜像名称配置错误或者私有镜像的密钥配置错误导致。

4、Pod 一直处于CrashLoopBackOff状态

此状态说明容器曾经启动了,但又异常退出。这时可以先查看一下容器的日志。

通过命令kubectl logs 和kubectl logs --previous 可以发下一些容器退出的原因,

比如:容器进程退出、健康检查失败退出;此时如果还未发现线索,还而已到容器内执行命令(kubectl exec cassandra - cat /var.log/cassandra/system.loq)来进一步查看退出原因;如果还是没有线索,那就需要SSH登录该Pod所在的Node上,查看Kubelet或者Docker的日志进一步排查。

5、Pod处于Error状态

通常处于Error状态说明Pod启动过程中发生了错误。

常见的原因:依赖的ConfigMap、Secret或PV等不存在;请求的资源超过了管理员设置的限制,

比如超过了LimitRange等;违反集群的安全策略,比如违反了PodSecurityPolicy.等;容器无法操作集群内的资源,比如开启RDAC后,需要为ServiceAccount配置角色绑定。

6、Pod 处于Terminating或 Unknown状态

从v1.5开始,Kubernetes不会因为Node失联而删除其上正在运行的Pod,而是将其标记为Terminating 或 Unknown 状态。

想要删除这些状态的Pod有三种方法:

1、从集群中删除Node。使用公有云时,kube-controller-manager会在VM删除后自动删除对应的Node。而在物理机部署的集群中,需要管理员手动删除Node(kubectl delete node)。

2、Node恢复正常。kubelet会重新跟kube-apiserver通信确认这些Pod的期待状态,进而再决定删除或者继续运行这些Pod。用户强制删除,用户可以执行(kubectl delete pods pod-name --grace-period=0 --force)强制删除Pod。除非明确知道Pod的确处于停止状态(比如Node所在VM或物理机已经关机),否则不建议使用该方法。特别是StatefulSet 管理的Pod,强制删除容易导致脑裂或数据丢失等问题。

3、Pod行为异常,这里所说的行为异常是指Pod没有按预期的行为执行,比如没有运行podSpec 里面设置的命令行参数。这一般是podSpec yaml文件内容有误,可以尝试使用 --validate 参数重建容器,比如(kubectl delete pod mypod 和 kubectl create --validate -f mypod.yaml);也可以查看创建后的podSpec是否是对的,比如(kubectl get pod mypod -o yaml);修改静态Pod的Manifest后未自动重建,kubelet 使用inotify 机制检测 /etc/kubernetes/manifests 目录(可通过 kubelet 的 -pod-manifest-path 选项指定)中静态Pod的变化,并在文件发生变化后重新创建相应的 Pod。但有时也会发现修改静态Pod的 Manifest后未自动创建新 Pod的情景,此时已过简单的修复方法是重启 Kubelet。

Unknown 这个异常状态意味着Pod的状态不能持续地被 kubelet汇报给 kube-apiserver,这很有可能是主从节点(Master 和 Kubelet)间的通信出现了问题。

其它pod状态

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被驱赶

Kubernetes(k8s) pod 重启策略相关推荐

  1. 【云原生--Kubernetes】Pod重启策略

    文章目录 一. 重启策略 二. Always 三. Never 四. OnFailure 4.1 非0状态 4.2 为0状态 五. Pod状态 引言:在k8s集群中,当某个pod资源需要重启时,我们只 ...

  2. k8s pod重启策略:Always、OnFailure、Never配置示例

  3. 浅析Kubernetes Pod重启策略和健康检查

    使用Kubernetes的主要好处之一是它具有管理和维护集群中容器的能力,几乎可以提供服务零停机时间的保障.在创建一个Pod资源后,Kubernetes会为它选择worker节点,然后将其调度到节点上 ...

  4. 【K8S系列】Pod重启策略及重启可能原因

    目录 1 重启策略 1.1 Always 1.2  OnFailure 1.3 Nerver 1.4 yaml示例 2 Pod常见异常状态 2.1  Pending状态 2.2 Waiting/Con ...

  5. pod重启策略和状态解释

    一.重启策略:Pod在遇到故障之后重启的动作 1.always 2.never 3.onfailure 3.1 非0状态 3.2 为0状态 二.探针 附:pod各种状态解释: 1.Pod一直处于Pen ...

  6. K8S系列:Pod重启策略restartPolicy(Always、OnFailure、Never)

    restartPolicy apiVersion: v1 kind: Pod metadata:name: nginx-pod spec:restartPolicy: Alwayscontainers ...

  7. k8s pod重启前的日志查看

    kubectl logs -p pod名称 -p:previous,上一个,前一个. -p, --previous[=false]: If true, print the logs for the p ...

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

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

  9. k8s 详解 pod 生命周期 容器探测(live and ready) 钩子函数 pod的重启策略

    pause 容器, 每个pod的都有的根容器,评估pod 的健康状态,设置ip地址,ip+端口可以访问到指定的容器 pod pod 之间采用 flannel 通信 pod 定义 yaml 资源清单 一 ...

最新文章

  1. 开源大数据周刊-第15期
  2. 杀毒软件原理进阶阶段
  3. python引入redis_十六大Python面试题!看完面试官给了我40K的薪资
  4. 关于Javaweb部署到linux服务器产生乱码?的原因分析
  5. Flash 组件应用与开发
  6. leetcode 1047. Remove All Adjacent Duplicates In String | 1047. 删除字符串中的所有相邻重复项(Java)
  7. 理解流量监管和整形的关键算法—令牌桶
  8. oracle 取时间比较,Oracle最大日期获取方法
  9. UI设计素材|字体的重要性
  10. 如何提升人脸识别的精度_宝比万像人脸识别:健身房人脸识别门禁系统如何助力健身房管理?...
  11. arm的bin二进制代码分析
  12. C++简介(5)STL
  13. How do you calculate log base 2 in Java for integers?
  14. easyui关于validatebox实现多重规则验证的实践
  15. Cinema 4D Mac(C4D)常用快捷键与自定义快捷键
  16. 欧阳娜娜玩起“创可贴”,这次造型可以跟周冬雨相提并论了
  17. matlab中numden函数,numden函数 MATLAB里面numden函数有什么用?
  18. 视力测试的软件,‎App Store 上的“测试你的眼睛 —— 视力锻炼检查”
  19. 推荐系统学习笔记-FNN
  20. Easy Excel使用说明

热门文章

  1. tomcat集群部署
  2. 仓库拣货标签——电子货架标签
  3. 初入android驱动开发之网络设备以太网(二)
  4. 【微信小程序】实现广告轮播图
  5. 《区域分析与规划高级教程》读书笔记
  6. 深度学习之递归神经网络
  7. CANOe系列讲解 - CANOe使用初探
  8. 东莞纺织服装学校计算机平面设计多少分,东莞市家具学校将被撤销
  9. 中国石油大学《化工热力学》第二阶段在线作业
  10. 云服务器端口不通解决方法