🏷️个人主页牵着猫散步的鼠鼠 

🏷️系列专栏Kubernetes渐进式学习-专栏

🏷️个人学习笔记,若有缺误,欢迎评论区指正 

目录

1. 前言

2. 探针是什么

3. 探针的分类

3.1. StartupProbe(启动探针)

3.2.  LivenessProbe(存活探针)

3.3.  ReadinessProbe(就绪探针)

4. 探针探测方式

4.1.  ExecAction(命令)

4.2.  TCPSocketAction(TCP连接)

4.3.  HTTPGetAction(Http连接)

6. 使用探针

5. 总结


1. 前言

我们在上次文章讲解了配置文件的编写,以及如何通过配置文件启动一个Pod资源,今天我们继续来学习Pod中一个重要的概念-探针。

2. 探针是什么

探针是Kubernetes中用于检查容器健康状况的机制。在Kubernetes中,探针可以确保Pod中的容器正常工作,并且可以在容器不健康的情况下自动重启容器,以保证应用程序的可用性和稳定性。我们在上一节配置文件中配置的重启策略,也是通过探针实现的。

3. 探针的分类

K8S中的探针主要分为三类:StartupProbe,LivenessProbe,ReadinessProbe

3.1. StartupProbe(启动探针)

k8s 1.16 版本新增的探针,用于判断应用程序是否已经启动了。

当配置了 startupProbe 后,会先禁用其他探针,直到 startupProbe 成功后,其他探针才会继续。

作用:由于有时候不能准确预估应用一定是多长时间启动成功,因此配置另外两种方式不方便配置初始化时长来检测,而配置了 statupProbe 后,只有在应用启动成功了,才会执行另外两种探针,可以更加方便的结合使用另外两种探针使用。

startupProbe:
  httpGet:
    path: /api/startup
    port: 80

3.2.  LivenessProbe(存活探针)

用于探测容器中的应用是否运行,如果探测失败,kubelet 会根据配置的重启策略进行重启,若没有配置,默认就认为容器启动成功,不会执行重启策略。

livenessProbe:
  failureThreshold: 5
  httpGet:
    path: /health
    port: 8080
    scheme: HTTP
  initialDelaySeconds: 60
  periodSeconds: 10
  successThreshold: 1
  timeoutSeconds: 5

3.3.  ReadinessProbe(就绪探针)

用于探测容器内的程序是否健康,它的返回值如果返回 success,那么就认为该容器已经完全启动,并且该容器是可以接收外部流量的。

readinessProbe:
  failureThreshold: 3 # 错误次数
  httpGet:
    path: /ready
    port: 8181
    scheme: HTTP
  periodSeconds: 10 # 间隔时间
  successThreshold: 1
  timeoutSeconds: 1

4. 探针探测方式

那么探针是如何判断容器的状态的呢,一般可以通过三种方式:

4.1.  ExecAction(命令)

在容器内部执行一个命令,如果返回值为 0,则任务容器时健康的。

livenessProbe:
  exec:
    command:
      - cat
      - /health

4.2.  TCPSocketAction(TCP连接)

通过 tcp 连接监测容器内端口是否开放,如果开放则证明该容器健康

livenessProbe:
  tcpSocket:
    port: 80

4.3.  HTTPGetAction(Http连接)

生产环境用的较多的方式,发送 HTTP 请求到容器内的应用程序,如果接口返回的状态码在 200~400 之间,则认为容器健康。

livenessProbe:
  failureThreshold: 5
  httpGet:
    path: /health
    port: 8080
    scheme: HTTP
    httpHeaders:
      - name: xxx
        value: xxx

6. 使用探针

我们接下来在上节课案例的基础上运用一下探针,我们在原来的yaml配置文件中假如探针配置,使用http方式来探测启动情况,因为ngixn没有提供这个服务,理论上会启动失败

    startupProbe: #应用启动探针配置
      httpGet: #探测方式,基于http请求探测
        path: fapi/path # http请求路径
        port: 80 #请求端口
      failureThreshold: 3 #失败多少次才算真正失败
      periodSeconds: 10 #间隔时间
      successThreshold: 1 #多少次监测成功算成功
      timeoutSeconds: 5 #请求的超时时间

删除上次文章创建的pod 

kubectl delete pod nginx-demo

 重新启动pod

kubectl create -f nginx-demo.yaml

查看容器启动情况

kubectl describe po nginx-demo

可以看到最下方提示Http failure,但我们知道ngixn默认肯定是没有/api/path这个服务路径的,所以启动探针探测肯定是不成功的,这个pod的容器服务就被判定为未成功启动。

但是我们可以换一种探测方式,使用TCP方式去连接服务的80端口,这样更合适探测nginx服务是否正常启动

修改配置,将探测方法改为tcpSocket,探测端口为80

 重启启动服务

kubectl delete pod nginx-demo
kubectl create -f nginx-demo.yaml

可以看到pod服务状态为Running,正常运行 。

5. 总结

在 Kubernetes(k8s)中,Pod 的探针(Probe)是一种健康检查机制,用于确保 Pod 中的容器能够正常工作。Kubernetes 通过探针来检查容器的状态,以确保服务能够可靠地运行。探针主要有三种类型:存活探针,就绪探针,启动探针。探针可以通过三种方式探测:HTTP GET方式,TCP套接字方式,Exec命令方式。探针机制是 Kubernetes 自动化管理和自愈能力的重要组成部分,它确保了 Pod 的健康状态,提高了应用的可用性和稳定性。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐