前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pod 生命周期、重启策略、健康检查、服务可用性检查

Pod 生命周期、重启策略、健康检查、服务可用性检查

作者头像
看、未来
发布2022-09-27 21:36:35
3780
发布2022-09-27 21:36:35
举报

文章目录

生命周期

正常就正常,不正常看日志。下一个

重启策略

Pod 重启策略包括 Always、Never、OnFailure。 kubelet 重启失败容器的时间间隔以 sync-frequency 乘 2n 来计算,如 1、2、4、8 倍等,最长时延 5min,并在重启成功之后的 10 min 后重置该时间。

当前可用于管理 Pod 的控制器包括 RC、Job、DaemonSet,还可以通过 kubelet 管理(静态 Pod),每种控制器对应的 Pod 重启策略要求如下:

  • RC 和 DS:必须设置为 Always,需要保证容器的正常运行。
  • Job:必须不设置为 Always,确保 Job 执行完毕之后不会重启。
  • 对于 kubelet,在 Pod 失效时自动启动它。

Pod 健康检查 & 服务可用性检查

k8s 对 Pod 的检查有三种探针,LivenessProbe、ReadinessProbe、SetupProbe。相对前两种比较常用,kubelet 会定期执行这两种探针来诊断容器的健康状况。

LibenessProbe 用于判断容器是否存活,如果不健康,就杀掉,然后看看要不要重启。如果没有设定该探针,则默认一直是存活的,至于真实是死是活就不好说了。 ReadinessProbe 用于判断容器服务是否可用,对于被 Service 管理的 Pod,如果发现容器不可用,系统将从 Service 的后端 Pod Endpoint 列表中将该 pod 隔离出去,直到它什么时候可用了再放回来。这样可以防止 Service 将业务转发到不可用的 Pod 上。 SetupProbe 探针,用于一些启动比较慢的情况。此时 ReadinessProbe 就不适用了,对于这种有且仅有一次的操作,使用 SetupProbe。

探针实现方式

以上三种探针均可使用以下三种实现方式:

1)execAction,在容器内部运行一个命令,如果命令返回码为0,则表明容器健康。

代码语言:javascript
复制
apiVersion: v1
kind: Pod
meatdate:
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: busybox:latest
    args:
    - /bin/sh
    - -c
    - echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 60
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/health
      initialDelaySeconds: 15	# 启动容器后首次警醒健康检查的等待时间
      timeoutSeconds: 1			# 健康检查发送请求之后等待响应的时间,如果超时,则 kubelet 认为容器已无法提供服务

2)通过 tcpSocket 通过容器的 IP 地址和端口号执行 TCP 检查,如果能够建立连接则说明容器健康。 以下以 localhost:80 为例:

代码语言:javascript
复制
apiVersion: v1
kind: Pod
meatdate:
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: busybox:latest
    args:
    - /bin/sh
    - -c
    - echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 60
    livenessProbe:
      tcpSocket:
        port:80
      initialDelaySeconds: 15
      timeoutSeconds: 1

3)httpGet 方式 通过容器 IP、端口号以及路径调用 Get 方法,如果返回值结余 200~400 则说明正常。

代码语言:javascript
复制
apiVersion: v1
kind: Pod
meatdate:
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: busybox:latest
    args:
    - /bin/sh
    - -c
    - echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 60
    livenessProbe:
      httpGet: 
        path: /_status/healthz
        port: 80
      initialDelaySeconds: 15
      timeoutSeconds: 1

setupProbe 参考

代码语言:javascript
复制
apiVersion: v1
kind: Pod
meatdate:
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: busybox:latest
    args:
    - /bin/sh
    - -c
    - echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 60
    startupProbe:
      httpGet:
        path: /_status/healthz
        port: 80
      failureThreshold: 20
      periodSeconds: 10

这个 Pod 有 20 * 10 = 200s 的启动时间。


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 生命周期
  • 重启策略
  • Pod 健康检查 & 服务可用性检查
    • 探针实现方式
      • setupProbe 参考
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档