K8s新手系列之Pod的重启策略
概述
K8s中Pod的重启策略具有确保服务连续性、保证任务完整性、提升资源利用效率、便于故障排查的作用
Pod的重启策略可以根据restartPolicy
字段定义.
重启策略适用于pod对象中的所有容器,首次需要重启的容器,将在其需要时立即进行重启,随后再次需要重启的操作将由kubelet延迟一段时间后进行,且反复的重启操作的延迟时长以此为10s、20s、40s、80s、160s和300s,300s是最大延迟时长。
可以通过官方文档阅读:https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy
也可以通过以下命令查看详细资源信息:
[root@node02 ~]# kubectl explain pod.spec.restartPolicy
KIND: Pod
VERSION: v1
FIELD: restartPolicy <string>
DESCRIPTION:
Restart policy for all containers within the pod. One of Always, OnFailure,
Never. Default to Always. More info:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy
Possible enum values:
- `"Always"`
- `"Never"`
- `"OnFailure"`
通过上述可以发现Pod的重启策略有三种,分别是Always、Never、OnFailure
Pod的重启策略详解
Always
Always代表只要Pod终止就自动重启Pod。也是默认的重启策略
使用场景:适用于长时间运行的服务型容器,如 Web 服务器、数据库服务器等。这些容器需要保持持续运行,以提供稳定的服务。即使容器因意外故障(如内存泄漏、进程崩溃等)而终止,Always 策略也会立即重启容器,尽可能减少服务中断时间,保证业务的连续性。
示例:
# 创建一个pod
[root@master01 ~/pod]# cat always-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: always-restart-pod
spec:
containers:
- name: my-container
image: nginx:latest
# 定义重启策略为Always
restartPolicy: Always
OnFailure
OnFailure代表只有在Pod错误退出(退出状态非零)时才重新启动Pod。
使用场景:常用于批处理任务或一次性作业。例如,数据处理任务、备份任务等。这些任务在执行过程中可能会因为各种原因(如资源不足、依赖的服务不可用等)而失败,但只要任务没有成功完成,就需要重新执行,直到任务成功。OnFailure 策略可以保证任务在出现故障时自动重启,确保任务最终能够执行完成,而不会因为一次失败就终止。
示例:
# 定义资源文件
[root@master01 ~/pod]# cat onfailure-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: onfailure-pod
spec:
containers:
- name: my-container
image: busybox
command: ["sh", "-c", "exit 1"]
# 设置重启策略
restartPolicy: OnFailure
# 创建pod
[root@master01 ~/pod]# kubectl apply -f onfailure-pod.yaml
pod/onfailure-pod created
# 查看pod,状态为CrashLoopBackOff,RESTARTS字段表示重启次数,这里重启了两次
[root@master01 ~/pod]# kubectl get po onfailure-pod
NAME READY STATUS RESTARTS AGE
onfailure-pod 0/1 CrashLoopBackOff 2 (16s ago) 39s
# 查看详细信息,发现Pod一直在重启
[root@master01 ~/pod]# kubectl describe po onfailure-pod
Name: onfailure-pod
Namespace: default
#...省略万字内容
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 2m11s default-scheduler Successfully assigned default/onfailure-pod to node02
Normal Pulled 2m9s kubelet Successfully pulled image "busybox" in 1.511600493s (1.511617507s including waiting)
Normal Pulled 2m7s kubelet Successfully pulled image "busybox" in 1.177646325s (1.177650807s including waiting)
Normal Pulled 108s kubelet Successfully pulled image "busybox" in 1.425673685s (1.425683335s including waiting)
Normal Created 80s (x4 over 2m9s) kubelet Created container my-container
Normal Pulled 80s kubelet Successfully pulled image "busybox" in 1.310080949s (1.310086452s including waiting)
Normal Started 79s (x4 over 2m9s) kubelet Started container my-container
Warning BackOff 42s (x8 over 2m6s) kubelet Back-off restarting failed container my-container in pod onfailure-pod_default(f531482f-c254-4aa8-afd5-4c0b99723e81)
Normal Pulling 28s (x5 over 2m11s) kubelet Pulling image "busybox"
Never
Never表示不论状态如何,都不重启该Pod
使用场景:适用于执行完即结束的一次性任务,或者是希望人工干预容器重启过程的情况。例如,某些初始化脚本、一次性的配置任务等,执行完成后容器就没有继续运行的必要了,也不希望其自动重启。另外,当需要对容器的故障进行详细排查时,使用 Never 策略可以让容器保持在故障状态,以便运维人员查看容器的最终状态、日志等信息,有助于快速定位和解决问题。
示例:
# 定义资源清单
[root@master01 ~/pod]# cat never-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: never-pod
spec:
containers:
- name: my-container
image: busybox
command: ["sh", "-c", "exit 1"]
# 设置重启策略
restartPolicy: Never
[root@master01 ~/pod]# kubectl apply -f never-pod.yaml
pod/never-pod created
[root@master01 ~/pod]# kubectl get pod never-pod
NAME READY STATUS RESTARTS AGE
never-pod 0/1 Error 0 15s
K8s新手系列之Pod的重启策略的更多相关文章
- k8s重启策略
Pod 的重启策略有 3 种,默认值为 Always. Always : 容器失效时,kubelet 自动重启该容器: OnFailure : 容器终止运行且退出码不为0时重启: Never : 不论 ...
- kubernetes之pod生命周期,pod重启策略, 镜像拉取策略
pod声明周期(状态):pending , running, succeeded, failed, unknown 挂起(Pending):Pod 已被 Kubernetes 系统接受,但有一个或者多 ...
- Pod 生命周期和重启策略
Pod 在整个生命周期中被系统定义为各种状态,熟悉 Pod 的各种状态对于理解如何设置 Pod 的调度策略.重启策略是很有必要的. Pod 的状态 状态值 描述 Pending API Server ...
- k8s之深入解剖Pod(二)
目录: Pod配置管理:ConfigMap 容器内获取Pod信息:Downward API Pod生命周期和重启策略 Pod健康检查 一.ConfigMap 将应用所需的配置信息与程序进行分离,可以使 ...
- k8s中yaml文件pod的语法(转)
kubernetes yaml格式的Pod配置文件 # yaml格式的pod定义文件完整内容: apiVersion: v1 #必选,版本号,例如v1 kind: Pod #必选,Pod metada ...
- k8s yaml格式的pod定义文件完整内容
apiVersion: v1 #必选,版本号,例如v1,版本号必须可以用 kubectl api-versions 查询到 . kind: Pod #必选,Pod metadata: #必选,元数据 ...
- .net core i上 K8S(四).netcore程序的pod管理,重启策略与健康检查
上一章我们已经通过yaml文件将.netcore程序跑起来了,但还有一下细节问题可以分享给大家. 1.pod管理 1.1创建pod kubectl create -f netcore-pod.yaml ...
- 记一次k8s pod频繁重启的优化之旅
关键词:k8s.jvm.高可用 1.背景 最近有运维反馈某个微服务频繁重启,客户映像特别不好,需要我们尽快看一下. 听他说完我立马到监控平台去看这个服务的运行情况,确实重启了很多次.对于技术人员来说, ...
- kubernetes系列07—Pod控制器详解
本文收录在容器技术学习系列文章总目录 1.Pod控制器 1.1 介绍 Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无 ...
- 12.深入k8s:kubelet创建pod流程源码分析
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 在上一篇中,我们知道在kubelet中,工作核心就是围绕着整个syn ...
随机推荐
- DeepSeek 不再卡顿,从此告别服务器繁忙,请稍后再试(建议收藏!)
大家好,我是六哥. 由于DeepSeek真的太火了,也许你也跟我一样,常会遇到这样的情况: 真的让人抓狂,10条回复里常常有9条是"服务器blabla,请稍后重试",看到这话,就问 ...
- Linux mint安装外部软件
//更新系统 sudo apt-get update更新ruanjian sudo apt-get upgrade更新系统 //安装浏览器 sudo apt-get install chromium ...
- 用脚本采用wget方式直接下载谷歌云盘里面的文件实操
今天在工作中遇到了一个挑战,在这里和大家分享一下我的解决过程.突然接到一个紧急需求,需要在服务器上部署一个模型文件,而这个文件存储在谷歌云盘里.摆在面前有两个选择: 方案一:先在本地下载,然后再上传到 ...
- AI-接入
前言 前面已经申请了模型,并且通过测试已经可以访问使用了,本篇的接入还是使用Ollama,前面我们已经可以在命令行终端能够进行交互了,现在将AI接入到代码中: 准备 作为一名Neter这里使用的是.n ...
- 库卡机器人KR3R540电源模块常见故障维修解决方法
库卡机器人KR3R540电源模块的常见故障及维修解决方法包括: 电源模块无法正常启动:应检查电源模块的电源连接是否正常,以及电源开关是否开启.如果电源连接正常,但驱 ...
- Python基础--python数据结构(字符串、列表和元组)
前言 !!!注意:本系列所写的文章全部是学习笔记,来自于观看视频的笔记记录,防止丢失.观看的视频笔记来自于:哔哩哔哩武沛齐老师的视频:2022 Python的web开发(完整版) 入门全套教程,零基础 ...
- 【Python】读取写入INI文件
最近,写个abaqus的python脚本,需要输入的item比较多,而且也有一些不经常修改但又可能要修改的option.如果都用abaqus的getinput()和getinputs()函数,那输入的 ...
- [SWPUCTF 2021 新生赛]ez_unserialize
概括 这是一道PHP反序列化的CTF赛题,本意是想用这道题对PHP反序列化进行一定的学习. 过程 我们打开赛题,看看内容 没有发现什么东西,看看他的页面代码 根据他的提示,感觉是存在一个robots. ...
- 微信小程序云函数
小程序开发云环境设置 注意事项 每一个云函数都是一个独立的 nodeJS 项目.所以每个云函数下都有 package.json 文件 错误 前端操作数据库 1 指引 2 新建集合 3 新增记录 4 查 ...
- [源码系列:手写spring] IOC第二节:BeanDefinition和BeanDefinitionRegistry
主要内容 BeanDefinition:顾名思义,就是类定义信息,包含类的class类型.属性值.方法等信息. BeanDefinitionRegistry:添加BeanDefinitionRegis ...