当前位置: 首页 > 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…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

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

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

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...