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

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 会执行以下步骤:
    1. 用户使用 kubectl delete 命令或 YAML 文件向 API 服务器发送删除 Pod 的请求。
    1. API 服务器将请求转换为 Kubernetes 的内部对象,并将 Pod 的状态设置为 Terminating
    1. 调度器将 Pod 的状态设置为 Terminating
    1. kubelet 将 Pod 的状态设置为 Terminating,并向 Pod 中的每个容器发送 SIGTERM 信号,通知容器准备退出。
    1. 容器在指定的超时时间内退出。如果容器在超时时间内未退出,则 kubelet 会向容器发送 SIGKILL 信号,强制容器退出。
    1. kubelet 删除 Pod 的相关资源,包括 Pod 的定义、容器的镜像、容器的日志等。
  • etcd 是 Kubernetes 集群的核心组件,负责存储 Kubernetes 的所有数据。在删除 Pod 时,etcd 需要执行以下操作:
    1. 删除 Pod 的定义。
    1. 删除 Pod 的相关资源,包括容器的镜像和容器的日志等。

白话解释

* 用户向 API 服务器说:“我要删除一个 Pod。”
* API 服务器把用户的话转换成 Kubernetes 内部的语言,然后告诉调度器:“这个 Pod 要删除了。”
* 调度器把这件事告诉 kubelet,kubelet 把这件事告诉 Pod 中的容器:“你们要被删除了。”
* 容器听到 kubelet 的话,就开始准备退出。如果容器在规定的时间内没有退出,kubelet 就会强行让它退出。
* 容器退出后,kubelet 会把 Pod 的相关资源都删除掉。etcd 是 Kubernetes 的记事本,负责记住 Kubernetes 的所有信息。在删除 Pod 时,etcd 要把 Pod 的相关信息都删除掉。

  • Kubernetes 中的 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 字段,并且该字段指定的策略为 AlwaysOnFailure
  • 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] 输出&#xff1…...

【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使用样式

方式一&#xff1a; 将样式作为模块使用 //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为了跨平台&#xff0c;在网络应用通信时是不允许直接调用操作系统接口的&#xff0c;而是由java.net包来提供网络功能。下面我们来介绍几个java.net包中的常用的类。 InetAddress的使用 作用&#xff1a;封装计算机的IP地址和DNS&#xff08;没…...

python操作链接数据库和Mysql中的事务在python的处理

python操作数据库 pymysql模块: pip install pymysql作用:可以实现使用python程序链接mysql数据库&#xff0c;且可以直接在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发起连接&#xff0c;TcpClient有一个Connector连接器&#xff0c;TCPClient使用Conneccor发起连接, 连接建立成功后, 用socket创建TcpConnection来管理连接, 每个TcpClient class只管理一个TcpConnecction&#xff0c;连接建立成功后设置相应的回调函数…...

C语言——switch语句判断星期

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

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...