k8s之Pod及Probe 探针机制(健康检查机制)

news/2024/5/20 21:51:45/文章来源:https://blog.csdn.net/wcg920212/article/details/132397606

文章目录

    • 1、Pod
      • 1.1、定义
      • 1.2、Pod的形式
      • 1.2、Pod的使用
      • 1.3、 Pod生命周期
      • 1.4、生命周期钩子
      • 1.5、临时容器
        • 1.5.1、定义
        • 1.5.2、使用临时容器的步骤
      • 1.6、静态Pod
    • 2、Probe 探针机制(健康检查机制)
      • 2.1、探针分类
      • 2.2、Probe配置项
      • 2.3、编写yaml测试探针机制

1、Pod

1.1、定义

  • Pod 是一组(一个或多个) 容器(docker容器)的集合 (就像在豌豆荚中);这些容器共享存储、网络、以及怎样运行这些容器的声明
    -在这里插入图片描述
  • 我们一般不直接创建Pod,而是创建一些工作负载由他们来创建Pod

1.2、Pod的形式

  • Pod对容器有自恢复能力(Pod自动重启失败的容器)
  • Pod自己不能恢复自己,Pod如果被删除就真的没了,还是希望k8s集群能自己在其他地方再启动这个Pod
  • 单容器Pod
  • 多容器协同Pod。我们可以把另外的容器称为 SideCar(为应用赋能)
  • Pod 天生地为其成员容器提供了两种共享资源:网络存储

一个Pod由一个Pause容器设置好整个Pod里面所有容器的网络、名称空间等信息
systemctl status可以观测到,Pod和容器进程关系
kubelet启动一个Pod,准备两个容器,一个是Pod声明的应用容器(nginx),另外一个是
Pause,Pause给当前应用容器设置好网络空间

在这里插入图片描述

1.2、Pod的使用

  • 可以编写deploy等各种工作负载的yaml文件,最终创建出pod,也可以直接创建
  • Pod的模板如下
#这里是 Pod 模版
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: helloimage: busyboxcommand: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep 3600']restartPolicy: OnFailure
#以上为 Pod 模版

1.3、 Pod生命周期

在这里插入图片描述

  • Pod启动,会先依次执行所有初始化容器,有一个失败,则Pod不能启动
  • 接下来启动所有的应用容器(每一个应用容器都必须能一直运行起来),Pod开始正式工作,一个启动失败就会尝试重启Pod内的这个容器,Pod只要是NotReady,Pod就不对外提供服务了

1.4、生命周期钩子

apiVersion: v1
kind: Pod
metadata:name: "pod-life-02"namespace: defaultlabels:app: "pod-life-02"
spec:volumes:- name: content-volemptyDir: {}initContainers:  ## Pod在启动containers之前,先要【运行完】initContainers的所有容器,所以这些容器必须有终结,不能一直运行- name: init-c-01image: alpine  ### 必须有终结的那个时刻,一般不要用一直启动的镜像command: ["/bin/sh","-c","echo 12222222 > /app/index.html;sleep 30;"]volumeMounts: - name: content-volmountPath: /app# - name: init-c-02#   image: alpine  ### 必须有终结的那个时刻,一般不要用一直启动的镜像#   command: ["/bin/sh","-c","echo 12222222 > /app/index.html;sleep 30;"]#   volumeMounts: #    - name: content-vol#      mountPath: /appcontainers:### docker run alpine 没有在后台一直启动的程序- name: pod-life-01image: "nginx" #默认的启动命令是启动nginx。nginx启动在后台一直有了volumeMounts: - name: content-volmountPath: /usr/share/nginx/html- name: pod-life-02image: "alpine"  #pod里面的containers都必须能启动起来,Pod会不断的重启这个容器command: ["/bin/sh","-c","sleep 30"]

在这里插入图片描述

1.5、临时容器

1.5.1、定义

临时容器:线上排错
有些容器基础镜像。线上没法排错。使用临时容器进入这个Pod。临时容器共享了Pod的所有。临时容器有Debug的一些命令,拍错完成以后,只要exit退出容器,临时容器自动删除

临时容器需要开启特性门控 --feature-gates=“EphemeralContainers=true”
在所有组件,api-server、kubelet、scheduler、controller-manager都得配置

1.5.2、使用临时容器的步骤

# 1、声明一个临时容器。准备好json文件
{"apiVersion": "v1","kind": "EphemeralContainers","metadata": {"name": "my-nginx666" //指定Pod的名字},"ephemeralContainers": [{"command": ["sh"],"image": "busybox", //jre的需要jdk来调试"imagePullPolicy": "IfNotPresent","name": "debugger","stdin": true,"tty": true,"terminationMessagePolicy": "File"}]
}# 2、使用临时容器,应用一下即可
kubectl replace --raw /api/v1/namespaces/default/pods/my-nginx666【pod
名】/ephemeralcontainers -f ec.json

1.6、静态Pod

在 /etc/kubernetes/manifests 位置放的所有Pod.yaml文件,机器启动kubelet自己就把他启动起来,静态Pod一直守护在他的这个机器上

2、Probe 探针机制(健康检查机制)

2.1、探针分类

  • 每个容器三种探针(Probe)
    • 启动探针**(后来才加的)** 一次性成功探针。 只要启动成功了
      • kubelet 使用启动探针,来检测应用是否已经启动。如果启动就可以进行后续的探测检
        查。慢容器一定指定启动探针。一直在等待启动
      • 启动探针 成功以后就不用了,剩下存活探针和就绪探针持续运行
    • 存活探针
      • kubelet 使用存活探针,来检测容器是否正常存活。(有些容器可能产生死锁【应用程序在运行,但是无法继续执行后面的步骤】), 如果检测失败就会**重新启动这个容器 **
      • initialDelaySeconds: 3600(长了导致可能应用一段时间不可用) 5(短了陷入无限启
        动循环)
    • 就绪探针
      • kubelet 使用就绪探针,来检测容器是否准备好了可以接收流量。当一个 Pod 内的所有
        容器都准备好了,才能把这个 Pod 看作就绪了。用途就是:Service后端负载均衡多个
        Pod,如果某个Pod还没就绪,就会从service负载均衡里面剔除
    • 谁利用这些探针探测
      • kubelet会主动按照配置给Pod里面的所有容器发送响应的探测请求

2.2、Probe配置项

- initialDelaySeconds :容器启动后要等待多少秒后存活和就绪探测器才被初始化,默认
是 0 秒,最小值是 0。这是针对以前没有
- periodSeconds :执行探测的时间间隔(单位是秒)。默认是 10 秒。最小值是 1。
- successThreshold :探测器在失败后,被视为成功的最小连续成功数。默认值是 1。- 存活和启动探针的这个值必须是 1。最小值是 1。
- failureThreshold :当探测失败时,Kubernetes 的重试次数。 存活探测情况下的放弃就
意味着重新启动容器。 就绪探测情况下的放弃 Pod 会被打上未就绪的标签。默认值是 3。最
小值是 1。
- timeoutSeconds :探测的超时后等待多少秒。默认值是 1 秒。最小值是 1

2.3、编写yaml测试探针机制

apiVersion: v1
kind: Pod
metadata:name: "nginx-start-probe02"namespace: defaultlabels:app: "nginx-start-probe02"
spec:volumes:- name: nginx-volhostPath:path: /app- name: nginx-htmlhostPath:path: /html
containers:
- name: nginximage: "nginx"ports:- containerPort: 80startupProbe:exec:command: ["/bin/sh","-c","cat /app/abc"] ## 返回不是0,那就是探测失败# initialDelaySeconds: 20 ## 指定的这个秒以后才执行探测periodSeconds: 5 ## 每隔几秒来运行这个timeoutSeconds: 5 ##探测超时,到了超时时间探测还没返回结果说明失败successThreshold: 1 ## 成功阈值,连续几次成才算成功failureThreshold: 3 ## 失败阈值,连续几次失败才算真失败volumeMounts:- name: nginx-volmountPath: /app- name: nginx-htmlmountPath: /usr/share/nginx/htmllivenessProbe: ## nginx容器有没有 /abc.html,就绪探针# httpGet:# host: 127.0.0.1# path: /abc.html# port: 80# scheme: HTTP# periodSeconds: 5 ## 每隔几秒来运行这个# successThreshold: 1 ## 成功阈值,连续几次成才算成功# failureThreshold: 5 ## 失败阈值,连续几次失败才算真失败exec:command: ["/bin/sh","-c","cat /usr/share/nginx/html/abc.html"] ## 返回
不是0,那就是探测失败# initialDelaySeconds: 20 ## 指定的这个秒以后才执行探测periodSeconds: 5 ## 每隔几秒来运行这个timeoutSeconds: 5 ##探测超时,到了超时时间探测还没返回结果说明失败successThreshold: 1 ## 成功阈值,连续几次成才算成功failureThreshold: 3 ## 失败阈值,连续几次失败才算真失败readinessProbe: ##就绪检测,都是httphttpGet:# host: 127.0.0.1 ###不行path: /abc.html ## 给容器发请求port: 80scheme: HTTP ## 返回不是0,那就是探测失败initialDelaySeconds: 2 ## 指定的这个秒以后才执行探测periodSeconds: 5 ## 每隔几秒来运行这个timeoutSeconds: 5 ##探测超时,到了超时时间探测还没返回结果说明失败successThreshold: 3 ## 成功阈值,连续几次成才算成功failureThreshold: 5 ## 失败阈值,连续几次失败才算真失败# livenessProbe:# exec: ["/bin/sh","-c","sleep 30;abc "] ## 返回不是0,那就是探测失败# initialDelaySeconds: 20 ## 指定的这个秒以后才执行探测# periodSeconds: 5 ## 每隔几秒来运行这个# timeoutSeconds: 5 ##探测超时,到了超时时间探测还没返回结果说明失败# successThreshold: 5 ## 成功阈值,连续几次成才算成功# failureThreshold: 5 ## 失败阈值,连续几次失败才算真失败

健康检查+优雅停机 = 0宕机
start完成以后,liveness和readness并存。 liveness失败导致重启。readness失败导致不给Service负载均衡网络中加,不接受流量。 kubectl exec -it 就进不去。Kubectl describe 看看咋了。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学C的第三十四天【程序环境和预处理】

相关代码gitee自取: C语言学习日记: 加油努力 (gitee.com) 接上期: 学C的第三十三天【C语言文件操作】_高高的胖子的博客-CSDN博客 1 . 程序的翻译环境和执行环境 在ANSI C(C语言标准)的任何一种实现中,存在两个不同的环境。 &#xff0…

PyTorch学习笔记(十六)——利用GPU训练

一、方式一 网络模型、损失函数、数据(包括输入、标注) 找到以上三种变量,调用它们的.cuda(),再返回即可 if torch.cuda.is_available():mynn mynn.cuda() if torch.cuda.is_available():loss_function loss_function.cuda(…

1339. 分裂二叉树的最大乘积

链接: ​​​​​​1339. 分裂二叉树的最大乘积 题解: /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* …

Java性能分析中常用命令和工具

当涉及到 Java 性能分析时,有一系列强大的命令和工具可以帮助开发人员分析应用程序的性能瓶颈、内存使用情况和线程问题。以下是一些常用的 Java 性能分析命令和工具,以及它们的详细说明和示例。 以下是一些常用的性能分析命令和工具汇总: …

Nacos配置管理、Feign远程调用、Gateway服务网关

1.Nacos配置管理 1.1.将配置交给Nacos管理的步骤 1.在Nacos中添加配置 Data Id服务名称-环境名称.yaml eg&#xff1a;userservice-dev.yaml 2.引入nacos-config依赖 在user-service服务中&#xff0c;引入nacos-config的客户端依赖 <!--nacos配置管理依赖--> <dep…

redis--主从复制

redis主从复制 Redis 主从复制是一种用于实现数据复制和数据备份的机制&#xff0c;它允许将一个 Redis 服务器的数据复制到其他 Redis 服务器上。主从复制在 Redis 中通常用于构建高可用性架构、读写分离以及数据分析等场景。 主从复制的角色 主服务器&#xff08;Master&a…

系统架构设计专业技能 · 软件工程之需求工程

系列文章目录 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA&#xff08;一&#xff09;【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估&#xff08;二&#xff09;【系统架构设计师】 系统架构设计高级技能 软件可靠性分析与设计…

Cpp学习——类与对象3

目录 一&#xff0c;初始化列表 1.初始化列表的使用 2.初始化列表的特点 3.必须要使用初始化列表的场景 二&#xff0c;单参数构造函数的隐式类型转换 1.内置类型的隐式类型转换 2. 自定义类型的隐式类型转换 3.多参数构造函数的隐式类型转换 4.当你不想要发生隐式类型转换…

Unity VR:XR Interaction Toolkit 输入系统(Input System):获取手柄的输入

文章目录 &#x1f4d5;教程说明&#x1f4d5;Input System 和 XR Input Subsystem&#xff08;推荐 Input System&#xff09;&#x1f4d5;Input Action Asset⭐Actions Maps⭐Actions⭐Action Properties&#x1f50d;Action Type (Value, Button, Pass through) ⭐Binding …

数据结构<树和二叉树>顺序表存储二叉树实现堆排

✨Blog&#xff1a;&#x1f970;不会敲代码的小张:)&#x1f970; &#x1f251;推荐专栏&#xff1a;C语言&#x1f92a;、Cpp&#x1f636;‍&#x1f32b;️、数据结构初阶&#x1f480; &#x1f4bd;座右铭&#xff1a;“記住&#xff0c;每一天都是一個新的開始&#x1…

Gin+微服务实现抖音视频上传到七牛云

文章目录 安装获取凭证Gin处理微服务处理 如果你对Gin和微服务有一定了解&#xff0c;看本文较容易。 安装 执行命令&#xff1a; go get github.com/qiniu/go-sdk/v7获取凭证 Go SDK 的所有的功能&#xff0c;都需要合法的授权。授权凭证的签算需要七牛账号下的一对有效的A…

Go语言入门指南:基础语法和常用特性解析(上)

一、Go语言前言 Go是一种静态类型的编译语言&#xff0c;常常被称作是21世纪的C语言。Go语言是一个开源项目&#xff0c;可以免费获取编译器、库、配套工具的源代码&#xff0c;也是高性能服务器和应用程序的热门选择。 Go语言可以运行在类UNIX系统——比如Linux、OpenBSD、M…

Python批量爬虫下载文件——把Excel中的超链接快速变成网址

本文的背景是&#xff1a;大学关系很好的老师问我能不能把Excel中1000个超链接网址对应的pdf文档下载下来。虽然可以手动一个一个点击下载&#xff0c;但是这样太费人力和时间了。我想起了之前的爬虫经验&#xff0c;给老师分析了一下可行性&#xff0c;就动手实践了。    没…

Platypus:Quick,Cheap,and Powerful Refinement of LLMs

Platypus:Quick,Cheap,and Powerful Refinement of LLMs IntroductionMethod2.1 Curating Open- PlatypusRemoving similar&duplicate questionsContamination CheckFine-tuning & mergingResult参考Introduction 现在大模型已经取得很不错的结果,如何把大模型的能…

sh 脚本循环语句和正则表达式

目录 1、循环语句 1、for 2、while 3、until 2、正则表达式 1、元字符 2、表示次数 3、位置锚定 4、分组 5、扩展正则表达式 1、循环语句 循环含义 将某代码段重复运行多次&#xff0c;通常有进入循环的条件和退出循环的条件 重复运行次数 循环次数事先已知 循环次…

1、攻防世界第一天

1、网站目录下会有一个robots.txt文件&#xff0c;规定爬虫可以/不可以爬取的网站。 2、URL编码细则&#xff1a;URL栏中字符若出现非ASCII字符&#xff0c;则对其进行URL编码&#xff0c;浏览器将该请求发给服务端&#xff1b;服务端会可能会先对收到的url进行解码&#xff0…

使用 Amazon Redshift Serverless 和 Toucan 构建数据故事应用程序

这是由 Toucan 的解决方案工程师 Django Bouchez与亚马逊云科技共同撰写的特约文章。 带有控制面板、报告和分析的商业智能&#xff08;BI&#xff0c;Business Intelligence&#xff09;仍是最受欢迎的数据和分析使用场景之一。它为业务分析师和经理提供企业的过去状态和当前状…

字符设备驱动实例(PWM和RTC)

目录 五、PWM 六、RTC 五、PWM PWM(Pulse Width Modulation&#xff0c;脉宽调制器)&#xff0c;顾名思义就是一个输出脉冲宽度可以调整的硬件器件&#xff0c;其实它不仅脉冲宽度可调&#xff0c;频率也可以调整。它的核心部件是一个硬件定时器&#xff0c;其工作原理可以用…

抖音火山引擎推出免费域名DNS和公共DNS服务

抖音旗下的云计算服务火山引擎最近推出了"TrafficRoute DNS 套件"服务&#xff0c;其中包括两款产品&#xff0c;对软希网来说非常有用。 1.域名DNS&#xff1a; 这是一个用于网站域名的DNS服务&#xff0c;可以加速域名解析速度&#xff0c;从而提升网站的速度。如…

初出茅庐的小李博客之STM32CubeMx驱动WS2812B实现幻彩(超详)

STM32CubeMx驱动WS2812B实现幻彩&#xff08;超详&#xff09; 1.创建基于STM32F03C8T6工程 1.1配置时钟 选择外部高速时钟源HSE 1.2配置系统时钟树使其达到最大时钟72MHz&#xff08;最大系统时钟&#xff09; 由时钟树可以知道APB1上定时器时钟频率是72MHz,实验使用的硬件…