Kubernetes 三大探针及探针方式

一、探针背景介绍

1、编排工具运行时,虽说pod挂掉会在控制器的调度下会重启,出现pod重启的时候,但是pod状态是running,无法真实的反应当时pod健康状态,我们可以通过Kubernetes的探针监控到pod的实时状态。

二、Kubernetes三种探针类型

启动探针(Startup Probe):判断容器内的应用是否启动完成(在启动探针判断成功前,就绪探针和存活探针将不会执行)

就绪探针(Readiness Probe):判断容器是否已经就绪,若未就绪,容器将会处于未就绪,未就绪的容器,不会进行流量的调度。

存活探针(Liveness Probe):判断容器内的应用程序是否正常,若不正常,K8s 将会重新重启容器。

三、探针的三种方式

exec:通过在容器内执行指定命令,来判断命令退出时返回的状态码,如果为 0 表示正常。

httpGet:通过对容器的 IP 地址、端口和 URL 路径来发送 GET 请求;如果响应的状态码在 200 ~ 399 间,表示正常。

tcpSocket:通过对容器的 IP 地址和指定端口,进行 TCP 检查,如果端口打开,表示正常。

四、配置项

initialDelaySeconds:等待我们定义的时间 结束后便开始探针检查;

periodSeconds:探针的 间隔时间;

timeoutSeconds:探针的 超时时间,当超过我们定义的时间后,便会被视为失败;

successThreshold:探针的 最小连续成功数量;

failureThreshold:探针的 最小连续失败数量;

下面我们分别对这三种探针使用了不同的探针方式,主要是为了方便给大家做一个简单的介绍,并不是固定写法;同时,这三种探针是可以配合使用的;像一般比较常见的便是 就绪探针和存活探针配合使用(启动探针是在 K8s 1.6 版本后增加的

五、探针使用介绍

1)启动探针

apiVersion: v1
kind: Pod
metadata:
  name: nginx-start-up
  namespace: probe
spec:
  containers:
  - name: nginx-start-up
    image: nginx:latest
    ports:
    - containerPort: 80
    startupProbe:
      failureThreshold: 3  #失败三次算探针失败
      exec:
        command: ['/bin/sh','-c','echo Hello World']
      initialDelaySeconds: 20  #延迟20s后进行第一次探针
      periodSeconds: 3 #间隔3s进行一次探针
      successThreshold: 1 #成功一次算探针ok
      timeoutSeconds: 2 #超时2s算失败一次

在这里插入图片描述
2)就绪探针

apiVersion: v1
kind: Pod
metadata:
  name: nginx-ready
  namespace: probe
  labels:
    app: nginx-ready   #验证就绪探针的关键参数
spec:
  containers:
  - name: nginx-ready
    image: nginx:latest
    ports:
    - containerPort: 80
    readinessProbe:
      failureThreshold: 3
      tcpSocket:
        port: 80
      initialDelaySeconds: 20
      periodSeconds: 3
      successThreshold: 1
      timeoutSeconds: 2

端口检测正常:
在这里插入图片描述
写一个nodeport类型进行流量验证

apiVersion: v1
kind: Service
metadata:
  name: ready-nodeport
  labels:
    name: ready-nodeport
  namespace: probe
spec:
  type: NodePort
  ports:
  - port: 88
    protocol: TCP
    targetPort: 80
    nodePort: 30880
  selector:
    app: nginx-ready

模拟流量结果是ok的
在这里插入图片描述
现在修改下就绪探针tcpSocket检测方式的端口为81模拟下探针失败,流量会不会走到该pod
在这里插入图片描述
显示81端口不通,ready状态为0,但pod是running的,请求一下结果如下,流量打入失败。就绪探针失败,是不会给该pod打入流量的。
在这里插入图片描述

3)存活探针

apiVersion: v1
kind: Pod
metadata:
  name: nginx-live
  namespace: probe
  labels:
    app: nginx-live
spec:
  containers:
  - name: nginx-live
    image: nginx:latest
    ports:
    - containerPort: 80
    livenessProbe:
      failureThreshold: 3
      httpGet:
        path: /
        port: 80
        scheme: HTTP
      initialDelaySeconds: 20
      periodSeconds: 3
      successThreshold: 1
      timeoutSeconds: 2

在这里插入图片描述
生成一个nodeport类型service

apiVersion: v1
kind: Service
metadata:
  name: live-nodeport
  labels:
    name: live-nodeport
  namespace: probe
spec:
  type: NodePort
  ports:
  - port: 89
    protocol: TCP
    targetPort: 80
    nodePort: 30810
  selector:
    app: nginx-live

curl进行ip端口校验
在这里插入图片描述
修改httpget中port参数值为81,模拟存活探针失败,探针失败,会让pod进行重启。
在这里插入图片描述

六、探针恢复

修改探针探测端口正确,重新加载yaml文件,流量正常。
在这里插入图片描述

### Kubernetes 中的探针 #### Liveness 探针 Liveness 探针用于判断容器是否正在运行。如果存活探针失败,Kubernetes 将认为该容器不健康并会尝试重启它。这种机制有助于自动恢复因程序崩溃或其他原因而停止响应的应用程序实例[^1]。 对于 Squid Pod 来说,在配置文件中可以定义如下形式的 `livenessProbe`: ```yaml apiVersion: v1 kind: Pod metadata: name: squid-pod spec: containers: - name: squid-container image: "squid:some-version" livenessProbe: exec: command: - /bin/sh - "-c" - 'ps aux | grep "[s]quid"' initialDelaySeconds: 10 periodSeconds: 10 failureThreshold: 3 ``` 这段 YAML 定义了一个每十秒钟执行一次命令来检查 Squid 进程是否存在;若次连续未能找到此进程,则触发容器重启逻辑[^3]。 #### Readiness 探针 Readiness 探针用来确认应用已经准备好接收流量。即使容器本身处于活动状态,但如果尚未完全初始化完成或正在进行维护工作时,可以通过设置就绪探针让服务暂时移除对该副本的请求路由直到恢复正常为止。 #### Startup 探针 Startup 探针专门针对那些启动时间较长的服务设计。只有当应用程序成功通过了 startup probe 的测试之后才会继续进行其他类型的探测(如 liveliness 或 readiness)。这对于某些需要较长时间才能准备好的微服务特别有用,因为它允许更灵活地调整初始延迟和其他参数而不必担心过早被标记为不可用[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值