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 ...
随机推荐
- linux mint安装eclipse
安装eclipse之前需要先安装配置jdk,参考上面, 一.Eclipse的下载与安装 1.首先,在Eclipse的官网中下载最新版的Luna SR2http://www.eclipse.org/do ...
- clickhouse 为什么如此快及优化
一.clickhouse 为什么如此快 1)优秀的代码,对性能的极致追求 clickhouse 是 CPP 编写的,代码中大量使用了 CPP 最新的特性来对查询进行加速. 2)优秀的执行引擎以及存储引 ...
- C#/.NET/.NET Core技术前沿周刊 | 第 25 期(2025年2.1-2.9)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...
- swiper8.x在vue中的wtf
首先我是想开启鼠标滚动的效果,在官网上发现如下说法 引入就引入吧,引入路径还不说,在网上看其他教程发现路径是 引入完了,怎么办呢,又不会了,官网没有教程,网上的教程全是关于vue-awesome-sw ...
- autMan奥特曼机器人-autMan的PHP环境
直装版请自行安装php环境. docker版本预置了php环境,如下图: 如果使用插件"test php"测试环境时,实时日志有报错如下: 可进入终端,输入两条命令 apk add ...
- 幻兽帕鲁/Palworld/支持网络联机 v0.1.5.1
游戏介绍 在广阔的世界中收集神奇的生物"帕鲁",派他们进行战斗.建造.做农活,工业生产等,这是一款支持多人游戏模式的全新开放世界生存制作游戏. 注意事项 先启动STEAM客户端,在 ...
- 2024.11.14随笔&联考总结
前言 今天联考直接炸纲了.但是不得不说:HEZ 的题要比 BSZX 好多了. 联考 今天联考题说实话难度应该比较适合我.第一题是推结论的题,我赛时 20min 想出正解,但是有两个细节没有考虑清楚,导 ...
- ragflow-ollama 知识库建立测试
ollama查看模型 C:\Users\DK>ollama show deepseek-r1:7b Model architecture qwen2 parameters 7.6B contex ...
- Windows 提权-不安全的 GUI 程序
本文通过 Google 翻译 Insecure GUI Applications – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进 ...
- thinkphp或laravel连接sql server 2014数据库
问题描述:平时使用最多为mysql数据库,目前有项目数据库为sql server 2014,列出连接全过程 首先下载安装SQLserver的odbc开放数据库链连接,下载地址:https://lear ...