Kubernetes》》K8S》》Pod的健康检查

发布于:2025-04-18 ⋅ 阅读:(16) ⋅ 点赞:(0)

K8s概念总结
》》》Pod的生命周期阶段
Pod的生命周期可以简单描述:首先Pod被创建,紧接着Pod被调度到Node节点进行部署。
Pod是非常忠诚的,一旦被分配到Node节点后,就不会离开这个Node节点,直到它被删除,删除可能是人为删除或者被RC(Replication Controller 旧版本)、RS(ReplicaSet新版本)删除,也可能是当Pod进行Succeeded或Failed阶段过期,被K8s 清理掉。总之Pod被删除后,生命周期结束。即使被RS、RC 进行重建,也是新的Pod。
Pod的生命周期被定义为以下几个阶段

Pending:Pod已经被创建,但是一个或者多个容器还未创建,这包括Pod调度阶段,以及容器镜像下载阶段
Running: Pod已经被调度到Node节点上,所有容器已经创建,并且至少一个容器在运行或者正在重启
Succeeded:Pod中所有容器正常退出 就是Exit Code 为0
Failed: Pod中所有容器退出,至少有一个容器是非正常退出(Exit Code 非0 )

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Pod被创建成功后,首先会进入Pending阶段,然后被调度到Node后运行,进入Running阶段。如果Pod中的容器停止(正常或者异常退出),那么Pod根据重启策略的不同会进入不同的阶段。

》》回调函数
在这里插入图片描述

在这里插入图片描述

# Pod活着才可能提供处理能力(提供服务),Pod死了,一定就不能提高处理能力,Pod活着不一样就能提供处理能力
# liveness 存活性检测   检测Pod是否活着
# readiness 就绪性检测  检测Pod是否准备就绪提供处理能力

开始回调钩子(postStart)里面有如下三种方式:
exec : 执行命令,执行的结果如果返回值不为0即为失败(注:exec下面执行的命令,必须为当前容器内支持的命令)
tcpsocket :探测端口,探测的端口如果探测失败即为失败
httpget : 访问链接 ,如果访问链接状态码不为200即为失败
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

。。。。。
#  exec 方式
spec: 
  containers: 
  - image: nginx:1.17.1
    name: nginx-container
    ports: 
    - name: "port-name"
      containerPort: 8080
      protocol: TCP
    lifecycle:
      postStart:  # 主容器启动后钩子
        exec:
          command: 
          - "/bin/sh"
          - "-c"
          - "touch /opt/lifecycle.txt"
      preStop:  # 主容器终止前钩子
        exec:
          command: 
          - "/bin/sh"
          - "-c"
          - "cat /opt/lifecycle.txt"


以下列子是在主容器启动后会去访问链接http://192.x.1.x:8080/login,在主容器终止前去访问链接http://192.x.1.x:8080/logout;

#  httpget方式

#  httpget方式
spec: 
  containers: 
  - image: nginx:1.17.1
    name: nginx-container
    ports: 
    - name: "port-name"
      containerPort: 8080
      protocol: TCP
    lifecycle:
      postStart:  # 主容器启动后钩子
        httpGet: 
          path: /login             # Url地址
          port: 8080          # 端口
          host: 192.x.1.x # 默认pod的PodIP
          schema: HTTP # 支持的协议,http或https
      preStop:  # 主容器终止前钩子
        httpGet: 
          path: /logout            # Url地址
          port: 8080          # 端口
          host: 192.x.1.x # 主机地址
          schema: HTTP # 支持的协议,http或https  默认 http


以下列子是在主容器启动后尝试去连接8080端口,在主容器终止前去连接8081端口

# tcpsocket 方式
spec: 
  containers: 
  - image: nginx:1.17.1
    name: nginx-container
    ports: 
    - name: "port-name"
      containerPort: 8080
      protocol: TCP
    lifecycle:
      postStart:  # 主容器启动后钩子
        tcpSocket: 
          port: 8080
      preStop:  # 主容器终止前钩子
        tcpSocket: 
          port: 8081


Pod健康检测

apiVersion: v1
kind: Pod
metadata:
  name: liveness-exec-pod
  labels:
    test: liveness
spec:
  containers:
  - name: liveness
    image: nginx:latest
        # 定义健康检查探针
    livenessProbe:
      httpGet:  # 指定探针的检测方法为httpGet。
        path: /index.html  # 指定访问的文件路径信息即可,无需指定IP地址,因为默认就是访问本机,可以理解为127.0.0.1。
        port: 800  # 指定对容器的哪个端口发送GET请求。  因Nginx  默认是 80端口,如800也就是不成功,会重启pod。如果80,则就正常
      initialDelaySeconds: 15
      # 指定每次周期的健康检查的间隔时间。
      periodSeconds: 5
      timeoutSeconds: 1
      successThreshold: 1
      failureThreshold: 3


网站公告

今日签到

点亮在社区的每一天
去签到