当前位置: 首页 > article >正文

k8s-pod 实战三 (Liveness Probe 和 Readiness Probe 详细分析)

一、Liveness Probe 和 Readiness Probe 详细分析

Liveness Probe

Liveness Probe 用于检查容器是否处于健康状态。如果探针失败,Kubernetes 会杀死容器并根据重启策略决定是否重启。这对于检测和恢复应用程序中的死锁或其他致命错误非常有用。

Readiness Probe

Readiness Probe 用于检查容器是否准备好接受流量。如果探针失败,Kubernetes 会将该 Pod 从服务的负载均衡池中移除。这对于确保只有在完全准备好时才处理请求的应用程序非常有用,例如在依赖初始化或外部资源的情况下。

二、实战案例

案例场景

假设我们有一个 Web 应用程序,它有一个健康检查端点 /healthz 和一个就绪检查端点 /readyz。我们将使用 Liveness Probe 来检查应用程序的健康状态,并使用 Readiness Probe 来检查应用程序是否准备好处理请求。

1. 编写 YAML 配置文件

创建一个名为 web-app-pod.yaml 的文件,内容如下:

apiVersion: v1 # API 版本
kind: Pod # 资源类型
metadata:
  name: web-app-pod # Pod 的名称
spec:
  containers:
  - name: web-app # 容器名称
    image: my-web-app:latest # 容器镜像,假设这是你自己的 Web 应用程序镜像
    ports:
    - containerPort: 8080 # 容器端口
    livenessProbe: # 存活探针配置
      httpGet:
        path: /healthz # 探针要访问的 HTTP 路径
        port: 8080 # 探针要访问的端口
      initialDelaySeconds: 10 # 初始延迟时间,容器启动后等待 10 秒再进行探测
      periodSeconds: 10 # 探测周期,每隔 10 秒执行一次探测
      timeoutSeconds: 5 # 超时时间,如果在 5 秒内没有响应则认为探测失败
      failureThreshold: 3 # 失败阈值,连续失败 3 次才认为容器不健康
    readinessProbe: # 就绪探针配置
      httpGet:
        path: /readyz # 探针要访问的 HTTP 路径
        port: 8080 # 探针要访问的端口
      initialDelaySeconds: 10 # 初始延迟时间
      periodSeconds: 5 # 探测周期,每隔 5 秒执行一次探测
      timeoutSeconds: 3 # 超时时间
      failureThreshold: 3 # 失败阈值
2. 应用配置
kubectl apply -f web-app-pod.yaml # 应用 YAML 配置文件
3. 查看 Pod 状态
kubectl get pods # 获取所有 Pod 的状态
4. 描述 Pod 以获取探针的详细信息
kubectl describe pod web-app-pod # 获取指定 Pod 的详细信息
5. 查看 Pod 日志
kubectl logs web-app-pod # 查看指定 Pod 的日志

详细分析

Liveness Probe 配置
  • httpGet: 使用 HTTP GET 方法访问指定的路径和端口。
    • path/healthz 是健康检查的路径。
    • port: 8080 是容器的端口。
  • initialDelaySeconds: 容器启动后,等待 10 秒再进行第一次探测。这是为了确保容器在启动时有足够的时间完成初始化。
  • periodSeconds: 每隔 10 秒进行一次探测。
  • timeoutSeconds: 如果在 5 秒内没有响应,则认为探测失败。
  • failureThreshold: 连续失败 3 次才认为容器不健康。
Readiness Probe 配置
  • httpGet: 使用 HTTP GET 方法访问指定的路径和端口。
    • path/readyz 是就绪检查的路径。
    • port: 8080 是容器的端口。
  • initialDelaySeconds: 容器启动后,等待 10 秒再进行第一次探测。
  • periodSeconds: 每隔 5 秒进行一次探测。
  • timeoutSeconds: 如果在 3 秒内没有响应,则认为探测失败。
  • failureThreshold: 连续失败 3 次才认为容器不就绪。

三、实战案例扩展:更贴近实际生产环境

在生产环境中,Web 应用通常会依赖数据库和其他外部服务。我们可以通过 Readiness Probe 确保在这些依赖项可用之前,Pod 不会接受流量。

1. 编写扩展的 YAML 配置文件

假设我们的 Web 应用程序还依赖一个 PostgreSQL 数据库,并且我们需要确保数据库连接成功后才认为 Pod 就绪。

创建一个名为 web-app-pod-extended.yaml 的文件,内容如下:

apiVersion: v1 # API 版本
kind: Pod # 资源类型
metadata:
  name: web-app-pod # Pod 的名称
spec:
  containers:
  - name: web-app # 容器名称
    image: my-web-app:latest # 容器镜像,假设这是你自己的 Web 应用程序镜像
    ports:
    - containerPort: 8080 # 容器端口
    env:
    - name: DATABASE_URL # 数据库连接 URL
      value: "postgresql://user:password@db-host:5432/mydb"
    livenessProbe: # 存活探针配置
      httpGet:
        path: /healthz # 探针要访问的 HTTP 路径
        port: 8080 # 探针要访问的端口
      initialDelaySeconds: 10 # 初始延迟时间
      periodSeconds: 10 # 探测周期
      timeoutSeconds: 5 # 超时时间
      failureThreshold: 3 # 失败阈值
    readinessProbe: # 就绪探针配置
      exec:
        command:
        - /bin/sh
        - -c
        - "pg_isready -d $DATABASE_URL" # 在容器内执行的命令,检查数据库连接
      initialDelaySeconds: 10 # 初始延迟时间
      periodSeconds: 5 # 探测周期
      timeoutSeconds: 3 # 超时时间
      failureThreshold: 3 # 失败阈值
2. 应用配置
kubectl apply -f web-app-pod-extended.yaml # 应用 YAML 配置文件
3. 查看 Pod 状态
kubectl get pods # 获取所有 Pod 的状态
4. 描述 Pod 以获取探针的详细信息
kubectl describe pod web-app-pod # 获取指定 Pod 的详细信息
5. 查看 Pod 日志
kubectl logs web-app-pod # 查看指定 Pod 的日志

详细分析

Readiness Probe 配置扩展
  • exec: 使用命令探针在容器内执行命令。
    • command: 执行 pg_isready -d $DATABASE_URL 命令,检查数据库连接是否可用。
  • initialDelaySeconds: 容器启动后,等待 10 秒再进行第一次探测。
  • periodSeconds: 每隔 5 秒进行一次探测。
  • timeoutSeconds: 如果在 3 秒内没有响应,则认为探测失败。
  • failureThreshold: 连续失败 3 次才认为容器不就绪。

通过这些配置和实战案例,你可以掌握如何在 Kubernetes 中配置和使用 Liveness Probe 和 Readiness Probe,以确保你的应用在生产环境中的高可用性和健壮性。上述配置和命令带有详细注释,能够帮助你更好地理解每个字段的含义,使配置过程更加清晰和可控。


http://www.kler.cn/news/293011.html

相关文章:

  • Stage 模型应用程序包的结构
  • Java设计模式【命令模式】-行为型
  • 国内领先线上运动平台:如何借助AI技术实现业务腾飞与用户体验升级
  • HarmonyOS开发实战( Beta5版)合理使用动画丢帧规范实践
  • 替换Windows AD时,网络准入场景如何迁移对接国产身份域管?
  • Linux——中间件、数据库(理论)
  • 2024高教社杯全国大学生数学建模竞赛(A题)深度剖析 _ 建模完整过程+详细思路+代码全解析
  • Quartz.Net_依赖注入
  • GitHub Copilot的详细介绍
  • RHCE必过技巧,无需本人参加也可拿证?
  • 紫光展锐完成Android 15同步升级,驱动技术创新与生态共赢
  • 【区块链 + 人才服务】紫金研究院知识库管理系统 | FISCO BCOS应用案例
  • GAMES101(0~1作业)
  • django企业开发实战-学习小结1
  • hiprint打印/jsPDF使用/html2canvas
  • 本地使用Docker部署Nexus Maven私有仓库工具结合内网穿透实现远程管理
  • AI学习记录 - 旋转位置编码
  • python爬虫教学(四) Bs4
  • 最新版本是 FL Studio 的 24.1.1.4285 2024/08/07发布
  • 【2024数模国赛赛题思路公开】国赛C题第二套思路丨附可运行代码丨无偿自提
  • VS2022如何安装Spy+
  • ansible实战自动化运维项目
  • 优化 Webpack 打包体积的思路
  • vue3 uni app端使用uCharts
  • 华为鸿蒙系统和安卓的区别
  • java后端框架
  • 【Python机器学习】NLP词频背后的含义——反馈及改进
  • 数值分析中插值法和拟合法的对比
  • C++模板(初识)
  • 赞奇科技与华为云共襄828 B2B企业节,激活数字内容“云”创作