K8s学习三(Pod与探针)

news2025/1/24 11:39:40

深入学习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,值为app
    test: 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,值为app
    test: 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: 80
      exec: # 基于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同级,可以作用于所有的容器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1575957.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux——线程互斥与互斥锁的使用

目录 前言 一、进程线程间的互斥相关背景概念 二、互斥量&#xff08;互斥锁&#xff09; 三、互斥锁的使用 1.互斥锁的初始化 2.加锁与解锁 3.锁的使用 4.锁的封装 四、线程饥饿 五、互斥锁的原理 六、死锁 前言 我们学习过线程概念与线程控制&#xff0c;知道了线…

积木报表Excel数据量大导出慢导不出问题、大量数据导不出问题优化方案和分析解决思路(优化前一万多导出失败,优化后支持百万级跨库表导出)

文章目录 积木报表Excel数据量大导出慢导不出问题、大量数据导不出问题优化方案和分析解决思路&#xff08;优化前一万多导出失败&#xff0c;优化后支持百万级跨库表导出&#xff09;优化结果需求背景和解决方案的思考解决方案流程描述&#xff1a;关键代码引入easy excel新建…

约跑小程序源码(asp.net+vue+element++uniapp+sqlserver)

开发语言&#xff1a;c# 框架&#xff1a;后端 asp.net mvc pc管理页面&#xff1a;vueelement 数据库&#xff1a;sqlserver 开发软件&#xff1a;eclipse/myeclipse/idea 浏览器&#xff1a;谷歌浏览器 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X …

前端:SVG绘制流程图

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

plasmo浏览器插件框架使用react和ant.design框架创建页面内容脚本UI样式注入

使用plasmo开发浏览器插件的时候&#xff0c;想要使用内容脚本UI注入自定义的UI组件&#xff0c;官方文档&#xff1a;Content Scripts UI – Plasmo&#xff0c;最好是搭配上好看的UI样式&#xff0c;所以可以集成ant.design的UI组件库&#xff0c;但是只集成组件还不行&#…

百度松果菁英班——机器学习实践四:文本词频分析

飞桨AI Studio星河社区-人工智能学习与实训社区 &#x1f96a;jieba分词词频统计 import jieba # jieba中文分词库 ​ with open(test.txt, r, encodingUTF-8) as novelFile:novel novelFile.read() # print(novel) stopwords [line.strip() for line in open(stop.txt, r,…

C语言--条件编译(常见的编译指令)

#if&#xff08;开始&#xff08;判断条件&#xff09;&#xff09;#endif&#xff08;结束&#xff09; 条件满足就参与编译&#xff0c;这里是一个判断的语句&#xff0c;当M大于0的时候&#xff0c;打印hehe不然就不打印 或者注释代码也好用 当#if 0的时候 &#xff0c;也…

SDWAN专线保护企业数据传输安全

企业数字化进程的加速和网络环境的复杂化&#xff0c;数据传输安全已经成为企业网络管理的头等大事。SD-WAN&#xff08;软件定义广域网&#xff09;作为一种新兴的网络技术&#xff0c;不仅能够提升网络性能和效率&#xff0c;还能够有效地保护企业数据传输的安全性。以下是SD…

亚马逊店铺引流:海外云手机的利用方法

在电商业务蓬勃发展的当下&#xff0c;亚马逊已经成为全球最大的电商平台之一&#xff0c;拥有庞大的用户群和交易量。在激烈的市场竞争中&#xff0c;如何有效地吸引流量成为亚马逊店铺经营者所关注的重点。海外云手机作为一项新兴技术工具&#xff0c;为亚马逊店铺的流量引导…

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

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

ctfshow web入门 命令执行 web53--web77

web53 日常查看文件 怎么回事不让我看十八 弄了半天发现并不是很对劲&#xff0c;原来我发现他会先回显我输入的命令再进行命令的回显 ?cnl${IFS}flag.php||web54 绕过了很多东西 基本上没有什么命令可以用了但是 grep和?通配符还可以用 ?cgrep${IFS}ctfshow${IFS}???…

【论文速读】| 大语言模型平台安全:将系统评估框架应用于OpenAI的ChatGPT插件

本次分享论文为&#xff1a;LLM Platform Security: Applying a Systematic Evaluation Framework to OpenAI’s ChatGPT Plugins 基本信息 原文作者&#xff1a;Umar Iqbal, Tadayoshi Kohno, Franziska Roesner 作者单位&#xff1a;华盛顿大学圣路易斯分校&#xff0c;华盛…

PicGo + Gitee + VsCode - 搭建私人图床

文章目录 前言搭建图床VsCode 安装插件安装 PicGo准备 Gitee 图床测试 尾声 前言 本人是一个重度 vimer&#xff0c;并且喜欢客制化一些东西… Typora 固然好用&#xff0c;但不支持 vim…发现 vscode 中既可以使用 vim&#xff0c;也可以 md&#xff0c;用起来比较舒服.因此…

如何自定义项目启动时的图案

说明&#xff1a;有的项目启动时&#xff0c;会在控制台输出下面的图案。本文介绍Spring Boot项目如何自定义项目启动时的图案&#xff1b; 生成字符图案 首先&#xff0c;找到一张需要设置的图片&#xff0c;使用下面的代码&#xff0c;将图片转为字符文件&#xff1b; impo…

vscode 安装vim插件配置ctrl + c/v功能

搜索Vim插件 插件介绍部分有提示操作 首先安装该插件&#xff0c;然后按照下述步骤设置ctrl相关的快捷键&#xff0c;以便于脱离im快捷键而愉快的敲代码。 1.在“设置”搜索框内搜索vim.handleKeys&#xff0c;选择 Edit in settings.json 2. 设置ctrl-c,ctrl-v等快捷键置为fa…

【Frida】【Android】 10_爬虫之WebSocket协议分析

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

LDR6328助力Type-C普及,便捷充电,绿色生活更精彩

随着科技的进步和全球统一接口的需求&#xff0c;Type-C接口正日益受到青睐。越来越多的设备正选择采纳这一先进的接口设计&#xff0c;它的普及无疑在改善着我们的日常生活。 在过往&#xff0c;许多小功率设备如小风扇、蓝牙音箱、桌面台灯以及家用加湿器等&#xff0c;都普遍…

STC89C51学习笔记(五)

STC89C51学习笔记&#xff08;五&#xff09; 综述&#xff1a;文本讲述了代码中速写模板的创建、如何将矩阵键盘的按键与数字一一对应以及如何创建一个矩阵键盘密码锁。 一、速写模板 点击“templates”&#xff0c;再鼠标右键选择配置&#xff0c;按照以下方式即可修改一些…

Linux初学(十七)redis

一、简介 redis就是一个内存数据库 redis中的数据&#xff0c;都是保存在内存中 端口&#xff1a;6379 二、安装redis 方法一&#xff1a;编译安装 方法二&#xff1a;yum安装-epel 第一步&#xff1a;配置epel源 详见&#xff1a;http://t.csdnimg.cn/AFl1K第二步&#xff1a…

为什么苹果 Mac 电脑需要使用清理软件?

尽管 Apple Mac 电脑因其卓越的性能、简洁高效的 macOS 操作系统及独特的美学设计备受全球用户青睐&#xff0c;但任何电子设备在长期使用后都难以避免面临系统资源日渐累积的问题。其中一个重要维护需求在于&#xff0c;随着使用时间的增长&#xff0c;Mac电脑可能会由于系统垃…