k8s(二):Pod
Pod
pod 是K8s中最小的可部署单元,用于容纳一个或多个容器。Pod为容器提供了一个共享的环境,包括网络命名空间、存储卷和IP地址。
pod的阶段(phase)
-
Pending: Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间。
-
Running: Pod 已经绑定到了某个节点,Pod 中所有的容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态。
-
Succeeded: Pod 中的所有容器都已成功终止,并且不会再重启。
-
Failed: Pod 中的所有容器都已终止,并且至少有一个容器是因为失败终止。也就是说,容器以非 0 状态退出或者被系统终止。
-
Unknown: 因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机通信失败。
Pod 生命周期详细解析:
1. 创建与调度阶段:
-
Pod 创建: 可通过定义 Pod 的 YAML 创建 Pod 对象。
apiVersion: v1 kind: Pod metadata:name: example-pod spec:containers:- name: container-1image: nginxkubectl apply -f pod-definition.yaml -
调度器考虑以下因素:
- 节点资源: 调度器检查节点的资源利用率,确保节点上有足够的 CPU、内存等资源来容纳 Pod。
- 节点亲和性和反亲和性: 用户可以通过配置亲和性和反亲和性规则,影响 Pod 被调度到哪个节点。
- Pod 亲和性和反亲和性: Pod 本身也可以定义与节点的亲和性和反亲和性规则。
- Pod 优先级: Pod 的优先级和调度器的优先级策略也会影响调度决策。
- 调度约束: 用户可以通过 PodSpec 中的
NodeSelector字段设置调度约束,将 Pod 调度到具有特定标签的节点。
-
节点选择: 调度器选择一个满足调度约束和条件的节点,将 Pod 分配到该节点上。如果找不到合适的节点,Pod 将保持在未调度状态。
-
Pod 被接受: 选定的节点上的 Kubelet 接受 Pod,并开始初始化过程。
-
卷挂载: 一旦 Pod 被接受,Kubelet 开始挂载 Pod 所需的卷,以满足容器的存储需求。
2. 运行:
- 存在 Init 容器: 如果 Pod 的配置中定义了 Init 容器,kubelet 将按照顺序执行这些 Init 容器。每个 Init 容器负责执行一些初始化任务,例如加载配置、准备数据等。这些任务在主容器启动之前完成,确保主容器运行时具备所需的环境。
- Initialized 状态设置: 一旦所有 Init 容器成功完成,kubelet 将设置 Pod 的
Initialized状态为 True。这表示 Pod 已经完成了初始化阶段,并且已经准备好开始运行主容器。
探针配置:
在 Pod 中定义探针是为了监控容器的健康状况。在上述提供的 YAML 示例中,定义了一个 readinessProbe,该探针使用 HTTP GET 请求检查容器的 /health 路径是否可达。以下是该探针的配置细节:
readinessProbe:httpGet:path: /healthport: 8080initialDelaySeconds: 5periodSeconds: 10
httpGet配置: 使用 HTTP GET 请求进行健康检查,检查路径为/health,端口为 8080。initialDelaySeconds: 探针将在容器启动后等待 5 秒钟再执行第一次检查。periodSeconds: 探针将每隔 10 秒执行一次检查。
PodReadyToStartContainersCondition:
如果启用了 PodReadyToStartContainersCondition 特性门控,Kubelet 会通过 Pod 的 status.conditions 字段中的 PodReadyToStartContainers 状态来报告 Pod 是否达到了初始化里程碑。这个条件反映了 Pod 是否具备了运行容器的必要条件,例如 Init 容器的成功完成、网络的正确配置等。 PodReadyToStartContainersCondition 的设置为 True 表示 Pod 已经准备好开始运行容器。
3. 终止阶段:
-
体面终止过程: Pod 在终止时尝试以优雅的方式关闭容器,可以配置
terminationGracePeriodSeconds。terminationGracePeriodSeconds: 30 -
Pod 的垃圾收集: PodGC 控制器监视已终止的 Pod,当数量超过阈值时,删除已终止的 Pod 防止资源泄露。
-
强制终止: 在需要立即删除 Pod 时,可以使用
kubectl delete命令并设置宽限期为 0。kubectl delete pod example-pod --grace-period=0 --force
k8中的三种不同类型的探针
在 Kubernetes 中,探针(Probes)用于定期检查容器的健康状态,以确保容器能够正常运行。主要有三种类型的探针:livenessProbe、readinessProbe 和 startupProbe。
1. livenessProbe 存活探针:
-
目的: 指示容器是否仍在运行。
-
配置方式:
livenessProbe:exec:command:- cat- /tmp/healthyinitialDelaySeconds: 5periodSeconds: 10exec:使用指定的命令检查容器是否存活。如果命令成功执行(返回码为0),则认为容器存活。initialDelaySeconds:容器启动后等待5秒再执行第一次检查。periodSeconds:每隔10秒执行一次检查。
2. readinessProbe 就绪探针:
-
目的: 指示容器是否准备好接收流量。
-
配置方式:
readinessProbe:httpGet:path: /healthport: 8080initialDelaySeconds: 5periodSeconds: 10httpGet:对容器的指定路径和端口执行 HTTP GET 请求,如果返回码在200到399之间,认为容器准备好接收流量。initialDelaySeconds:容器启动后等待5秒再执行第一次检查。periodSeconds:每隔10秒执行一次检查。
3. startupProbe 启动探针:
-
目的: 指示容器中的应用是否已经启动。
-
配置方式:
startupProbe:exec:command:- check-app-started.shinitialDelaySeconds: 10periodSeconds: 5exec:使用指定的命令检查应用是否已经启动。如果命令成功执行,认为应用已经启动。initialDelaySeconds:容器启动后等待10秒再执行第一次检查。periodSeconds:每隔5秒执行一次检查。
相关文章:
k8s(二):Pod
Pod pod 是K8s中最小的可部署单元,用于容纳一个或多个容器。Pod为容器提供了一个共享的环境,包括网络命名空间、存储卷和IP地址。 pod的阶段(phase) Pending: Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行。此阶段包…...
Python 字典详解(dict)
文章目录 1 概述1.1 性质 2 常用方法2.1 以列表返回所有键:keys()2.2 以列表返回所有值:values()2.3 以列表返回所有键值对:items()2.4 返回键对应的值:get()2.5 添加键值对:setdefault()2.6 修改键值对:di…...
IPoIB在国产并行系统上的实现与优化
目录 1 国产异构众核系统 2 相关工作 3 IPoIB在国产并行系统上的实现 3.1 IPoIB协议原理...
东南大学与OpenHarmony携手共建开源生态,技术俱乐部揭牌成立并迎来TSC专家进校园
11月25日,OpenAtom OpenHarmony(以下简称“OpenHarmony”)项目群技术指导委员会(以下简称“TSC”)与东南大学携手,于东南大学九龙湖校区金智楼一楼报告厅举办了“东南大学OpenHarmony技术俱乐部成立仪式暨OpenHarmony TSC专家进校园”活动。此次盛会标志着OpenHarmony开源社区和…...
NPU、CPU、GPU算力及算力计算方式
NVIDIA在9月20日发布的NVIDIA DRIVE Thor 新一代集中式车载计算平台,可在单个安全、可靠的系统上运行高级驾驶员辅助应用和车载信息娱乐应用。提供 2000 万亿次浮点运算性能(2000 万亿次8位浮点运算)。NVIDIA当代产品是Orin,算力是…...
华清远见嵌入式学习——C++——作业6
作业要求: 代码: #include <iostream>using namespace std;class Animal { public:virtual void perform() 0;};class Lion:public Animal { private:string foods;string feature; public:Lion(){}Lion(string foods,string feature):foods(foo…...
k8s安装学习环境
目录 环境准备 配置hosts 关闭防火墙 关闭交换分区 调整swappiness参数 关闭setlinux Ipv4转发 时钟同步 安装Docker 配置Yum源 安装 配置 启动 日志 安装k8s 配置Yum源 Master节点 安装 初始化 配置kubectl 部署CNI网络插件 Node节点 检查 环境准备 准…...
RepidJson将内容写入文件简单代码示例
以下是使用RapidJSON将内容写入文件的示例代码: #include <rapidjson/document.h> #include <rapidjson/writer.h> #include <rapidjson/stringbuffer.h> #include <iostream> #include <fstream>using namespace rapidjson;int mai…...
golang构建docker镜像的几种方式
目前docker支持以下几种方式指定上下文来构建镜像 本地项目路径(如:/tmp/xxx)本地压缩包路径(如:/tmp/xxx.tar)docekrfile文本链接(如:https://x.com/xxx/dockerfile)压…...
golang使用sip协议 用户名和密码注册到vos3000
在Go语言中,要使用SIP协议进行注册,您可以使用第三方库,如github.com/cloudwebrtc/sip。以下是一个简单的示例代码,演示如何使用Go语言中的该库进行基本的SIP注册: 首先,您需要安装该库: go ge…...
第4章 互联网
文章目录 4.1 计算机网络基础 94 4.1.1 计算机网络的基本概念 94 4.1.2 局域网的基本原理 96 4.1.3 局域网协议与应用 98 4.2 Internet 100 4.2.1 TCP/IP 101 4.2.2 TCP/IP应用 106 4.2.3 网络操作系统的功能 112 4.2.4 网络安全的概念 116 4.3 计算机软件编程基础 …...
【JavaWeb】前端工程化(VUE3)
前端工程化(VUE3) 文章目录 前端工程化(VUE3)一、概述二、ECMA6Script2.1 es6的变量和模板字符串2.2 es6的解构表达式2.3 es6的箭头函数2.4 rest和spread2.5 es6的对象创建和拷贝2.6 es6的模块化处理 三、前端工程化环境搭建3.1 N…...
JAVA基础知识:异常处理
异常处理是Java编程中至关重要的一部分,它允许程序在出现错误或异常情况时进行适当的处理,以保证程序的稳定性和可靠性。本文将详细介绍Java中的异常处理机制,并提供相关示例代码,帮助读者更好地理解和应用异常处理的概念和技巧。…...
PostGIS学习教程十:空间索引
PostGIS学习教程十:空间索引 回想一下,空间索引是空间数据库的三个关键特性之一。空间索引使得使用空间数据库存储大型数据集成为可能。在没有空间索引的情况下,对要素的任何搜索都需要对数据库中的每条记录进行"顺序扫描"。索引通…...
LeetCode 13 罗马数字转整数
题目描述 罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M …...
【动态规划】LeetCode2111:使数组 K 递增的最少操作次数
作者推荐 [二分查找]LeetCode2040:两个有序数组的第 K 小乘积 本文涉及的基础知识点 二分查找算法合集 分组 动态规划 题目 给你一个下标从 0 开始包含 n 个正整数的数组 arr ,和一个正整数 k 。 如果对于每个满足 k < i < n-1 的下标 i ,都有…...
SpringCloud面试题——Nacos
一:什么是Nacos? 二:服务心跳与服务注册原理? 在spring容器启动的时候,nacos客户端会进行两步操作。 向nacos服务端发送心跳向nacos服务端注册当前服务 服务心跳 客户端在启动的时候,会开启一个心跳线程…...
leetcode:统计感冒序列的数目【数学题:组合数含逆元模版】
1. 题目截图 2.题目分析 需要把其分为多个段进行填充 长为k的段,从两端往中间填充的方案数有2 ** (k - 1)种 组合数就是选哪几个数填哪几个段即可 3.组合数含逆元模版 MOD 1_000_000_007 MX 100_000# 组合数模板 fac [0] * MX fac[0] 1 for i in range(1, MX…...
外贸建站平台工具推荐?做海洋建站的平台?
外贸建站平台用哪个比较好?独立站建站系统如何选择? 随着全球市场的竞争日益激烈,如何通过互联网渠道展示企业形象、吸引客户成为外贸企业亟待解决的问题。海洋建站将为大家介绍几款优秀的外贸建站平台工具,助力企业在数字化时代…...
【智能家居】三、添加语音识别模块的串口读取功能点
语音识别模块SU-03T 串口通信线程控制代码 inputCommand.h(输入控制指令)voiceControl.c(语音控制模块指令)main.c(主函数)编译运行结果 语音识别模块SU-03T AI智能语音识别模块离线语音控制模块语音识别…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
