当前位置: 首页 > news >正文

【Kubernetes 集群核心概念:Pod】pod生命周期介绍【五】

5.1 Pod生命周期

Pod的生命周期指的是从Pod创建到终止的整个过程。它分为以下两种常见情况:

  • 长期运行Pod: 例如运行HTTP服务的Pod,它在正常情况下会一直运行,但可以手动删除或终止。
  • 短期运行Pod: 例如执行计算任务的Pod,任务完成后自动终止。

5.1.1 容器启动

  1. 初始化容器(Init Containers):在Pod中的主容器启动之前,初始化容器会先执行一些环境设置或初始化操作。
  2. 主容器启动:初始化完成后,Pod的主容器开始启动。
  3. Post-Start 操作:主容器启动后,会执行一个启动后钩子操作(PostStart Hook),用于启动后的一些任务。
  4. 健康检查:主容器启动后,Kubernetes会通过两种健康检查来确保容器的运行状态:
    • 存活状态检查(Liveness Probe):检查容器是否存活,如果失败,Kubernetes会尝试重新启动容器。
    • 准备就绪检查(Readiness Probe):检查容器是否准备好接受请求。如果失败,Pod会被从服务端点列表中移除,直到恢复健康。

5.1.2 容器终止

  1. Pre-Stop 操作:在容器终止前,可以设置一个终止前钩子(PreStop Hook),执行容器终止前的清理工作。
  2. 强制终止:如果容器未能在规定时间内终止,Kubernetes会在大约30秒后强制终止容器。
  3. 容器重启:根据容器的重启策略,Pod的容器可能会被重启。

5.1.3 容器重启策略

  • Always:容器挂掉后会一直重启,这是默认策略。
  • OnFailure:容器状态为错误时才重启,即容器正常终止时不会重启。
  • Never:容器挂掉后不会重启。

对于Always策略,容器挂掉后会立即重启,如果再次失败,会延时重启,例如第一次失败后10秒重启,第二次失败后20秒重启,以此类推。


5.2 HealthCheck 健康检查

容器可能因为服务未启动或端口不正确等问题,无法正常运行。为此,Kubernetes提供了健康检查机制来检测Pod的状态。

5.2.1 Health Check方式

  • Liveness Probe(存活状态探测):检查容器是否仍然在运行。如果失败,kubelet会杀死容器并根据重启策略决定是否重启。
  • Readiness Probe(就绪型探测):检查容器是否准备好为外部请求提供服务。如果失败,Pod将被移除出服务的端点列表。
  • Startup Probe:检查容器中的应用是否已经启动。如果启动探测失败,kubelet会杀死容器,并按重启策略重启。

5.2.2 Probe 探测方式

方式说明
Exec执行命令
HTTPGet通过HTTP请求指定URL路径
TCP通过TCP连接指定端口
gRPC使用gRPC执行远程过程调用,若返回状态为" SERVING"则认为探测成功

5.2.3 liveness-exec 示例

  1. 创建YAML文件:
apiVersion: v1
kind: Pod
metadata:name: liveness-execnamespace: default
spec:containers:- name: livenessimage: busyboximagePullPolicy: IfNotPresentargs:- /bin/sh- -c- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600livenessProbe:exec:command:- cat- /tmp/healthyinitialDelaySeconds: 5periodSeconds: 5
  1. 应用YAML文件:
kubectl apply -f pod-liveness-exec.yml
  1. 查看Pod状态:
kubectl describe pod liveness-exec

通过观察日志和事件,可以看到容器因健康检查失败而被重启,且重启间隔时间逐渐增加。


5.2.4 liveness-httpget 示例

  1. 创建YAML文件:
apiVersion: v1
kind: Pod
metadata:name: liveness-httpgetnamespace: default
spec:containers:- name: livenessimage: nginx:1.15-alpineports:- name: httpcontainerPort: 80livenessProbe:httpGet:port: httppath: /index.htmlinitialDelaySeconds: 3periodSeconds: 5
  1. 应用YAML文件:
kubectl apply -f pod-liveness-httpget.yml
  1. 通过删除nginx主页文件来模拟故障,并验证容器的健康检查机制是否会触发重启。

5.2.5 readiness 示例

  1. 创建YAML文件:
apiVersion: v1
kind: Pod
metadata:name: readiness-httpgetnamespace: default
spec:containers:- name: readinessimage: nginx:1.15-alpineports:- name: httpcontainerPort: 80readinessProbe:httpGet:port: httppath: /index.htmlinitialDelaySeconds: 3periodSeconds: 5
  1. 应用YAML文件:
kubectl apply -f pod-readiness-httpget.yml
  1. 通过删除nginx主页文件验证Readiness Probe的工作原理。

5.2.6 readiness + liveness 综合示例

  1. 创建YAML文件:
apiVersion: v1
kind: Pod
metadata:name: readiness-liveness-httpgetnamespace: default
spec:containers:- name: readiness-livenessimage: nginx:1.15-alpineports:- name: httpcontainerPort: 80livenessProbe:httpGet:port: httppath: /index.htmlinitialDelaySeconds: 1periodSeconds: 3readinessProbe:httpGet:port: httppath: /index.htmlinitialDelaySeconds: 5periodSeconds: 5
  1. 应用YAML文件:
kubectl apply -f pod-readiness-liveness.yml

5.3 Post-Start & Pre-Stop 生命周期钩子

  • Post-Start:在容器启动后立即执行的操作,常用于目录创建或其他初始化任务。
  • Pre-Stop:在容器停止前执行的操作,常用于优雅停机。

通过配置YAML文件,可以灵活控制Pod的生命周期,确保容器在启动和停止时完成必要的工作。


5.4 Pod故障排除

状态描述
PendingPod已被接收,但容器尚未启动。
RunningPod已绑定到节点,并且至少有一个容器正在运行。
Completed所有容器已成功终止,不会重新启动。
Failed容器已经退出并且终止状态非零。
CrashLoopBackOff容器因错误反复崩溃,导致Kubernetes无法正常启动。

使用kubectl describe pod <pod_name>kubectl logs <pod_name>可以帮助定位问题。


总结

本文讲解了Pod的生命周期,包括容器的启动、运行、健康检查、终止及相关的钩子操作。通过配置适当的健康检查、重启策略和生命周期事件,Kubernetes能有效地管理Pod的运行状态。掌握这些操作能够帮助你在实际部署中更好地监控和调优Kubernetes集群。

你是否曾经因为错误的健康检查配置而导致服务不可用?如何在生产环境中实现高效的Pod生命周期管理?

相关文章:

【Kubernetes 集群核心概念:Pod】pod生命周期介绍【五】

5.1 Pod生命周期 Pod的生命周期指的是从Pod创建到终止的整个过程。它分为以下两种常见情况&#xff1a; 长期运行Pod&#xff1a; 例如运行HTTP服务的Pod&#xff0c;它在正常情况下会一直运行&#xff0c;但可以手动删除或终止。短期运行Pod&#xff1a; 例如执行计算任务的…...

c++的虚继承说明、案例、代码

虚继承的基本概念 在 C 中&#xff0c;虚继承主要用于解决多继承时可能出现的菱形继承问题。菱形继承是指一个类有两个&#xff08;或更多&#xff09;子类&#xff0c;而这两个子类又同时继承自一个共同的基类&#xff0c;当这些子类又被另一个类继承时&#xff0c;就形成了菱…...

小米PC电脑手机互联互通,小米妙享,小米电脑管家,老款小米笔记本怎么使用,其他品牌笔记本怎么使用,一分钟教会你

说在前面 之前我们体验过妙享中心&#xff0c;里面就有互联互通的全部能力&#xff0c;现在有了小米电脑管家&#xff0c;老款的笔记本竟然用不了&#xff0c;也可以理解&#xff0c;毕竟老款笔记本做系统研发的时候没有预留适配的文件补丁&#xff0c;至于其他品牌的winPC小米…...

介绍SSD硬盘

SSD硬盘&#xff08;固态硬盘&#xff0c;Solid State Drive&#xff09;是一种利用闪存技术存储数据的存储设备&#xff0c;与传统的机械硬盘&#xff08;HDD&#xff09;不同&#xff0c;SSD没有任何活动部件&#xff0c;因此其性能和耐用性较为优越。以下是SSD硬盘的一些主要…...

CMAKE常用命令详解

NDK List基本用法 Get–获取列表中指定索引的元素 list(Get list_name index output_var)解释 list_name: 要操作集合的名称index: 要取得的元素下标output_var: 保存从集合中取得元素的结果 栗子 list(GET mylist 0 first_element) # 获取第一个元素APPEND–在列表末尾…...

Vue3的通灵之术Teleport

前言 近期Vue3更新了一些新的内容&#xff0c;我都还没有一个一个仔细去看&#xff0c;但是还是有必要去解读一下新内容的。就先从Teleport 开始吧。 官方对 Teleport 的解释是&#xff1a;<Teleport> 是一个内置组件&#xff0c;它可以将一个组件内部的一部分模板“传…...

ue5第三人称闯关游戏学习(一)

视频资料38 - Compilers and Editors_哔哩哔哩_bilibili 上一个第一人称射击项目做完 接下来要更深入学习。 引入资产与C来创建第三人称闯关游戏 这次要引入的资产有两个分别是 Unreal Learning Kit&#xff1a;Game和stylized character kit: casual 01 不过有个比较麻…...

IIC 随机写+多次写 可以控制写几次

verilog module icc_tx#(parameter SIZE 2 , //用来控制写多少次 比如地址是0000 一个地址只能存放8bit数据 超出指针就会到下一个地址0001parameter CLK_DIV 50_000_000 ,parameter SPEED 100_000 ,parameter LED 50 )( input wire c…...

controller中的参数注解@Param @RequestParam和@RequestBody的不同

现在controller中有个方法&#xff1a;&#xff08;LoginUserRequest是一个用户类对象&#xff09; PostMapping("/test/phone")public Result validPhone(LoginUserRequest loginUserRequest) {return Result.success(loginUserRequest);}现在讨论Param("login…...

手搓人工智能-最优化算法(1)最速梯度下降法,及推导过程

“Men pass away, but their deeds abide.” 人终有一死&#xff0c;但是他们的业绩将永存。 ——奥古斯坦-路易柯西 目录 前言 简单函数求极值 复杂函数梯度法求极值 泰勒展开 梯度&#xff0c;Nabla算子 Cauchy-Schwarz不等式 梯度下降算法 算法流程 梯度下降法…...

多目标优化算法——多目标粒子群优化算法(MOPSO)

Handling Multiple Objectives With Particle Swarm Optimization&#xff08;多目标粒子群优化算法&#xff09; 一、摘要&#xff1a; 本文提出了一种将帕累托优势引入粒子群优化算法的方法&#xff0c;使该算法能够处理具有多个目标函数的问题。与目前其他将粒子群算法扩展…...

Swift——自动引用计数ARC

ARC ARC是swift使用的一种管理应用程序内存的机制&#xff0c;对于C语言我们知道&#xff0c;当我们申请一块空间&#xff0c;通常需要手动释放&#xff0c;不然会造成空间浪费&#xff0c;而有了ARC机制&#xff0c;你无需考虑内存的管理&#xff0c;因为ARC会在类的实例不再…...

【Quarkus】基于CDI和拦截器实现AOP功能(进阶版)

Quarkus 基于CDI和拦截器实现AOP功能&#xff08;进阶版&#xff09; 拦截器的属性成员拦截器的重复使用基于属性成员和重复使用的拦截器的发消息案例 本节来了解一下拦截器高级特性&#xff08;拦截器的重复使用和属性成员&#xff09;&#xff0c;官网说明&#xff1a;https:…...

【踩坑日记】【教程】如何在ubuntu服务器上配置公钥登录以及bug解决

前言 在日常开发和运维中&#xff0c;为了提高服务器登录的安全性&#xff0c;我们通常会选择使用 SSH 密钥认证 来替代传统的密码登录。然而&#xff0c;在配置 SSH 公钥登录的过程中&#xff0c;可能会遇到各种坑和 Bug。本文将从零开始&#xff0c;手把手教你如何在 Ubuntu…...

insmod一个ko提供基础函数供后insmod的ko使用的方法

一、背景 在内核模块开发时&#xff0c;多个不同的内核模块&#xff0c;有时候可能需要都共用一些公共的函数&#xff0c;比如申请一些平台性的公共资源。但是&#xff0c;这些公共的函数又不方便去加入到内核镜像里&#xff0c;这时候就需要把这些各个内核模块需要用到的一些…...

七、传统循环神经网络(RNN)

传统循环神经网络 RNN 前言一、RNN 是什么&#xff1f;1.1 RNN 的结构1.2 结构举例 二、RNN 模型的分类2.1 按照 输入跟输出 的结构分类2.2 按照 内部结构 分类 三、传统 RNN 模型3.1 RNN内部结构图3.2 内部计算公式3.3 其中 tanh 激活函数的作用3.4 传统RNN优缺点 四、代码演示…...

LeetCode:19.删除链表倒数第N个节点

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;19.删除链表倒数第N个节点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表…...

【RISC-V CPU debug 专栏 2 -- Debug Module (DM), non-ISA】

文章目录 调试模块(DM)功能必须支持的功能可选支持的功能兼容性要求规模限制Debug Module Interface (DMI)总线类型地址与操作地址空间控制机制Debug Module Interface Signals请求信号响应信号信号流程Reset Control复位控制方法全局复位 (`ndmreset`)Hart 复位 (`hartreset…...

单片机学习笔记 11. 外部中断

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…...

基于stm32的智能教室管理系统/智能家居系统

基于stm32的智能教室管理系统/智能家居系统 持续更新&#xff0c;欢迎关注!!! ** 基于stm32的智能教室管理系统/智能家居系统 ** 目前&#xff0c;物联网已广泛应用在我们的生活中。智慧校园是将校园中的生活、学习、工作等相关的资源联系在一起&#xff0c;实现管理的智能化…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...