k8s中的容器探针

发布时间:2024年01月04日

pod的容器健康检查---探针

probe:k8s对容器执行的定期检查,诊断。

探针的三种规则

所有的探针都是针对容器不是针对pod

1、 存活探针---livenessProbe:探测容器是否正常运行。如果发现探测失败,会杀掉容器。容器会根据重启策略来决定是否重启。

2、 流量探针/就绪探针:探测容器是否进入ready状态。并做好接受请求的准备

检测失败:Ready 0/1表示没有进入Ready状态。但是status还是Running状态实际上资源是不可用的。service也不会把请求转发到这个pod

3、 启动探针:是在容器启动后开始检测。检测容器内的应用是否启动成功。在启动探测成功之前,所有的其他探针都会处于禁用状态。一旦启动探针结束,后续操作不再受启动探针影响

在一个容器中可以有1个或多个探针。

启动探针:只在容器启动时探测

存活

就绪

probe的检查方法

probe的检测方法三种探针都是通用的

1、 exec探针:在容器中执行命令。如果命令返回码是0表示成功。

应用场景:适用于在容器内自定义检查容器健康状态的情况。

2、 httpGet:对指定IP+端口的容器发送1个httpGet的请求。是通过get请求的响应状态码来判断如果get状态码大于等于200且小于400都表示成功。

应用场景:适用于检测能否响应http的请求。例如:web容器(nginx,tomcat)

3、 tcpSocket:用于检查端口。对指定端口上的容器IP地址进行tcp检查(三次握手),检查对方服务器端口是否打开。如果端口打开则认为探测成功。

应用场景:适用于检查特定容器的端口监听状态。

类似于telnet ip+端口

诊断结果

1、 成功 容器通过了,正常运行

2、 失败 存活探针会重启

3、 未知状态 也是诊断失败。也是根据策略

exec方式

实验举例:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: centos
  name: centos
spec:
  replicas: 1
  selector:
    matchLabels:
      app: centos
  template:
    metadata:
      labels:
        app: centos
    spec:
      containers:
      - image: centos:7
        name: centos
        imagePullPolicy: Never
        command: ["/bin/bash", "-c", "touch /opt/123.txt ; sleep 3600"]
        livenessProbe:
          exec:
            command: ["/usr/bin/test", "-e", "/opt/123.txt"]
#添加检测策略
          initialDelaySeconds: 3
#表示容器启动之后多少秒进行探测。数值建议不要设置太短。因为容器有启动时间,可能会导致无效探测
#3表示3秒
          periodSeconds: 2
#表示探针探测的间隔时间。每隔多少秒进行一次检查。根据需求自定义。看应用的延迟敏感度。
#如果应用非常重要是核心组件。可以间隔设置小一点
          failureThreshold: 2
#表示如果探测失败。失败几次之后把容器标记为不健康。
#2表示2次
          successThreshold: 1
#表示只要成功1次就标记为就绪。数值固定是1不能修改。根据需求自定义添加。可以不加。
          timeoutSecond: 1
#表示每一次探测的超时时间。每次探测必须在多少秒之内必须完成探测。
#设置时间必须要小于periodSeconds探测间隔时间。
#根据需求自定义添加,可以不加

kubectl describe pod 容器名称
#查看容器的详细信息


必要的核心指标:
          initialDelaySeconds: 3
#表示容器启动之后多少秒进行探测。数值建议不要设置太短。因为容器有启动时间,可能会导致无效探测
#3表示3秒
          periodSeconds: 2
#表示探针探测的间隔时间。每隔多少秒进行一次检查。根据需求自定义。看应用的延迟敏感度。
#如果应用非常重要是核心组件。可以间隔设置小一点
          failureThreshold: 2
#表示如果探测失败。失败几次之后把容器标记为不健康。
#2表示2次

liveness杀死容器重启。

所有探针策略会伴随整个pod的生命周期除了启动探针

httpGet方式

实验举例:

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx1
  name: nginx1
spec:
  containers:
  - image: nginx:1.22
    name: nginx1
    livenessProbe:
      httpGet:
        scheme: HTTP
#如果是默认http则可以不加
        port: 80
      initialDelaySeconds: 4
      periodSeconds: 2
#表示容器启动之后4秒进行探测
#表示每隔2秒检测一次

杀掉容器开始重启

正确示范:

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx1
  name: nginx1
spec:
  containers:
  - image: tomcat:8.0.52
    name: nginx1
    livenessProbe:
      httpGet:
        scheme: HTTP
        port: 8080
        path: /index.jsp
      initialDelaySeconds: 4
      periodSeconds: 2

修改为jsp格式测试

tcpSocket方式

实验举例:

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx1
  name: nginx1
spec:
  containers:
  - image: tomcat:8.0.52
    name: nginx1
    livenessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 4
      periodSeconds: 2

错误示范:

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx1
  name: nginx1
spec:
  containers:
  - image: tomcat:8.0.52
    name: nginx1
    livenessProbe:
      tcpSocket:
        port: 8081
      initialDelaySeconds: 4
      periodSeconds: 2

总结

探针:

存活探针:检测失败后,会杀死容器,然后重启。探针将伴随整个容器的生命周期

exec

exec:相当于执行了一个shell命令。在容器里面执行

shell命令执行成功:返回码是0表示成功。成功1次就是探测成功

httpGet

httpGet:对web容器发起了一次get请求。可以添加path,指定访问的资源。返回码在大于等于200且小于400的范围之内都算成功。

tcpSocket

tcpSocket:相当于telnet,指定的容器监听端口是否打开。是否能和指定的容器监听端口进行通信。

文章来源:https://blog.csdn.net/m0_75209491/article/details/135380941
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。