kubelet 探针

news2024/9/25 9:37:22

目录

1 k8s中kubelet 探针的介绍

1.1 探针是由 kubelet 对容器执行的定期诊断:

1.2 Kubelet 可以选择是否执行在容器上运行的三种探针执行和做出反应:

1.3 ReadinessProbe 与 LivenessProbe 的区别

1.4 StartupProbe 与 ReadinessProbe、LivenessProbe 的区别

2 实施探针的实例

2.1 LivenessProbe 探针

2.1.1 创建 Pod 的yml文件

2.1.2 启动容器观察容器在探测之后是否被干掉

2.1.3 将端口修改为web服务器默认的端口号

2.2 ReadinessProbe 探针

2.2.1 创建 Pod 的yml 文件

2.2.2 启动并查看效果

2.2.3 添加探针相应规则

2.2.4 查看规则匹配实现效果 


1 k8s中kubelet 探针的介绍

1.1 探针是由 kubelet 对容器执行的定期诊断:

  • ExecAction:在容器内执行指定命令。如果命令退出时返回码为 0 则认为诊断成功。

  • TCPSocketAction:对指定端口上的容器的 IP 地址进行 TCP 检查。如果端口打开,则诊断被认为是成功的。

  • HTTPGetAction:对指定的端口和路径上的容器的 IP 地址执行 HTTP Get 请求。如果响应的状态码大于等于200 且小于 400,则诊断被认为是成功的。

每次探测都将获得以下三种结果之一:

  • 成功:容器通过了诊断。

  • 失败:容器未通过诊断。

  • 未知:诊断失败,因此不会采取任何行动。

1.2 Kubelet 可以选择是否执行在容器上运行的三种探针执行和做出反应:

  • livenessProbe:指示容器是否正在运行。如果存活探测失败,则 kubelet 会杀死容器,并且容器将受到其 重启策略 的影响。如果容器不提供存活探针,则默认状态为 Success。

  • readinessProbe:指示容器是否准备好服务请求。如果就绪探测失败,端点控制器将从与 Pod 匹配的所有 Service 的端点中删除该 Pod 的 IP 地址。初始延迟之前的就绪状态默认为 Failure。如果容器不提供就绪探针,则默认状态为 Success。

  • startupProbe: 指示容器中的应用是否已经启动。如果提供了启动探测(startup probe),则禁用所有其他探测,直到它成功为止。如果启动探测失败,kubelet 将杀死容器,容器服从其重启策略进行重启。如果容器没有提供启动探测,则默认状态为成功Success。

1.3 ReadinessProbe 与 LivenessProbe 的区别

  • ReadinessProbe 当检测失败后,将 Pod 的 IP:Port 从对应的 EndPoint 列表中删除

  • LivenessProbe 当检测失败后,将杀死容器并根据 Pod 的重启策略来决定作出对应的措施

1.4 StartupProbe 与 ReadinessProbe、LivenessProbe 的区别

  • 如果三个探针同时存在,先执行 StartupProbe 探针,其他两个探针将会被暂时禁用,直到 pod 满足 StartupProbe 探针配置的条件,其他 2 个探针启动,如果不满足按照规则重启容器。

  • 另外两种探针在容器启动后,会按照配置,直到容器消亡才停止探测,而 StartupProbe 探针只是在容器启动后按照配置满足一次后,不在进行后续的探测。

2 实施探针的实例

2.1 LivenessProbe 探针

LivenessProbe 当检测失败后,将杀死容器并根据 Pod 的重启策略来决定作出对应的措施

2.1.1 创建 Pod 的yml文件

# 以yaml的格式输出一个模版并不做配置
[root@k8s-master yaml]# kubectl run shuyan --image myapp:v1 \
> --dry-run=client -o yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: shuyan
  name: shuyan
spec:
  containers:
  - image: myapp:v1
    name: shuyan
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

# 将输出模版导入yml文件中
[root@k8s-master yaml]# kubectl run shuyan \
--image myapp:v1 --dry-run=client -o yaml > shuyan.yml

# 修改yml文件
[root@k8s-master yaml]# vim shuyan.yml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: shuyan
  name: shuyan
spec:
  containers:
  - image: myapp:v1
    name: shuyan

######################## 以上修改为 ######################

metadata:
  labels:
    run: shuyan
  name: shuyan
spec:
  containers:
  - image: myapp:v1
    name: shuyan
    livenessProbe:    # 检测失败直接杀死容器
      tcpSocket:      # 检测端口的存在性
        port: 8080    # 检测容器8080端口是否存在不存在就杀死
      initialDelaySeconds: 3    # 容器启动多少秒之后探针就开始工作
      periodSeconds: 1          # 这里为每隔一秒检测一次 
      timeoutSeconds: 1         # 探针执行探测的请求后,超时时间为1秒 ,默认时间为1秒  

2.1.2 启动容器观察容器在探测之后是否被干掉

启动发现到17秒的时候kubelet将这一个容器给杀死了 ,并根据 Pod 的重启策略来决定作出对应的措施

[root@k8s-master yaml]# kubectl apply -f shuyan.yml 
pod/shuyan created
[root@k8s-master yaml]# kubectl get pods 
NAME     READY   STATUS    RESTARTS   AGE
shuyan   1/1     Running   0          5s
[root@k8s-master yaml]# kubectl get pods 
NAME     READY   STATUS    RESTARTS   AGE
shuyan   1/1     Running   0          6s
[root@k8s-master yaml]# kubectl get pods 
NAME     READY   STATUS    RESTARTS     AGE
shuyan   1/1     Running   1 (2s ago)   8s
[root@k8s-master yaml]# kubectl get pods 
NAME     READY   STATUS    RESTARTS     AGE
shuyan   1/1     Running   1 (5s ago)   11s
[root@k8s-master yaml]# kubectl get pods 
NAME     READY   STATUS    RESTARTS     AGE
shuyan   1/1     Running   2 (2s ago)   13s
[root@k8s-master yaml]# kubectl get pods 
NAME     READY   STATUS    RESTARTS     AGE
shuyan   1/1     Running   2 (4s ago)   15s
[root@k8s-master yaml]# kubectl get pods 
NAME     READY   STATUS             RESTARTS     AGE
shuyan   0/1     CrashLoopBackOff   2 (1s ago)   17s


# 查看详细信息
[root@k8s-master yaml]# kubectl describe pods shuyan 
Events:
  Type     Reason     Age                 From               Message
  ----     ------     ----                ----               -------
  Normal   Scheduled  107s                default-scheduler  Successfully assigned default/shuyan to k8s-node2
  Normal   Started    97s (x3 over 107s)  kubelet            Started container shuyan
  Warning  Unhealthy  92s (x9 over 104s)  kubelet            Liveness probe failed: dial tcp 10.244.2.19:8080: connect: connection refused
  Normal   Killing    92s (x3 over 102s)  kubelet            Container shuyan failed liveness probe, will be restarted
  Warning  BackOff    91s (x2 over 92s)   kubelet            Back-off restarting failed container shuyan in pod shuyan_default(f7cb2433-0bad-45c8-a09c-681987c23e3a)
  Normal   Pulled     79s (x4 over 107s)  kubelet            Container image "myapp:v1" already present on machine
  Normal   Created    79s (x4 over 107s)  kubelet            Created container shuyan

2.1.3 将端口修改为web服务器默认的端口号

[root@k8s-master yaml]# vim shuyan.yml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: shuyan
  name: shuyan
spec:
  containers:
  - image: myapp:v1
    name: shuyan
    livenessProbe:
      tcpSocket:
        port: 80            # 将端口改回80
      initialDelaySeconds: 3
      periodSeconds: 1
      timeoutSeconds: 1

[root@k8s-master yaml]# kubectl delete pods shuyan 
pod "shuyan" deleted

[root@k8s-master yaml]# kubectl apply -f shuyan.yml 
pod/shuyan created

[root@k8s-master yaml]# kubectl get pods 
NAME     READY   STATUS    RESTARTS   AGE
shuyan   1/1     Running   0          8s


[root@k8s-master yaml]# kubectl describe pods shuyan
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  2m14s  default-scheduler  Successfully assigned default/shuyan to k8s-node1
  Normal  Pulled     2m14s  kubelet            Container image "myapp:v1" already present on machine
  Normal  Created    2m14s  kubelet            Created container shuyan
  Normal  Started    2m14s  kubelet            Started container shuyan

2.2 ReadinessProbe 探针

2.2.1 创建 Pod 的yml 文件

[root@k8s-master yaml]# kubectl run shuyan \
--image myapp:v1 --dry-run=client -o yaml

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: shuyan
  name: shuyan
spec:
  containers:
  - image: myapp:v1
    name: shuyan
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

# 将文件模版导入
[root@k8s-master yaml]# kubectl run shuyan \
--image myapp:v1 --dry-run=client -o yaml > shuyan.yml

[root@k8s-master yaml]# vim shuyan.yml

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: shuyan
  name: shuyan
spec:
  containers:
  - image: myapp:v1
    name: shuyan
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

# 修改为以下
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: shuyan
  name: shuyan
spec:
  containers:
  - image: myapp:v1
    name: shuyan
    readinessProbe:    # 就绪探针
      httpGet:
        path: /test.html   # 网站根目录下
        port: 80
      initialDelaySeconds: 1
      periodSeconds: 3 
      timeoutSeconds: 1

2.2.2 启动并查看效果

[root@k8s-master yaml]# kubectl apply -f shuyan.yml 
pod/shuyan created
[root@k8s-master yaml]# kubectl get pods 
NAME     READY   STATUS    RESTARTS   AGE
shuyan   0/1     Running   0          3s
[root@k8s-master yaml]# kubectl describe pods shuyan 

[root@k8s-master yaml]# kubectl describe service shuyan 
Name:              shuyan
Namespace:         default
Labels:            run=shuyan
Annotations:       <none>
Selector:          run=shuyan
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.111.0.138
IPs:               10.111.0.138
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:                                 # 没有暴露端口,就绪探测不满足条件
Session Affinity:  None
Events:            <none>

2.2.3 添加探针相应规则

[root@k8s-master yaml]# kubectl exec  pods/shuyan -c shuyan \
-- /bin/sh -c "echo test > /usr/share/nginx/html/test.html"

2.2.4 查看规则匹配实现效果 

[root@k8s-master yaml]# kubectl get pods 
NAME     READY   STATUS    RESTARTS   AGE
shuyan   1/1     Running   0          10m

[root@k8s-master yaml]# kubectl describe service shuyan 
Name:              shuyan
Namespace:         default
Labels:            run=shuyan
Annotations:       <none>
Selector:          run=shuyan
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.111.0.138          # 集群IP地址
IPs:               10.111.0.138
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.2.20:80        # 后端容器IP
Session Affinity:  None
Events:            <none>

满足条件暴露后端容器IP,这样的策略类似于keepalived配合LVS,
不匹配就会自动删除后端服务器策略
总结来说,这个服务 shuyan 是一个内部集群服务,
它将集群内部的流量通过 IP 地址 10.111.0.138 
和端口 80 转发到带有标签 run=shuyan 的 Pod 上。
当前的后端 Pod IP 地址是 10.244.2.20,端口为 80。


[root@k8s-master yaml]# kubectl get pods -o wide 
NAME     READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATES
shuyan   1/1     Running   0          10m   10.244.2.20   k8s-node2   <none>           <none>

[root@k8s-master yaml]# curl 10.244.2.20
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

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

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

相关文章

CCRC-DSA数据安全评估师:网络安全风险评估

1.网络安全风险评估概述 1.1概念 在当今信息化时代&#xff0c;网络安全成为了组织不可或缺的一部分。 风险评估作为一种科学方法&#xff0c;其目的是对网络系统的保密性、完整性、可控性和可用性这四个核心安全属性进行深入分析。 这一过程不仅包括识别网络系统中存在的脆…

Snipaste无法使用F1、F3等快捷键的保姆级解决方法

在Snipaste中按F1、F3等快捷键无效的可能原因&#xff1a; 1. 软件设置&#xff1a; 检查Snipaste的设置&#xff0c;确保F1被正确设置为截屏热键&#xff0c;并确认没有其他软件占用或冲突。 2. 热键冲突&#xff1a; 笔记本电脑的功能键&#xff08;F1-F12&#xff09;通常…

MySQL 数据库:原理、应用与发展

摘要&#xff1a;本文深入探讨了 MySQL 数据库相关内容。首先介绍了 MySQL 作为开源关系型数据库管理系统的显著特点&#xff0c;包括易用性、跨平台性、高性能、可扩展性、开源免费以及数据安全性等方面。接着详细阐述了其安装与配置过程&#xff0c;涵盖在不同操作系统上的安…

STM32使用 :串口的接收与发送

一、串口 在 STM32 中&#xff0c;串口&#xff08;UART&#xff0c;通用异步收发传输器&#xff09;是用于串行通信的外设。它在嵌入式系统中的作用非常广泛&#xff0c;主要包括几个方面 数据通信 串口用于微控制器与其他设备之间的数据传输。这些设备可以是其他微控制器、…

F12抓包08:查看网站Cookie

课程大纲 1、查看Cookie 1. 应用界面查看&#xff1a;按F12进入浏览器的开发者模式 - “应用”&#xff08;Application&#xff09; - Cookie&#xff0c;可查看Cookie并进行增、删、改、查操作。 2. 控制台命令行查看&#xff1a;按F12进入浏览器的开发者模式 - “控制台”&…

【无标题】nginx服务器代码信息、数据库连接信息、敏感文件的路径、服务器版本信息发起有针对性的攻击

Nginx敏感文件的路径、服务器版本信息 Nginx 403、404、500等错误时&#xff0c;返回详细错误信息。报错信息中可能会包含服务器代码信息、数据库连接信息、敏感文件的路径、服务器版本信息等&#xff0c;攻击者可以利用这些信息来寻找已知的漏洞&#xff0c;从而发起有针对性…

『功能项目』管理器基类【38】

我们打开上一篇37单例模式框架的项目&#xff0c; 本章要做的事情是编写管理器基类 首先创建脚本&#xff1a;ManagerBase.cs using UnityEngine; public abstract class ManagerBase : MonoBehaviour{public virtual void Init() { } } public class ManagerBase<T> : …

【Qt系列样式表】探索Qt Widget的艺术化设计与应用(Macos风格)(持续更新中...)

✨✨ Rqtz 个人主页 : 点击✨✨ &#x1f308;Qt系列专栏:点击 &#x1f388;PyQt系列专栏:点击&#x1f388; &#x1f388;Qt智能车上位机专栏: 点击&#x1f388; &#x1f388;Qt串口助手专栏:点击&#x1f388; &#x1f4ab;宗旨:共享IT之美,共创机器未来 目录 界面…

毕业论文word页眉页脚和页码的问题

多找B站视频查看视频操作方法。 问题1&#xff1a; 不同章节的页眉显示不同内容。 解决办法&#xff1a; “布局”里面插入分节符 &#xff08;非 分页符。&#xff09; 问题2&#xff1a; 页眉需要奇偶页内容不同 解决办法&#xff0c;编辑页眉部分&#xff0c;设置 奇偶页…

Qt (15)【Qt窗口 —— 字体对话框 QFontDialog | 输入对话框 QInputDialog】

阅读导航 引言一、字体对话框 QFontDialog1. 简介2. 基本用法3. 示例代码 二、输入对话框 QInputDialog1. 简介2. 基本用法&#xff08;1&#xff09;双精度浮点型输入数据对话框&#xff08;2&#xff09;整型输入数据对话框&#xff08;3&#xff09;选择条目型输入数据框 3.…

李沐对大模型趋势的几点判断

李沐是上海交通大学 2011 届计算机科学与工程系本硕系友。他曾担任亚马逊资深首席科学家&#xff0c;加州大学伯克利分校和斯坦福大学的访问助理教授&#xff0c;是前 Marianas Labs 联合创始人&#xff0c;深度学习框架 Apache MXNet 的创始人之一。目前是 BosonAI 联合创始人…

【数据分析】标准误差与标准差的区别

标准误差&#xff08;Standard Error, SE&#xff09;和标准差&#xff08;Standard Deviation, SD&#xff09;是两个在统计学中非常重要的概念&#xff0c;但它们的含义和用途有所不同。以下是它们之间的主要区别&#xff1a; 定义&#xff1a; 标准差&#xff1a;衡量单个数…

【mybatis】使用模糊查询时报错:Encountered unexpected token: “?“ “?“

报错信息如下&#xff1a; Mapper.xml报错代码&#xff1a; AND HILIST_NAME like %#{hilistName}% 解决方案&#xff1a; 把模糊查询的 sql 语句改为使用 CONCAT 命令拼接, 就不会报错了。 AND HILIST_NAME like CONCAT(%, #{hilistName},%)

深入探讨-JavaScript-逻辑赋值运算符

null && 100**2 // null undefined && 100**2 // undefined 逻辑赋值运算符 && || ?? 这个运算符将赋值与条件逻辑运算符结合在一起&#xff0c;因此命名为**“逻辑赋值”** 。它们只是一种简写&#xff0c; 例如&#xff0c;x && y是x …

Windows本地部署ollama并实现无公网IP远程运行qwen大语言模型

文章目录 前言1. 运行Ollama2. 安装Open WebUI2.1 在Windows系统安装Docker2.2 使用Docker部署Open WebUI 3. 安装内网穿透工具4. 创建固定公网地址 前言 本文主要介绍如何在Windows系统快速部署Ollama开源大语言模型运行工具&#xff0c;并安装Open WebUI结合cpolar内网穿透软…

打造智能数据分析平台:基于 Flask 的数据处理与模型精度验证系统

数据分析和机器学习已成为企业和科研中不可或缺的核心技术。在这个数据驱动的时代&#xff0c;能够快速处理海量数据&#xff0c;并通过智能算法提取出有用信息&#xff0c;成为了提升竞争力的关键。为了解决这些需求&#xff0c;我基于 Flask 开发了一款功能强大、模块化的数据…

【蓝桥杯单片机-0.基于定时器的时钟程序设计】

蓝桥杯单片机-0.基于定时器的时钟程序设计 题目小注意点按键三行矩形按键按键功能时间更新显示界面的小数点LED灯闪烁其他功能 完整代码 链接: 视频搭配视频&#xff0c;这里只是一些笔记&#xff0c;并不完整 题目 小注意点 按键三行 Key_Val Key_Read();//实时读取键码值…

JDBC知识点总结概括(day29)

1 学习目标 了解JDBC的概念重点掌握JDBC的CRUD重点掌握JDBC的各个对象的使用 2 GIT 查看安装手册 3 JDBC概述 3.1 数据的持久化 持久化(persistence)&#xff1a;把数据保存到可掉电式存储设备中以供之后使用。大多数情况下&#xff0c;特别是企业级应用&#xff0c;数据持…

【人工智能学习笔记】5 计算机视觉基础

计算机视觉概述 定义&#xff1a;计算机视觉&#xff08;Computer Vision&#xff09;是一门研究如何使机器“看”的科学&#xff0c;也可以看作是研究如何使人工系统从图像活多维数据中“感知”的科学终极目标&#xff1a;计算机视觉成为机器认知世界的基础&#xff0c;终极目…

Linux——高流量 高并发(访问场景) 高可用(架构要求)

高并发通用设计逻辑&#xff1a; 定位单点&#xff0c;拆分问题 架构调整的顺序&#xff1a; 动静分离 // 没有实现动静分离 // 静态请求 交给 nginx或者 httpd 这种对于静态资源处理效率更高的服务&#xff0c;动态请求 交给php-fpm 服务来处理 使用云服务提供商 &#xff…