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 ...
随机推荐
- 镇海-APIO联合总结
镇海考试见此处:https://www.cnblogs.com/british-union/p/liankao.html 考的是湖南省队集训,除了第一天有点头昏导致体验很差之外体验非常好,剩下两次考试 ...
- NIT GREAT NITYACKE DESTROYS THE UNIVERSE
线段树 一般线段树维护的东西是什么?设其维护的信息的半群 \((A,+)\),维护标记的半群 \((T,\times)\) 和一种运算 \(*\mapsto A*T\to A\). 要求 \((b+c ...
- SQL优化的20条军规
前言 作为一个写SQL的程序员,代码写得好不好是一回事,但SQL写得烂,性能拉胯,全公司都得为你的慢查询买单,尤其在大数据量表上,SQL写不好就是"内鬼"级别的错误. 今天不整那些 ...
- kubernetes 集群中部署 nginx 服务
kubernetes 部署nginx服务 本章节将介绍如何在kubernetes集群中部署一个nginx服务,并且能够对其进行访问. Namespace Namespace是kubernetes系统中 ...
- SpringBoot整合富文本编辑器(UEditor)
UEditro是一款比较好用的富文本编辑器,所谓的富文本编辑器就是和服务器交互的数据不是普通的字符串文件,而是一些内容包含比较广的字符串,一般是指的html页面,目前比较好用的是百度的UEditor, ...
- 赛博朋克2077/Cyberpunk 2077 v2.1|整合DLC|容量96.9GB|官方简体中文
<赛博朋克2077>是知名<巫师>系列开发商CD PROJEKT RED公布的一款角色扮演游戏,故事设定在黑暗的.科技极度发达的腐败未来世界中,并且兼有沙盒元素与RPG机制.游 ...
- 解释 Git 的基本概念和使用方式
Git是一种分布式版本控制系统,常用于管理和追踪软件开发项目的代码.以下是Git的基本概念和使用方式的解释: 仓库(Repository):Git管理代码的基本单位,可以理解为一个存储代码历史和版本信 ...
- Processing多窗口程序范例(二)
多窗口范例(二),做一个划线生成图像的应用,最后结果: 子窗口划线,主窗口复制多个画布叠加并添加了旋转动画. 范例程序 主程序: package syf.demo.multiwindow2; impo ...
- luogu-P10596题解
简要题意 一个有 \(N\) 个元素的集合有 \(2N\) 个不同子集(包含空集),现在要在这 \(2N\) 个集合中取出若干集合(至少一个),使得它们的交集的元素个数为 \(K\),求取法的方案数, ...
- python 两个函数间如何调用
def a(): pass def b(): pass s=a() b(s) 或者 b(a())