美文网首页
容器健康检查和恢复机制

容器健康检查和恢复机制

作者: 理想枫林晚 | 来源:发表于2019-12-10 19:30 被阅读0次

通过命令健康检查的一个例子

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: test-liveness-exec
spec:
  containers:
  - name: liveness
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5   # 容器执行5秒之后进行健康检查
      periodSeconds: 5  # 每隔5秒进行健康检查

我们定义了一个这样的 livenessProbe(健康检查)它的类型是 exec,这意味着,它会在容器启动后,在容器里面执行一句我们指定的命令,比如:“cat /tmp/healthy”。这时,如果这个文件存在,这条命令的返回值就是 0,Pod 就会认为这个容器不仅已经启动,而且是健康的。这个健康检查,在容器启动 5 s 后开始执行(initialDelaySeconds: 5),每 5 s 执行一次
(periodSeconds: 5)。

我们发现,Pod 并没有进入 Failed 状态,而是保持了 Running 状态。这是为什么呢?
其实,如果你注意到 RESTARTS 字段从 0 到 1 的变化,就明白原因了:这个异常的容器已经被
Kubernetes 重启了。在这个过程中,Pod 保持 Running 状态不变。

需要注意的是:Kubernetes 中并没有 Docker 的 Stop 语义。所以虽然是 Restart(重启),但实际却是重新创建了容器。

这个功能就是 Kubernetes 里的Pod 恢复机制,也叫 restartPolicy。它是 Pod 的 Spec 部分的一个标准字段(pod.spec.restartPolicy),默认值是 Always,即:任何时候这个容器发生了异常,它一定会被重新创建。

但一定要强调的是,Pod 的恢复过程,永远都是发生在当前节点上,而不会跑到别的节点上去。事实上,一旦一个 Pod 与一个节点(Node)绑定,除非这个绑定发生了变化(pod.spec.node 字段
被修改),否则它永远都不会离开这个节点。这也就意味着,如果这个宿主机宕机了,这个 Pod 也不会主动迁移到其他节点上去。

而如果你想让 Pod 出现在其他的可用节点上,就必须使用 Deployment 这样的“控制器”来管理Pod

restartPolicy 和 Pod 里容器的状态,以及 Pod 状态的对应关系总结:

1、只要 Pod 的 restartPolicy 指定的策略允许重启异常的容器(比如:Always),那么这个 Pod就会保持 Running 状态,并进行容器重启。
否则,Pod 就会进入 Failed 状态 。

2、对于包含多个容器的 Pod,只有它里面所有的容器都进入异常状态后,Pod 才会进入 Failed 状态。
在此之前,Pod 都是 Running 状态。此时,Pod 的 READY 字段会显示正常容器的个数,
所以,假如一个 Pod 里只有一个容器,然后这个容器异常退出了。那么,只有当restartPolicy=Never 时,这个 Pod 才会进入 Failed 状态。

健康检查发起HTTP请求

livenessProbe:
     httpGet:
       path: /healthz
       port: 8080
       httpHeaders:
       - name: X-Custom-Header
         value: Awesome
     initialDelaySeconds: 3
     periodSeconds: 3

健康检查发起TCP请求

 livenessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 20

相关文章

  • 容器健康检查和恢复机制

    在 Kubernetes 中,你可以为 Pod 里的容器定义一个健康检查“探针”(Probe)。这样,kubele...

  • 容器健康检查和恢复机制

    通过命令健康检查的一个例子 我们定义了一个这样的 livenessProbe(健康检查)它的类型是 exec,这意...

  • Pod中容器健康检查和恢复机制

    健康检查 Kubernetes文档例子: 这里定义的容器liveness会创建/healthy文件,然后30秒后删...

  • Docker 容器健康检查机制

    摘要:在分布式系统中,经常需要利用健康检查机制来检查服务的可用性,防止其他服务调用时出现异常。自 1.12 版本之...

  • k8s健康检查

    容器默认的健康检查[#---------] 健康检查的种类[#-------] 常用参数配置[#--------]...

  • 周报20130524

    一、项目进展 小需求:完善健康检查 功能:完善健康检查,增加对spring容器启动是否完成的检查 进展:已发布 域...

  • redis 哨兵机制

    哨兵机制的作用 服务发现和健康检查 故障切换流程 七大核心概念 哨兵如何知道Redis主从信息(自动发现机制) 什...

  • Haproxy的TCP层健康检查

    Haproxy配置为TCP模式,通常会配置健康检查所代理服务的端口。 Haproxy的健康检查机制是利用TCP的三...

  • Pod健康检查介绍

    Pod健康检查介绍 默认情况下,kubelet根据容器运行状态作为健康依据,不能监控容器中应用程序状态,例如程序假...

  • 配置网络

    概述 容器网络是容器选择连接到其他容器、主机和外部网络的机制。容器的 runtime 提供了各种网络模式,每种模式...

网友评论

      本文标题:容器健康检查和恢复机制

      本文链接:https://www.haomeiwen.com/subject/vwaggctx.html