kubernetes Pod 应用自动恢复(重启策略 + 健康检查)简介

本贴最后更新于 1607 天前,其中的信息可能已经时移俗易

一、重启策略

  • Always:当容器终止退出后,总是重启容器,默认策略。
  • OnFailure:当容器异常退出(退出状态码非 0)时,才重启容器。
  • Never:当容器终止退出,从不重启容器。

yaml 格式:

spec: 
  restartPolicy: Always 
  containers: 
  - image: nginx
    name: web 

注意:退出状态码指的是 shell 状态码,返回 0 表示正常退出,返回非 0 则代表异常退出

应用场景:

  • Always:如 nginx,mysql 等需要持续运行的程序
  • OnFailure:定时的,短周期运行的任务,如数据库备份(cronjob),可以利用返回码
  • Never:应用只运行一次,如数据的离线处理,批处理等

二、健康检查:

由于 pod 不关心容器应用程序状态,所以需要配置健康检查,让 pod 去根据应用程序的状态决定 pod 是否处于 running 状态。

1.livenessProbe(存活检查)

如果检查失败,将杀死容器,根据 Pod 的 restartPolicy 来操作。

yaml 格式:

spec: 
  restartPolicy: Always 
  containers: 
  - image: nginx
    name: web
    livenessProbe:
      tcpSocket:
        port: 8080
      initiaDelaySceonds: 30
      periodSeconds: 20

参数解释:

  • initiaDelaySceonds: 容器启动后进行健康检查的等待时间
  • periodSeconds: 健康检查的时间间隔

2. readinessProbe(就绪检查)

如果检查失败,Kubernetes 会把 Pod 从 service endpoints 中剔除。
支持以下三种检查方法:

  • httpGet:发送 HTTP 请求,返回 200-400 范围状态码为成功。
  • exec:执行 Shell 命令返回状态码是 0 为成功。
  • tcpSocket:发起 TCP Socket 建立成功。

yaml 格式:

spec: 
  restartPolicy: Always 
  containers: 
  - image: nginx
    name: web
    readinessProbe:
      tcpSocket:
        port: 8080
      initiaDelaySceonds: 30
      periodSeconds: 20

注意:上述两种健康检查方式可以同时使用,参数也共用

三、参考

官方文档

  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    110 引用 • 54 回帖 • 3 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...