POD创建与删除简单描述
创建一个 Pod 的过程可以分为以下几个步骤:
- 用户使用 kubectl create 命令或 YAML 文件向 API 服务器发送创建 Pod 的请求。
- API 服务器将请求转换为 Kubernetes 的内部对象,并将 Pod 的状态设置为 Pending。
- 调度器根据 Pod 的资源需求和节点的资源情况,将 Pod 调度到合适的节点上。
- 节点上的 kubelet 接收调度器调度过来的 Pod,并将其状态设置为 Running。
- kubelet 为 Pod 创建容器,并为容器分配资源。
容器启动,并开始运行。
白话解释:
用户向 API 服务器说:“我要创建一个 Pod。”
API 服务器把用户的话转换成 Kubernetes 内部的语言,然后告诉调度器:“这个 Pod 要创建了。”
调度器把这件事告诉 kubelet,kubelet 就开始准备创建 Pod。
kubelet 为 Pod 创建容器,并为容器分配资源。
容器启动,并开始运行。用户->>API 服务器: 提交 Pod 创建请求API 服务器->>调度器: 转换 Pod 创建请求调度器->>节点: 调度 Pod节点->>kubelet: 接收 Podkubelet->>容器: 创建容器容器->>: 启动
删除一个 Pod 时,Kubernetes 会执行以下步骤:
-
- 用户使用
kubectl delete
命令或 YAML 文件向 API 服务器发送删除 Pod 的请求。
- 用户使用
-
- API 服务器将请求转换为 Kubernetes 的内部对象,并将 Pod 的状态设置为
Terminating
。
- API 服务器将请求转换为 Kubernetes 的内部对象,并将 Pod 的状态设置为
-
- 调度器将 Pod 的状态设置为
Terminating
。
- 调度器将 Pod 的状态设置为
-
- kubelet 将 Pod 的状态设置为
Terminating
,并向 Pod 中的每个容器发送 SIGTERM 信号,通知容器准备退出。
- kubelet 将 Pod 的状态设置为
-
- 容器在指定的超时时间内退出。如果容器在超时时间内未退出,则 kubelet 会向容器发送 SIGKILL 信号,强制容器退出。
-
- kubelet 删除 Pod 的相关资源,包括 Pod 的定义、容器的镜像、容器的日志等。
-
etcd 是 Kubernetes 集群的核心组件,负责存储 Kubernetes 的所有数据。在删除 Pod 时,etcd 需要执行以下操作:
-
- 删除 Pod 的定义。
-
- 删除 Pod 的相关资源,包括容器的镜像和容器的日志等。
白话解释
* 用户向 API 服务器说:“我要删除一个 Pod。”
* API 服务器把用户的话转换成 Kubernetes 内部的语言,然后告诉调度器:“这个 Pod 要删除了。”
* 调度器把这件事告诉 kubelet,kubelet 把这件事告诉 Pod 中的容器:“你们要被删除了。”
* 容器听到 kubelet 的话,就开始准备退出。如果容器在规定的时间内没有退出,kubelet 就会强行让它退出。
* 容器退出后,kubelet 会把 Pod 的相关资源都删除掉。etcd 是 Kubernetes 的记事本,负责记住 Kubernetes 的所有信息。在删除 Pod 时,etcd 要把 Pod 的相关信息都删除掉。
- Pending:Pod 尚未被调度到任何节点。
- Running:Pod 已被调度到一个节点,并且所有容器都已启动并正在运行。
- Succeeded:Pod 中的所有容器都已成功终止。
- Failed:Pod 中的至少一个容器已失败。
- Unknown:Pod 的状态无法确定。
Pending 阶段
在 Pending 阶段,Pod 尚未被调度到任何节点。Pod 处于此阶段的原因可能有以下几种:
- Pod 尚未被用户创建。
- Pod 已被创建,但调度器尚未将其调度到任何节点。
- Pod 已被调度到一个节点,但该节点尚未准备好运行 Pod。
Running 阶段
在 Running 阶段,Pod 已被调度到一个节点,并且所有容器都已启动并正在运行。Pod 处于此阶段的时间可能会持续很长,直到 Pod 被终止。
Succeeded 阶段
在 Succeeded 阶段,Pod 中的所有容器都已成功终止。Pod 处于此阶段的原因可能是以下几种:
- Pod 的定义中包含了
terminationGracePeriodSeconds
字段,并且该字段指定的超时时间已过。 - Pod 的定义中包含了
restartPolicy
字段,并且该字段指定的策略为Never
。
Failed 阶段
在 Failed 阶段,Pod 中的至少一个容器已失败。Pod 处于此阶段的原因可能是以下几种:
- Pod 的定义中包含了
restartPolicy
字段,并且该字段指定的策略为Always
或OnFailure
。 - Pod 的定义中包含了
terminationGracePeriodSeconds
字段,并且该字段指定的超时时间已过,但 Pod 中的容器仍未成功终止。
Unknown 阶段
在 Unknown 阶段,Pod 的状态无法确定。Pod 处于此阶段的原因可能是以下几种:
- Pod 的定义中包含了
restartPolicy
字段,并且该字段指定的策略为Never
。 - Pod 的定义中包含了
terminationGracePeriodSeconds
字段,并且该字段指定的超时时间已过,但 Pod 仍未被调度到任何节点。
Pod 的状态转换
Pod 的状态可能会从一个阶段转换到另一个阶段。以下是 Pod 状态转换的可能情况:
- Pending -> Running:Pod 已被调度到一个节点,并且所有容器都已启动。
- Running -> Succeeded:Pod 中的所有容器都已成功终止。
- Running -> Failed:Pod 中的至少一个容器已失败。
- Pending -> Unknown:Pod 的定义中包含了
restartPolicy
字段,并且该字段指定的策略为Never
。 - Running -> Unknown:Pod 的定义中包含了
terminationGracePeriodSeconds
字段,并且该字段指定的超时时间已过,但 Pod 仍未被调度到任何节点。
控制 Pod 的状态
可以使用 Kubernetes 的 API 或命令行工具来控制 Pod 的状态。使用 kubectl delete
命令来终止 Pod。
还可以使用 Pod 的 restartPolicy
字段来控制 Pod 在失败时是否重启。如果您将 restartPolicy
字段设置为 Never
,则 Pod 将不会在失败时重启。
Deployment 和 ReplicaSet 都是 Kubernetes 中用于管理 Pod 副本的对象。它们的主要区别在于:
- **Deployment 是一个更高级的抽象。**它提供了一些 ReplicaSet 没有的功能,例如:
- 滚动更新:Deployment 可以自动滚动更新 Pod 副本,而不会影响应用程序的可用性。
- 回滚:Deployment 可以自动回滚到以前的版本。
- 伸缩:Deployment 可以自动伸缩 Pod 副本的数量。
- **ReplicaSet 是一个更简单的对象。**它只负责管理 Pod 副本的数量。
1.28.x 版本的 Kubernetes 仍然支持 ReplicaSet。但是,新版本的 Kubernetes 建议使用 Deployment 来管理 Pod 副本。Deployment 提供了 ReplicaSet 没有的功能,可以简化应用程序的部署和管理。
以下是 Deployment 和 ReplicaSet 的具体用途:
- **Deployment 适合需要进行滚动更新、回滚和伸缩的应用程序。**例如,Web 应用程序、微服务等。
- **ReplicaSet 适合不需要进行滚动更新、回滚和伸缩的应用程序。**例如,批处理应用程序、数据库等。
具体选择哪种对象,需要根据应用程序的实际需求来决定。
StatefulSet 更新 Pods 很慢的原因主要有以下几个:
- **StatefulSet 的更新策略是滚动更新。**在滚动更新过程中,StatefulSet 会逐个更新 Pod,并将旧 Pod 从集群中删除。这会导致应用程序的不可用时间。
- **StatefulSet 的存储卷是持久化的。**在更新 Pod 时,StatefulSet 需要将旧 Pod 的存储卷数据复制到新 Pod。这会导致更新过程变慢。
如果没有存储的情况下,StatefulSet 更新 Pods 仍然很慢的原因是,StatefulSet 仍然需要将旧 Pod 从集群中删除。这会导致应用程序的不可用时间。
以下是一些可以提高 StatefulSet 更新速度的建议:
- **使用自定义的更新策略。可以使用“暂停更新”策略,在更新所有 Pod 之前暂停应用程序。
- **使用快照存储。**快照存储可以加快存储卷数据的复制速度。
- **使用复制 Pod。**复制 Pod 可以提高应用程序的可用性。
相关文章:
POD创建与删除简单描述
创建一个 Pod 的过程可以分为以下几个步骤: 用户使用 kubectl create 命令或 YAML 文件向 API 服务器发送创建 Pod 的请求。API 服务器将请求转换为 Kubernetes 的内部对象,并将 Pod 的状态设置为 Pending。调度器根据 Pod 的资源需求和节点的资源情况&…...
AndroidStudio打包报错记录(commons-logging,keystore password was incorrect)
场景: AndroidStudio2022打包APK的时报错 1.commons-logging依赖冲突 报错主要信息如下 Error: commons-logging defines classes that conflict with classes now provided by Android. 通过报错信息可以看出,项目中的commons-logging与Android系统自带…...
如何构建企业数据资产?数据资产如何入资产负债表 ?
一、构建企业数据资产 1. 数据收集 需要从多渠道收集数据,包括企业内部系统、市场调研、社交媒体、客户反馈等。在收集数据时,需要注意数据的真实性、完整性和可靠性。同时,需要考虑如何将不同渠道的数据进行整合和标准化,以便后…...

代码随想录算法训练营Day 47 || 198.打家劫舍、213.打家劫舍II、337.打家劫舍 III
198.打家劫舍 力扣题目链接(opens new window) 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系…...

(论文阅读24/100)Visual Tracking with Fully Convolutional Networks
文献阅读笔记(sel - CNN) 简介 题目 Visual Tracking with Fully Convolutional Networks 作者 Lijun Wang, Wanli Ouyang, Xiaogang Wang, and Huchuan Lu 原文链接 http://202.118.75.4/lu/Paper/ICCV2015/iccv15_lijun.pdf 【DeepLearning】…...
第10章 文件和异常
目录 1. 从文件中读取数据1.1 读取整个文件1.2 逐行读取1.3 创建一个包含文件各行内容的列表 2. 写入文件2.1 写入空文件2.2 写入多行2.3 附加到文件 3. 异常使用try-except-else代码块 4. 存储数据使用json.dump()和json.load() 1. 从文件中读取数据 1.1 读取整个文件 with …...

【云栖2023】张治国:MaxCompute架构升级及开放性解读
简介: 本文根据2023云栖大会演讲实录整理而成,演讲信息如下 演讲人:张治国|阿里云智能计算平台研究员、阿里云MaxCompute负责人 演讲主题:MaxCompute架构升级及开放性解读 活动:2023云栖大会 MaxCompute发展经历了…...

【经验模态分解】4.信号由时域向频域的转换
/*** poject 经验模态分解及其衍生算法的研究及其在语音信号处理中的应用* file 傅里叶变换与小波变换* author jUicE_g2R(qq:3406291309)* * language MATLAB* EDA Base on matlabR2022b* editor Obsidian(黑曜石笔记软件&#…...
STM32的M4内核在keil上面float访问就hard_fault原因
使用 Keil MDK(Microcontroller Development Kit)开发时,出现硬件故障(hard fault)通常是由于访问浮点数(float)数据类型时,浮点单元配置不正确或浮点单元启用导致的。以下是一些可能…...
【LeetCode】217. 存在重复元素
217. 存在重复元素 难度:简单 题目 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。 示例 1: 输入:nums [1,2,3,1] 输出࿱…...

【Redis缓存架构实战常见问题剖析】
文章目录 一、Redis缓存架构实战剖析1.1、大规模的商品缓存数据冷热分离机制1.2、缓存击穿导致线上数据压力暴增解决方案1.3、缓存穿透及其解决方案剖析1.4、突发性的热点缓存数重建导致系统压力暴增问题分析1.5、Redis分布式锁解决缓存与数据库双写不一致问题剖析1.6、利用多级…...

mac M2 pytorch_geometric安装
我目前的环境是mac M2,我在base环境中安装了pytorch_geometric,仅仅做测试用的,不做真正跑代码的测试 首先我的base环境的设置如下: pip install pyg_lib torch_scatter torch_sparse torch_cluster torch_spline_conv -f https://data.pyg.…...

【C++】异常 智能指针
C异常 & 智能指针 1.C异常1.1.异常的抛出与捕获1.2.异常体系1.3.异常安全与规范1.4.异常优缺点 2.智能指针2.1.RAII2.2.智能指针的使用及原理2.2.1.auto_ptr2.2.2.unique_ptr2.2.3.shared_ptr2.2.4.shared_ptr的循环引用问题 & weak_ptr 2.3.定制删除器 1.C异常 C异常…...

切换数据库的临时表空间为temp1 / 切换数据库的undo表空间为 undotbs01
目录 编辑 一、切换临时表空间 1、登录数据库 2、查询默认临时表空间 3、创建临时表空间temp1(我们的目标表空间) 4、修改默认temp表空间 5、查询用户默认临时表空间 6、命令总结: 二、切换数据库的undo表空间 1、查询默认undo表…...
react: scss使用样式
方式一: 将样式作为模块使用 //List.tsx import styles from /styles/apppublish.module.scss <div className{styles.contentOverflow}></div>//apppublish.module.scss .contentOverflow {height: 100%;overflow-y: auto;display: flex;flex-directi…...
JAVA深化篇_36—— Java网络编程中的常用类
Java网络编程中的常用类 Java为了跨平台,在网络应用通信时是不允许直接调用操作系统接口的,而是由java.net包来提供网络功能。下面我们来介绍几个java.net包中的常用的类。 InetAddress的使用 作用:封装计算机的IP地址和DNS(没…...

python操作链接数据库和Mysql中的事务在python的处理
python操作数据库 pymysql模块: pip install pymysql作用:可以实现使用python程序链接mysql数据库,且可以直接在python中执行sql语句 添加操作 import pymysql #1.创建链接对象c conn pymysql.Connect(host127.0.0.1,#数据库服务器主机地址port3306, #mysql的端口…...

【qemu逃逸】XCTF 华为高校挑战赛决赛-pipeline
前言 虚拟机用户名: root 无密码 设备逆向与漏洞分析 程序没有去符合, 还是比较简单. 实例结构体如下: 先总体说一下流程: encode 为 base64 编码函数, decode 为 base64 解码函数. 然后 encPipe 和 decPipe 分别存放编码数据和解码数据, 分别有四个: 其中 EncPipeLine 中…...

muduo源码剖析之TcpClient客户端类
简介 muduo用TcpClient发起连接,TcpClient有一个Connector连接器,TCPClient使用Conneccor发起连接, 连接建立成功后, 用socket创建TcpConnection来管理连接, 每个TcpClient class只管理一个TcpConnecction,连接建立成功后设置相应的回调函数…...

C语言——switch语句判断星期
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int day 0;scanf("请输入1-7之间的整数:%d",&day);switch(day){case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf(&quo…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...

算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
深入解析 ReentrantLock:原理、公平锁与非公平锁的较量
ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.
这个警告表明您在使用Vue的esm-bundler构建版本时,未明确定义编译时特性标志。以下是详细解释和解决方案: 问题原因: 该标志是Vue 3.4引入的编译时特性标志,用于控制生产环境下SSR水合不匹配错误的详细报告1使用esm-bundler…...

二维数组 行列混淆区分 js
二维数组定义 行 row:是“横着的一整行” 列 column:是“竖着的一整列” 在 JavaScript 里访问二维数组 grid[i][j] 表示 第i行第j列的元素 let grid [[1, 2, 3], // 第0行[4, 5, 6], // 第1行[7, 8, 9] // 第2行 ];// grid[i][j] 表示 第i行第j列的…...

C#中用于控制自定义特性(Attribute)
我们来详细解释一下 [AttributeUsage(AttributeTargets.Class, AllowMultiple false, Inherited false)] 这个 C# 属性。 在 C# 中,Attribute(特性)是一种用于向程序元素(如类、方法、属性等)添加元数据的机制。Attr…...

以太网PHY布局布线指南
1. 简介 对于以太网布局布线遵循以下准则很重要,因为这将有助于减少信号发射,最大程度地减少噪声,确保器件作用,最大程度地减少泄漏并提高信号质量。 2. PHY设计准则 2.1 DRC错误检查 首先检查DRC规则是否设置正确,然…...