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

容器健康检查和恢复机制

作者: 理想枫林晚 | 来源:发表于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
    

    相关文章

      网友评论

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

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