K8S-生命周期与探针

探针

img

启动探针(Startup Probe)
目标:防止启动过程中被 liveness 误杀
探测成功前,liveness/readiness 不生效;探测失败→重启

就绪探针(Readiness Probe)
目标:避免流量转发到 “未准备好” 的实例
探测失败→实例移出 Service 端点(不接收流量)

存活探针(Liveness Probe)
目标:避免 “僵尸实例” 占用资源
探测失败→触发容器重启(按 restartPolicy 策略)

核心参数

initialDelaySecond

initialDelaySeconds:容器启动后,延迟多久开始第一次探测(单位:秒)

与启动探针的关系
initialDelaySeconds:固定的等待时间
Startup Probe:动态探测机制

最佳实践
配置Startup Probe实现动态探测
initialDelaySeconds避免容器一创建就发出探测请求

periodSeconds、timeoutSeconds、successThreshold、failureThreshold、terminationGracePeriodSeconds

periodSeconds:探测间隔,XX周期发起一次探测请求
timeoutSeconds:单次探测的超时时间
successThreshold、failureThreshold:连续XX次探测成功/失败,则判定探测成功/失败
terminationGracePeriodSeconds:探测失败后,容器终止前的优雅关闭时间(单位:秒)[给服务预留连接关闭、数据保存时间]

探测流程
容器启动 → 等待 initialDelaySeconds → 发起第一次探测 → 收到响应/超时 → 等待 periodSeconds → 发起第二次探测 → ...

Threshold与Probe的关系
Startup:successThreshold只能为1,成功一次即启动完成
Readiness:连续成功 M 次才认为就绪,加入流量
Liveness:只能为 1,成功一次说明还活着

容器生命周期钩子与探测方式

img

postStart:容器创建后立即执行一次的“启动后钩子”,用于做一些轻量初始化或通知。

preStop:容器终止前执行一次的“终止前钩子”,用于优雅清理、通知或等待现有请求完成。

exec:命令校验
          exec:                      # 命令执行探针类型(在容器内执行命令)
            command:                 # 执行的命令列表
            - pgrep                  # 检查进程是否存在
            - nginx 

httpGet: HTTP/HTTPS 协议
          httpGet:                   # HTTP GET 探针类型
            path: /                  # 访问路径(Nginx 默认首页)
            port: 80

tcpSocket:端口校验
         tcpSocket:
           port: 80

配置实例

apiVersion: apps/v1                  # API 版本:Deployment 属于 apps/v1 组
kind: Deployment                     # 资源类型:Deployment(无状态应用部署)

metadata:                            # 元数据(描述该 Deployment 本身的信息)
  name: nginx-deploy                 # Deployment 资源名称
  labels:                            # Deployment 自身的标签
    app: nginx-deploy                # 用于标识该 Deployment

spec:                                # 期望状态(Deployment 的规格定义)
  replicas: 2                        # 期望的 Pod 副本数量(会始终保持 2 个 Pod 运行)

  selector:                          # 标签选择器:Deployment 通过它找到并管理 Pod
    matchLabels:                     # 匹配的标签规则
      app: nginx                     # 必须匹配 Pod 模板中定义的标签(如下方 template 中的 labels)

  template:                          # Pod 模板(Deployment 根据此模板创建 Pod)
    metadata:                        # Pod 的元数据
      labels:                        # Pod 的标签(必须被 selector 匹配到)
        app: nginx                   # 与上方 selector.matchLabels.app: nginx 保持一致

    spec:                            # Pod 规格(Pod 内部的具体配置)
      containers:                    # 容器列表(这里只有一个容器)
      - name: nginx-pod              # 容器名称(在 Pod 内唯一标识)
        image: nginx:latest          # 容器镜像(nginx 最新版本)
        imagePullPolicy: IfNotPresent # 镜像拉取策略:优先使用本地镜像,不存在时才从仓库拉取

        ports:                       # 容器端口声明(仅用于文档说明,实际流量由 Service 转发)
        - containerPort: 80          # 容器内 Nginx 监听的端口(官方镜像默认 80)

        resources:                   # 资源限制与请求(用于调度和 HPA)
          limits:                    # 资源上限(容器最多能使用的资源)
            cpu: "100m"              # CPU 上限为 100 毫核(即 0.1 核)
          requests:                  # 资源请求(调度器据此分配节点,保证最低资源)
            cpu: "50m"               # CPU 请求为 50 毫核(即 0.05 核)

        # -------------------- 启动探针(startupProbe) --------------------
        # 作用:检测容器内的应用是否已经成功启动
        # 特点:在启动成功之前,readinessProbe 和 livenessProbe 不会介入
        startupProbe:
          tcpSocket:                 # TCP 探针类型
            port: 80                 # 访问端口(容器内部端口)
          initialDelaySeconds: 5     # 容器启动后过5秒开始探测
          periodSeconds: 5           # 每隔 5 秒探测一次
          timeoutSeconds: 2          # 每次探测超时时间 2 秒(超过视为失败)
          failureThreshold: 3        # 连续失败 3 次则判定启动失败,容器将被重启
          successThreshold: 1        # 可以不写,值只能是1

        # -------------------- 就绪探针(readinessProbe) --------------------
        # 作用:检测容器是否已准备好接收业务流量
        # 特点:失败时 Pod 会被从 Service 的负载均衡列表中摘除(不接收请求)
        readinessProbe:
          httpGet:                   # HTTP GET 探针类型
            path: /                  # 访问路径
            port: 80                 # 访问端口
          initialDelaySeconds: 0     # 启动探针成功后立即开始(无需额外延迟)
          periodSeconds: 30          # 每隔 30 秒探测一次
          timeoutSeconds: 2          # 每次探测超时 2 秒
          failureThreshold: 3        # 连续失败 3 次则标记为"未就绪",从 Service 摘除
          successThreshold: 1        # 成功 1 次即标记为"就绪",重新加入 Service

        # -------------------- 存活探针(livenessProbe) --------------------
        # 作用:检测容器是否还存活(是否处于健康状态)
        # 特点:失败时 kubelet 会杀死容器并重启(根据重启策略)
        livenessProbe:
          exec:                      # 命令执行探针类型(在容器内执行命令)
            command:                 # 执行的命令列表
            - pgrep                  # 检查进程是否存在
            - nginx                  # 查找名为 "nginx" 的进程
          initialDelaySeconds: 5     # 容器启动后延迟 5 秒开始探测(给 Nginx 足够的启动时间)
          periodSeconds: 30          # 每隔 30 秒探测一次
          timeoutSeconds: 2          # 每次探测超时 2 秒
          failureThreshold: 3        # 连续失败 3 次则判定容器"不健康",kubelet 将重启容器
          successThreshold: 1        # 可以不写,值只能是1
posted @ 2026-09-07 15:31  WiseHYH  阅读(22)  评论(0)    收藏  举报