K8S-生命周期与探针
探针

启动探针(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,成功一次说明还活着
容器生命周期钩子与探测方式

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

浙公网安备 33010602011771号