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

K8s学习三(Pod与探针)

深入学习Pod

Pod配置文件

  • 写一个自己的配置文件,nginx-po.yaml
apiVersion: v1 #api文档版本
kind: Pod #资源类型对象,也可以配置为像Development,StatefulSet这一类的对象
metadata: # Pod相关的元数据,用于描述Pod的数据name: nginx-po # Pod的名称labels: # 定义Pod的标签type: app # 自定义labels标签,名字为type,值为apptest: 1.0.0 # 自定义labels标签,描述Pod版本号namespace: 'default' # 命名空间的配置
spec: #期望Pod按照这里面的描述进行创建containers: # 对Pod里面的容器描述- name: nginx # 容器的名字image: nginx:1.7.9 # 指定容器的镜像imagePullPolicy: IfNotPresent # 镜像拉取策略,如果本地有就用本地的,本地没有就拉取远程的command: # 指定容器启动时的命令- nginx- -g- 'daemon off;' # nginx -g 'daemon off;'workingDir: /usr/share/nginx/html # 定义容器启动后的工作目录ports:- name: http # 端口名称containerPort: 80 # 描述容器内要暴露什么端口protocol: TCP # 基于哪种协议env: # 环境变量- name: JVM_OPTS # 环境变量名称value: '-Xms128m -Xmx128m' # 环境变量的值resources:requests: # 最少需要多少资源cpu: 100m # 限制cpu最少使用0.1个核心,1000m为一个核心memory: 128Mi # 限制最少使用128兆内存limits: #最多能用多少资源cpu: 200m # 限制最多使用0.2个核心memory: 256Mi # 限制最多使用256兆restartPolicy: OnFailure # 重启策略,只有失败的情况才会重启 

探针类型

  • 探针有StartupProbe,LivenessProbe,ReadinessProbe三种类型
Liveness Probe(存活性探针):作用: 用于确定容器是否在运行。
配置: 如果存活性探针失败,Kubernetes 将重启容器。
示例: 使用 HTTP 探针检查 /healthz 路径是否返回成功状态。
Readiness Probe(就绪性探针):作用: 用于确定容器是否已准备好接收流量。
配置: 如果就绪性探针失败,容器将被从服务负载均衡中移除,直到就绪性探针再次成功。
示例: 使用 HTTP 探针检查 /ready 路径是否返回成功状态。
Startup Probe(启动探针):作用: 用于确定容器是否已经启动完成。
配置: 在容器启动过程中,只在一定时间内检查,超过这个时间后不再检查。
示例: 使用 HTTP 探针检查 /startup 路径是否返回成功状态。
  • 有ExecAction,TcpSocketAction,HTTPGetAction三种探测方式。
启动探针的使用(StartupProbe)
  • 对上面的配置文件增加内容
apiVersion: v1 #api文档版本
kind: Pod #资源类型对象,也可以配置为像Development,StatefulSet这一类的对象
metadata: # Pod相关的元数据,用于描述Pod的数据name: nginx-po # Pod的名称labels: # 定义Pod的标签type: app # 自定义labels标签,名字为type,值为apptest: 1.0.0 # 自定义labels标签,描述Pod版本号namespace: 'default' # 命名空间的配置
spec: #期望Pod按照这里面的描述进行创建containers: # 对Pod里面的容器描述- name: nginx # 容器的名字image: nginx:1.7.9 # 指定容器的镜像imagePullPolicy: IfNotPresent # 镜像拉取策略,如果本地有就用本地的,本地没有就拉取远程的startupProbe: # 应用启动探针配置# httpGet: # 探测方式,基于http请求路径#   path: /index.html #http请求路径#   port: 80 # 请求端口# tcpSocket: # 基于tcp请求#   port: 80exec: # 基于exec请求command: #执行的命令- sh- -c- "sleep 3; echo success > /inited"failureThreshold: 3 # 失败多少次才算真正失败periodSeconds: 10 # 间隔时间successThreshold: 1 # 多少次检测成功算成功timeoutSeconds: 5 # 请求的超时时间command: # 指定容器启动时的命令- nginx- -g- 'daemon off;' # nginx -g 'daemon off;'workingDir: /usr/share/nginx/html # 定义容器启动后的工作目录ports:- name: http # 端口名称containerPort: 80 # 描述容器内要暴露什么端口protocol: TCP # 基于哪种协议env: # 环境变量- name: JVM_OPTS # 环境变量名称value: '-Xms128m -Xmx128m' # 环境变量的值resources:requests: # 最少需要多少资源cpu: 100m # 限制cpu最少使用0.1个核心,1000m为一个核心memory: 128Mi # 限制最少使用128兆内存limits: #最多能用多少资源cpu: 200m # 限制最多使用0.2个核心memory: 256Mi # 限制最多使用256兆restartPolicy: OnFailure # 重启策略,只有失败的情况才会重启 
  • 在上面增加了启动探针的三种探测方式,如下

在这里插入图片描述

  • 分别执行kubectl describe po nginx-po可以发现Startup不一样的地方,如下:

在这里插入图片描述

  • 对于exec方式,因为有执行的命令,因此可以去容器里面看对应的输出,执行下面的命令
  kubectl exec -it nginx-po -c nginx -- cat /inited解释:
kubectl exec: 在运行中的 Pod 内的容器中执行命令。-it: 两个参数的结合。-i 表示标准输入保持打开,-t 表示分配一个伪终端 (TTY),以便你可以与正在运行的命令进行交互,就像你在本地终端一样。nginx-po: 目标 Pod 的名称。在这里,Pod 的名称被设置为 nginx-po。-c nginx: -c 参数用于指定要执行命令的容器名称。在这里,命令将在名为 nginx 的容器内执行。-- cat /inited: 要在容器内执行的实际命令。在这个例子中,命令是 cat /inited,它会显示 /inited 文件的内容。
  • 得到输出
    在这里插入图片描述
Liveness探针的应用
  • 下面介绍liveness探针的HTTPGet使用
  • 在原来的配置文件里面加入下面的东西
 livenessProbe: # 应用存活探针配置httpGet: # 探测方式,基于http请求路径path: /index.html #http请求路径port: 80 # 请求端口# tcpSocket: # 基于tcp请求#   port: 80# exec: # 基于exec请求#   command: #执行的命令#   - sh#   - -c#   - "sleep 3; echo success > /inited"failureThreshold: 3 # 失败多少次才算真正失败periodSeconds: 10 # 间隔时间successThreshold: 1 # 多少次检测成功算成功timeoutSeconds: 5 # 请求的超时时间
  • 如图:
    在这里插入图片描述
Readiness探针的使用
  • 下面介绍readiness探针的HTTPGet使用
  • 在原来的配置文件里面加入下面的东西
 readinessProbe: # 应用就绪探针配置httpGet: # 探测方式,基于http请求路径path: /started.html #http请求路径port: 80 # 请求端口# tcpSocket: # 基于tcp请求#   port: 80# exec: # 基于exec请求#   command: #执行的命令#   - sh#   - -c#   - "sleep 3; echo success > /inited"failureThreshold: 5 # 失败多少次才算真正失败periodSeconds: 10 # 间隔时间successThreshold: 1 # 多少次检测成功算成功timeoutSeconds: 5 # 请求的超时时间
  • 如图:
    在这里插入图片描述

  • 注:下面讲一下更深入了解一下探针,对于readiness探针而言,里面写的http请求路径是/started.html,如下图:
    在这里插入图片描述

  • 而对于nginx而言是没有这个的,于是会出现下面的情况
    在这里插入图片描述

在这里插入图片描述

  • 但是如果创建了started.html到工作目录里面就会发现又成功了
  • 在终端输入下面的命令
echo success > started.html
kubectl cp started.html nginx-readin-po:/usr/share/nginx/html/
  • 这样就能找到yaml文件里面指定的探测路径,就会有下面的情况
    在这里插入图片描述

  • 同理,对于LivenessProbe也一样,把yaml文件里的index.html 换成started.html,就会有上述一样的步骤和结果

Pod生命周期

  • Pod的生命周期如下图所示:
    在这里插入图片描述

  • 这里一般不用postStart钩子函数,因为可能会和主容器里面的command命令冲突,一般用前面的容器初始化,然后用preStop钩子函数,可以进行注册中心下线,数据销毁,清理数据等操作

  • 这里主要介绍prestop的配置,为了方便在原文件里,将探针删了,加入poststart和prestop,如下

 lifecycle: #生命周期配置postStart: # 生命周期启动阶段做的事情,不一定在容器command之前运行exec:command:- sh- -c- "echo '<h1>post start</h1>' > /usr/share/nginx/html/prestop.html"preStop:exec:command:- sh- -c- "sleep 50; echo 'sleep over' >> /usr/share/nginx/html/prestop.html"
  • 如图:
    在这里插入图片描述

  • 当创建Pod的时候,会执行poststart
    在这里插入图片描述

在这里插入图片描述

  • 这里找到内部的ip地址之后,curl这个prestop.html文件,可以看到内容,因为nginx的工作目录是/usr/share/nginx/html,所以直接curl ip + 文件名称就行了,因为本来就在这个目录下,不需要其他的路径了。
  • 然后看prestop,开另一个master,一个删除,一个持续监视状态,因为变为删除中的状态后,会给 pod 一个宽限期,让 pod 去执行一些清理或销毁操作。这里默认是30s,因此"sleep 50; echo ‘sleep over’ >> /usr/share/nginx/html/prestop.html",这里休眠50秒,是达不到的,因为30s就关闭了
    在这里插入图片描述

在这里插入图片描述

  • 这里可以在配置文件中加入
terminationGracePeriodSeconds: 50
containers:- xxx# 这里terminationGracePeriodSeconds参数就是默认的时间,与containers同级,可以作用于所有的容器

相关文章:

K8s学习三(Pod与探针)

深入学习Pod Pod配置文件 写一个自己的配置文件,nginx-po.yaml apiVersion: v1 #api文档版本 kind: Pod #资源类型对象&#xff0c;也可以配置为像Development&#xff0c;StatefulSet这一类的对象 metadata: # Pod相关的元数据&#xff0c;用于描述Pod的数据name: nginx-po…...

leetcode - 678. Valid Parenthesis String

Description Given a string s containing only three types of characters: ‘(’, ‘)’ and ‘*’, return true if s is valid. The following rules define a valid string: Any left parenthesis ( must have a corresponding right parenthesis ). Any right parenth…...

索尼相机照片清理软件

在使用索尼相机拍摄照片的时候有时我们需要同时拍摄JPG格式和RAW格式&#xff0c;这在后期选图的时候给我们带来一些麻烦。我们固然可以选用Br来管理照片&#xff0c;但是现在我们可以有一个更轻量的软件&#xff08;8.8MB&#xff09;来做到一部分功能。 我们将照片从SD卡导出…...

比赛记录:Codeforces Global Round 25 A~E (猜猜题场)

传送门:CF [前题提要]:其实这场打的不是很好.A题一个sb错误看不出来,50min后才过,B题上来就Wa了一发,C题用了没必要的线段树,D题刚开始被60诈骗,一直在想按位考虑.幸好赛时猜出了E,然后又猜出来D,本来掉大分变成上大分…但是这场前几题大都是猜猜题,所以本来不想写题解的.但是…...

Windows系统安装OpenSSH结合VS Code远程ssh连接Ubuntu【内网穿透】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-AwzyR2lkHKjD9HYl {font-family:"trebuchet ms",verdana,arial,sans-serif;f…...

Svg Flow Editor 原生svg流程图编辑器(五)

系列文章 Svg Flow Editor 原生svg流程图编辑器&#xff08;一&#xff09; Svg Flow Editor 原生svg流程图编辑器&#xff08;二&#xff09; Svg Flow Editor 原生svg流程图编辑器&#xff08;三&#xff09; Svg Flow Editor 原生svg流程图编辑器&#xff08;四&#xf…...

数字晶体管选型参数,结构原理,工艺与注意问题总结

🏡《总目录》 目录 1,概述2,工作原理2.1,AND 门(与门),2.2,OR 门(或门):2.3,NOT 门(非门):2.4,NAND 门(与非门):2.5,NOR 门(或非门):3,结构特点3.1,TTL(Transistor-Transistor Logic)晶体管...

lua学习笔记9(字典的学习)

print("********************字典的学习***********************") a{["凌少"]"傻逼",["我"]"天才",["age"]24,["daihao"]114514,["8848"]20000} --访问单个变量 print(a["凌少"])…...

第六篇: 3.5 性能效果 (Performance)- IAB/MRC及《增强现实广告效果测量指南1.0》

​​​​​​​ 翻译计划 第一篇概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇 广告效果测量定义和其他矩阵之- 3.1 广告印象&#xff08;AD Impression&#xff09;第三篇 广告效果测量定义和其他矩阵之- 3.2 可见性 &#xff08;Viewability…...

mysql学习笔记NO.2

Java操作数据库、表笔记 1.创建数据库 创建数据库的步骤如下&#xff1a; 导入所需的Java数据库连接驱动&#xff08;如MySQL驱动&#xff09;。使用JDBC连接到数据库。执行SQL语句创建数据库。 import java.sql.Connection; import java.sql.DriverManager; import java.…...

C++11:lambda表达式 包装器

C11&#xff1a;lambda表达式 & 包装器 lambda表达式包装器functionbind lambda表达式 在C98中&#xff0c;如果想对一个结构体数组使用sort排序&#xff0c;那么我们就需要自己些仿函数。 比如以下结构体&#xff1a; struct Goods {string _name; // 名字double _pric…...

Node.js HTTP/2 CONTINUATION 拒绝服务漏洞(CVE-2024-27983)

Node.js 是开源、跨平台的 JavaScript 运行时环境。CONTINUATION泛洪攻击被发现存在于多个HTTP/2协议实现中。 在受影响版本中&#xff0c;由于Node.js针对HTTP/2协议的实现不当&#xff0c;未正确处理多个CONTINUATION帧的情况&#xff0c;在node::http2::Http2Session::~Htt…...

YOLOV8 + 双目测距

YOLOV8 双目测距 1. 环境配置2. 测距流程和原理2.1 测距流程2.2 测距原理 3. 代码部分解析3.1 相机参数stereoconfig.py3.2 测距部分3.3 主代码yolov8-stereo.py 4. 实验结果4.1 测距4.2 测距跟踪4.3 测距跟踪分割4.4 视频展示 相关文章 1. YOLOv5双目测距&#xff08;python&…...

前端:SVG绘制流程图

效果 代码 html代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>SVG流程图示例</title><style>/* CSS 样式 */</style><script src"js/index.js"></script…...

【Linux系列】如何确定当前运行的是 RHEL 9 还是 RHEL 8?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

vscode开发java的插件和配置

推荐插件 .vscode/extensions.json {"recommendations": ["redhat.fabric8-analytics","ms-azuretools.vscode-docker","vscjava.vscode-java-pack","eamodio.gitlens","obkoro1.korofileheader","redhat.j…...

Mysql启动报错:本地计算机上的mysql服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止

Mysql启动报错&#xff1a;本地计算机上的mysql服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止 文章目录 Mysql启动报错&#xff1a;本地计算机上的mysql服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止1. 备份mysql的data文件夹2. 重新构建 Wind…...

WPF程序添加托盘图标

程序添加托盘图标 UI层 //添加handycontrol的引用xmlns:hc"https://handyorg.github.io/handycontrol"//添加NotifyIcon图标 实现单击 双击 二级菜单点击功能<hc:NotifyIconText"通知"Token"Info"><hc:NotifyIcon.ContextMenu><…...

工业4g路由器联网后迅速掉线是什么原因?

工业4G路由器连接上网后迅速掉线可能是由多种因素造成的。以下是一些建议的检查和解决步骤&#xff1a; 1、信号问题&#xff1a; 信号强度&#xff1a;检查工业路由器信号强度指示灯&#xff0c;如果信号弱&#xff0c;尝试移动路由器位置或添加外部天线来增强信号。 网络拥…...

腾讯云4核8G服务器12M带宽646元1年零3个月,4C8G使用场景说明

腾讯云4核8G服务器多少钱&#xff1f;腾讯云4核8G轻量应用服务器12M带宽租用价格646元15个月&#xff0c;活动页面 txybk.com/go/txy 活动链接打开如下图所示&#xff1a; 腾讯云4核8G服务器优惠价格 这台4核8G服务器是轻量应用服务器&#xff0c;详细配置为&#xff1a;轻量4核…...

C#异步编程完全指南:async/await背后的状态机原理

# C#异步编程完全指南&#xff1a;async/await背后的状态机原理## 引言在现代软件开发中&#xff0c;异步编程已成为构建高响应、高吞吐量应用程序的基石。C# 作为一门不断演进的现代编程语言&#xff0c;从 .NET Framework 4.5 开始引入了 async 和 await 关键字&#xff0c;彻…...

LFM2.5-1.2B-Thinking-GGUF前端面试题解析实战:模拟面试与答案生成

LFM2.5-1.2B-Thinking-GGUF前端面试题解析实战&#xff1a;模拟面试与答案生成 1. 开篇&#xff1a;AI如何改变前端面试准备方式 前端开发岗位的竞争日益激烈&#xff0c;技术面试的难度也水涨船高。传统的面试准备方式往往效率低下——求职者要么死记硬背网上的标准答案&…...

【Git技巧】git rebase -i 实战:轻松合并本地提交记录

1. 为什么你需要掌握git rebase -i 每次写完代码提交时&#xff0c;你是不是也经常遇到这种情况&#xff1a;刚提交完就发现有个拼写错误&#xff0c;赶紧又提交一次&#xff1b;或者调试过程中反复提交了好几次"临时保存"。结果git log一看&#xff0c;提交记录乱七…...

PCB首次上电安全操作与防炸板指南

PCB首次上电安全操作指南&#xff1a;从炸板事故中汲取的工程经验1. 硬件工程师的必修课&#xff1a;上电安全1.1 典型上电事故案例分析在嵌入式硬件开发领域&#xff0c;PCB首次上电环节隐藏着诸多技术风险。根据行业调查&#xff0c;约78%的硬件工程师在其职业生涯中至少经历…...

实战应用:从git安装到项目初始化,用快马生成数据分析项目版本控制模板

今天想和大家分享一个数据分析项目中经常被忽视但极其重要的环节——Git版本控制的初始化配置。作为一个经常用Python做数据分析的开发者&#xff0c;我发现很多人在项目初期就忽略了版本控制的重要性&#xff0c;导致后期协作时出现各种混乱。下面我就结合InsCode(快马)平台&a…...

39569

56968...

Debian 12上彻底卸载TigerVNC的5个隐藏步骤(附残留文件清理技巧)

Debian 12上彻底卸载TigerVNC的5个隐藏步骤&#xff08;附残留文件清理技巧&#xff09; 作为Linux系统管理员&#xff0c;你是否遇到过TigerVNC卸载后仍然出现端口占用或配置冲突的情况&#xff1f;常规的apt remove往往无法彻底清除所有痕迹。本文将揭示那些鲜为人知的清理技…...

CCC 数字钥匙 Release 3:BLE/UWB与NFC融合的无钥匙进入系统解析

1. CCC数字钥匙Release 3的技术革新 想象一下这样的场景&#xff1a;你双手提着购物袋走向爱车&#xff0c;距离3米时车灯自动点亮&#xff0c;1.5米时车门悄然解锁&#xff0c;拉开车门的瞬间引擎已经启动——这就是CCC数字钥匙Release 3带来的无感化体验。作为车联网联盟&…...

QT程序从Windows到ARM开发板:手把手教你解决交叉编译中的屏幕适配问题

QT程序从Windows到ARM开发板&#xff1a;手把手教你解决交叉编译中的屏幕适配问题 在嵌入式开发领域&#xff0c;QT框架因其跨平台特性和丰富的UI组件库而广受欢迎。然而&#xff0c;当我们将QT程序从熟悉的Windows环境迁移到ARM开发板时&#xff0c;往往会遇到各种意想不到的挑…...

AI原生推荐:如何实现端到端的训练?

AI原生推荐&#xff1a;如何实现端到端的训练&#xff1f;关键词&#xff1a;AI原生推荐、端到端训练、深度学习推荐系统、推荐模型架构、多模态融合摘要&#xff1a;本文将从“AI原生推荐”的核心需求出发&#xff0c;用“快递物流”“餐厅点菜”等生活化类比&#xff0c;逐步…...