kubelet 探针

2024-09-06 04:36
文章标签 探针 kubelet

本文主要是介绍kubelet 探针,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

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: nulllabels:run: shuyanname: shuyan
spec:containers:- image: myapp:v1name: shuyanresources: {}dnsPolicy: ClusterFirstrestartPolicy: 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: shuyanname: shuyan
spec:containers:- image: myapp:v1name: shuyan######################## 以上修改为 ######################metadata:labels:run: shuyanname: shuyan
spec:containers:- image: myapp:v1name: shuyanlivenessProbe:    # 检测失败直接杀死容器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-node2Normal   Started    97s (x3 over 107s)  kubelet            Started container shuyanWarning  Unhealthy  92s (x9 over 104s)  kubelet            Liveness probe failed: dial tcp 10.244.2.19:8080: connect: connection refusedNormal   Killing    92s (x3 over 102s)  kubelet            Container shuyan failed liveness probe, will be restartedWarning  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 machineNormal   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: shuyanname: shuyan
spec:containers:- image: myapp:v1name: shuyanlivenessProbe:tcpSocket:port: 80            # 将端口改回80initialDelaySeconds: 3periodSeconds: 1timeoutSeconds: 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-node1Normal  Pulled     2m14s  kubelet            Container image "myapp:v1" already present on machineNormal  Created    2m14s  kubelet            Created container shuyanNormal  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 yamlapiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: shuyanname: shuyan
spec:containers:- image: myapp:v1name: shuyanresources: {}dnsPolicy: ClusterFirstrestartPolicy: 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.ymlapiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: shuyanname: shuyan
spec:containers:- image: myapp:v1name: shuyanresources: {}dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}# 修改为以下
apiVersion: v1
kind: Pod
metadata:labels:run: shuyanname: shuyan
spec:containers:- image: myapp:v1name: shuyanreadinessProbe:    # 就绪探针httpGet:path: /test.html   # 网站根目录下port: 80initialDelaySeconds: 1periodSeconds: 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>

这篇关于kubelet 探针的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141012

相关文章

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

Kubernetes 之 kubelet 与 CRI、CNI 的交互过程

序言 当一个新的 Pod 被提交创建之后,Kubelet、CRI、CNI 这三个组件之间进行了哪些交互? Kubelet -> CRI -> CNI 如上图所示: Kubelet 从 kube-api-server 处监听到有新的 pod 被调度到了自己的节点且需要创建。Kubelet 创建 sandbox 并配置好 Pod 的环境,其中包括: Kubelet 通过 gRPC 调用 C

记录k8s重启之后kubelet无法启动的问题

重启机器后,kubelet没有自启动,手动启动失败,检查日志反馈找不到bootstrap-kubelet.conf这个文件。 systemctl start kubeletjournalctl -u kubelet57481 run.go:74] "command failed" err="failed to run Kubelet: unable to load bootstrap kub

奇安信天眼--探针/分析平台部署及联动

奇安信天眼–探针/分析平台部署及联动 一 概述二 探针/分析平台部署及联动 1.网络拓扑2.配置流量传感器(探针) (1)登录控制台(2)配置接口(3)配置默认路由及DNS(4)配置SNMP(5)在探针联动分析平台 3.配置分析平台 (1)登录控制台(2)配置接口(3)配置默认路由及DNS(4)配置SNMP(5)在分析平台联动探针(6)新增采集设备 三 检查 1.部署完成,注意检查传感器和分析

信息打点-CDN绕过篇漏洞回链接口探针全网扫描反向邮件

知识点: 0、CDN知识-工作原理及阻碍 1、CDN配置-域名&区域&类型 2、CDN绕过-靠谱十余种技战法 3、CDN绑定-HOSTS绑定指向访问 CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基

探针卡组成说明

探针卡 探针卡被描述为测试仪的“手”。如果我们这样看待探针卡,那么探针就起到了它的“手指”的作用。如图1-4所示,探针是探针卡中实际与集成电路接触的部分。 探针 1、直探针 图1-1:直探头/探头(未按比例) 通常,如果探针是从供应商处购买的,它们的到达方式如图1-1所示。它们是直的、薄的、针状的金属片,一端逐渐变细成尖锐的尖端。探针通常由钨(W)和铼钨(ReW)制成,不过也使用铍

k8s探针详细学习笔记

在 Kubernetes 中,主要有三种类型的探针(Probes),用于检测容器的状态: 1.存活探针(Liveness Probes): 用来检测容器是否存活,即容器是否仍在运行。如果存活探针失败,Kubernetes 会根据容器的重启策略来重启容器。 2.就绪探针(Readiness Probes): 用来检测容器是否已经准备好接收流量。如果就绪探针失败,Kubernetes 会阻止将新的流量

CSI 插件如何注册到 kubelet 的

文章目录 一、CSI Driver 如何注册到 kubelet 的1、启动 CSI Node Server2、启动 Node Driver Registrar3、Node Driver Registrar 获取 CSI Plugin 信息4、Kubelet 发现 Node Driver Registrar5、Kubelet 获取 Node Server 信息6、更新 Node 和 CSINo

Star-CCM+探针查看与创建

在实际应用工况中,数值计算结束后为了产看某个点的标量场或矢量场可以采用探针查看。而在软件中可以通过“,”、“。”快捷键进行创建与查看。两者的区别具体如下所示: 鼠标放在要查看部件的位置,同时点击键盘上的“。”键,即可在输出窗口输出标量场的值。  鼠标放在要查看部件的位置,同时点击键盘上的“,”键;即可在输出窗口标定该点标量场的值(2022.1版本之后)。也可以通过创建衍生零部件“点”——注

【C/C++】我自己提出的数组探针的概念,快来围观吧

数组探针 在许多编程语言中如果涉及到数组那么就可以使用这个东西,便于遍历数组 中文名 数组探针 外文名 arrProbe 适用领域 大数据 所属学科 软件技术、编程 提出者 董翔 目录 1 概述2 工作原理3 应用场景 ▪ 数据处理和分析▪ 图像处理▪ 游戏开发▪ 模拟和建模 4 示例代码5 总结 概述 数组探针(Array Probe)是一个编程中常