k8s pod重启顺序说明

在 Kubernetes 中,Pod 的重启顺序由 控制器类型 和 Pod 管理策略 共同决定。以下是不同场景下的详细规则和底层逻辑:

一、Pod 重启的触发场景

场景类型触发原因控制方
容器崩溃重启容器进程退出(如异常、OOM)kubelet(节点)
节点故障重启节点宕机或不可达控制器
手动删除重启kubectl delete pod控制器
滚动更新重启镜像/配置更新、kubectl rollout控制器
资源驱逐重启节点资源不足(如内存、磁盘)kubelet

二、不同控制器的 Pod 重启顺序规则

1. 裸 Pod(无控制器管理)

无重启逻辑:直接删除后不会自动重建

特殊场景

  • 如果配置了 restartPolicy: Always,kubelet 会原地重启容器(非 Pod 级别重启,而是container级别重启)

2. Deployment

默认行为

strategy:type: RollingUpdaterollingUpdate:maxUnavailable: 25%maxSurge: 25%

滚动更新顺序

  • 新 Pod 启动:并行创建新版本 Pod(数量由 maxSurge 控制)

  • 旧 Pod 终止:随机选择删除旧 Pod

  • 关键特征:无强顺序保证,注重可用性

  • 故障恢复顺序:完全并行创建,无顺序约束

3. StatefulSet

参考:StatefulSet 基础 | Kubernetes (K8s) 中文

默认策略 (podManagementPolicy: OrderedReady):

  • 创建顺序:web-0 → web-1 → web-2
  • 删除顺序:web-2 → web-1 → web-0
  • 故障恢复:严格按索引顺序重建

并行模式 (podManagementPolicy: Parallel):

  • 所有 Pod 并行操作

  • 示例:同时删除 web-0、web-1、web-2

4. DaemonSet

重启逻辑

  • 每个节点始终运行 1 个 Pod

  • 节点故障时:当节点恢复后,原地重启 Pod

  • 滚动更新:默认随机顺序,可通过 updateStrategy 配置

5. Job/CronJob

重启策略

  • restartPolicy: Never/OnFailure

  • Pod 完全终止后才会创建新实例

  • 严格串行:前一个 Pod 成功结束后才会启动下一个(completions: N 时)

三、底层机制解析

1. 控制器协调循环
// 伪代码示例:Deployment 控制器逻辑
for {currentPods := listPods(deploymentLabel)desiredPods := calculateDesiredReplicas()// 计算需要创建/删除的 Poddiff := desiredPods - len(currentPods)if diff > 0 {createPodsParallel(diff) // 并行创建} else if diff < 0 {deletePodsRandomly(-diff) // 随机删除}
}
2. 关键 API 字段控制
apiVersion: apps/v1
kind: StatefulSet
spec:updateStrategy:type: RollingUpdaterollingUpdate:partition: 2 # 仅更新索引 ≥2 的 Pod(web-2, web-3...)podManagementPolicy: OrderedReady # 或 Parallel

四、实战验证方法

1. 观察滚动更新过程
# 终端1:实时监控 Pod
kubectl get pods -l app=nginx -w# 终端2:触发更新
kubectl set image deployment/nginx nginx=nginx:1.25
2. 模拟节点故障
# 随机选择一个节点
node=$(kubectl get nodes -o jsonpath='{.items[?(@.status.conditions[?(@.type=="Ready")].status=="True")].metadata.name}' | tr ' ' '\n' | shuf -n 1)# 封锁节点
kubectl cordon $node# 删除该节点上的 Pod
kubectl delete pods --field-selector spec.nodeName=$node

五、最佳实践建议

有状态服务

  • 使用 StatefulSet + OrderedReady 策略

  • 配合 ReadinessProbe 确保顺序依赖

readinessProbe:exec:command: ["/bin/sh", "-c", "check_dependency web-$(hostname | cut -d'-' -f2)"]

无状态服务

affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues: [nginx]topologyKey: kubernetes.io/hostname
  • 使用 Deployment + MaxSurge=30% 加速恢复

  • 配置反亲和性避免集中重启

关键监控指标

# Pod 重启次数
kube_pod_container_status_restarts_total{namespace="production"}# 滚动更新进度
kube_deployment_status_replicas_updated{deployment="nginx"}

六、特殊场景处理

场景:需要自定义重启顺序

解决方案

  1. 使用 Operator 自定义控制器逻辑

  2. 通过 Finalizers 控制删除顺序

    // 在控制器中设置删除顺序
    func (c *Controller) handlePodDeletion(pod *v1.Pod) {if pod.DeletionTimestamp == nil {return}// 检查前置 Pod 是否已删除if !isPredecessorDeleted(pod) {c.requeuePod(pod) // 重新入队等待}
    }
场景:需要零停机重启

解决方案

# Deployment 配置
strategy:rollingUpdate:maxSurge: 100%  # 先启动所有新 PodmaxUnavailable: 0%

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/75585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Modbus RTU与TCP通信示例

准备工作 安装 libmodbus 库 Linux (Debian/Ubuntu): sudo apt-get install libmodbus-dev Windows: 下载预编译库 libmodbus for Windows&#xff0c;并配置开发环境。 示例 1.Modbus RTU (串行通信) #include <stdio.h> #include <modbus/modbus.h> ​ int…

maven项目添加第三方JAR包

项目开发过程中&#xff0c;不可避免的需要用到一些maven库&#xff08;公共库、司库等&#xff09;中没有的冷门jar包依赖&#xff0c;这时&#xff0c;可以将这些第三方JAR包安装到本地maven仓库中&#xff0c;实现项目依赖的一致性。具体步骤如下&#xff1a; 1、下载jar包 …

Sentinel实战(三)、流控规则之流控效果及流控小结

spring cloud Alibaba-Sentinel实战&#xff08;三&#xff09;、流控效果流控小结 一、流控规则&#xff1a;流控效果一&#xff09;、流控效果&#xff1a;预热1、概念含义2、案例流控规则设置测试结果 二&#xff09;、流控效果&#xff1a;排队等待1、概念含义2、案例流控规…

c++ (通用引用)和(左值引用)区别

问&#xff1a; for (auto &&ipKF : vpKFs) {} 使用 一个& 和 两个&& 区别和联系&#xff1f; c 在 C 中&#xff0c;auto&& 和 auto& 在范围基于的 for 循环中有重要的区别&#xff0c;涉及到引用类型和值类别的处理。让我们详细解释它们的区…

使用高德api实现天气查询

创建应用获取 Key 天气查询-基础 API 文档-开发指南-Web服务 API | 高德地图API 代码编写 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…

XEOS 与 AutoMQ 推出联合方案,共筑云原生 Kafka 新生态

近日&#xff0c;XSKY 星辰天合旗下企业级对象存储产品 XEOS 与 AutoMQ 云原生消息队列系统完成了产品兼容性适配互认证&#xff0c;致力于为客户在私有云和混合云环境中提供云原生的 Kafka 解决方案。 在云计算和大数据时代&#xff0c;消息队列作为分布式系统的重要组成部分…

Synology NAS 部署WPS-Office

记录在群晖NAS上部署WPS-Office实现网页上编辑文档 目录 1.思考及想法由来2.问题解决2.1 群晖NAS Docker使用2.2 部署wps-office参考1:【Docker+WPS Office】远程办公:Docker + WPS Office 私人云办公室2.3 群晖NAS映射文件夹权限参考1:参考2:群晖NAS中普通用户获取Docker容…

Vue自定义指令最佳实践教程

Vue 3 显著增强了自定义指令的功能&#xff0c;使其封装更加灵活和易用。本文将分为基础和进阶两部分&#xff0c;介绍如何实现常用的自定义指令&#xff0c;并提供最佳的项目组织方式。 前言 本文以复制文本的自定义指令详细介绍自定义指令的基础知识 多个自定义指令如何进行…

用DrissionPage升级维基百科爬虫:更简洁高效的数据抓取方案

一、原方案痛点分析 原代码使用urllibBeautifulSoup组合存在以下问题&#xff1a; 动态内容缺失&#xff1a;无法获取JavaScript渲染后的页面内容 反爬能力弱&#xff1a;基础请求头易被识别为爬虫 代码冗余&#xff1a;需要单独处理SSL证书验证 扩展性差&#xff1a;难以应…

23种设计模式-结构型模式-代理

文章目录 简介问题解决方案代码核心设计要点 总结 简介 代理是一种结构型设计模式&#xff0c;让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问&#xff0c;并允许在把请求提交给对象前后进行一些处理。 问题 为什么要控制对于某个对象的访问呢&#xff1f…

基于Transformer框架实现微调后Qwen/DeepSeek模型的非流式批量推理

在基于LLamaFactory微调完具备思维链的DeepSeek模型之后(详见《深入探究LLamaFactory推理DeepSeek蒸馏模型时无法展示<think>思考过程的问题》),接下来就需要针对微调好的模型或者是原始模型(注意需要有一个本地的模型文件,全量微调就是saves下面的文件夹,如果是LoRA,…

基于OpenCV的指纹验证:从原理到实战的深度解析

指纹识别的技术革命与OpenCV的轻量级方案 在生物特征识别领域&#xff0c;指纹识别始终以独特性和稳定性占据核心地位。随着OpenCV等开源视觉库的普及&#xff0c;这项看似"高大上"的技术正逐步走向民用化开发。本文将突破传统算法框架&#xff0c;提出一套基于OpenC…

十五届蓝桥杯省赛Java B组(持续更新..)

目录 十五届蓝桥杯省赛Java B组第一题&#xff1a;报数第二题&#xff1a;类斐波那契数第三题&#xff1a;分布式队列第四题&#xff1a;食堂第五题&#xff1a;最优分组第六题&#xff1a;星际旅行第七题&#xff1a;LITS游戏第八题&#xff1a;拼十字 十五届蓝桥杯省赛Java B…

多模态学习(八):2022 TPAMI——U2Fusion: A Unified Unsupervised Image Fusion Network

论文链接&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9151265 目录 一.摘要 1.1 摘要翻译 1.2 摘要解析 二.Introduction 2.1 Introduciton翻译 2.2 Introduction 解析 三. related work 3.1 related work翻译 3.2 relate work解析 四…

电脑屏幕亮度随心控,在Windows上自由调整屏幕亮度的方法

调整电脑屏幕的亮度对于保护视力和适应不同环境光线条件非常重要。无论是在白天强光下还是夜晚昏暗环境中&#xff0c;合适的屏幕亮度都能让您的眼睛更加舒适。本文中简鹿办公小编将向您介绍几种在 Windows 系统中调整屏幕亮度的方法。 方法一&#xff1a;使用快捷键 大多数笔…

AF3 OpenFoldDataset类looped_samples方法解读

AlphaFold3 data_modules 模块的 OpenFoldDataset 类的 looped_samples 方法用于 循环采样数据,确保数据能被不断地提供,适用于 PyTorch 的 DataLoader 在训练过程中迭代读取数据。dataset_idx 指定了当前要处理的数据集(即 self.datasets[dataset_idx]) 源代码: def loo…

lua表table和JSON字符串互转

--print("local ssxc{\n"..string.gsub(str,":","").."\n}") Utils {} ---------------------------------------------------------------------------------- -- Lua-Table 与 string 转换 local function value2string(value, isA…

请谈谈分治算法,如何应用分治算法解决大规模问题?

分治算法实战解析与前端应用指南 分治算法本质剖析 分治算法的核心在于"分而治之"&#xff0c;其工作流程可分解为三个关键阶段&#xff1a; 分解阶段&#xff08;Divide&#xff09;&#xff1a;将复杂问题拆分为若干个相互独立的子问题攻克阶段&#xff08;Conqu…

基于BusyBox构建ISO镜像

1. 准备 CentOS 7.9 3.10.0-957.el7.x86_64VMware Workstation 建议&#xff1a;系统内核<3.10.0 使用busybox < 1.33.2版本 2. 安装busybox # 安装依赖 yum install syslinux xorriso kernel-devel kernel-headers glibc-static ncurses-devel -y# 下载 wget https://…

Node.js 与 MySQL:深入理解与高效实践

Node.js 与 MySQL:深入理解与高效实践 引言 随着互联网技术的飞速发展,Node.js 作为一种高性能的服务端JavaScript运行环境,因其轻量级、单线程和事件驱动等特点,受到了广大开发者的青睐。MySQL 作为一款开源的关系型数据库管理系统,以其稳定性和可靠性著称。本文将深入…