美文网首页Kubernetesdocker. k8s
Pod生命周期、重启策略和健康检查

Pod生命周期、重启策略和健康检查

作者: 王勇1024 | 来源:发表于2019-10-04 21:58 被阅读0次

1. Pod生命周期

Pod在整个生命周期过程中被系统定义为各种状态,熟悉Pod的各种状态对我们理解如何设置Pod的调度策略、重启策略是很有必要的。
Pod的状态如下表所示:

状态值 描述
Pending API Server已经创建该Pod,但Pod内还有一个或多个容器的镜像没有创建,包括正在下载镜像的过程
Running Pod内所有容器均已创建,且至少有一个容器处于运行状态、正在启动状态或正在重启状态
Succeeded Pod内所有容器均已成功执行退出,且不再重启
Failed Pod内所有容器均已退出,但至少有一个容器退出为失败状态
Unknown 由于某种原因无法获取该Pod的状态,可能由于网络通信不畅导致

2. Pod重启策略

Pod的重启策略(RestartPolicy)应用于Pod内的所有容器,并且仅在Pod所处的Node上由kubelet进行判断和重启操作。当某个容器异常退出或者健康检查失败时,kubelet将根据RestartPolicy的设置来进行相应的操作。
Pod的重启策略包括Always、OnFailure和Never,默认值为Always。

  • Always:当容器失败时,由kubelet自动重启该容器;
  • OnFailure:当容器终止运行且退出码不为0时,有kubelet自动重启该容器;
  • Never:不论容器运行状态如何,kubelet都不会重启该容器。

kubelet重启失效容器的时间间隔以sync-frequency乘以2n来计算,例如1、2、4、8倍等,最初延迟5min,并且在成功重启后的10min后重置该时间。

3. Pod健康检查

对Pod的健康状态检查可以通过两类探针来检查:LivenessProbe和ReadinessProbe。

  • LivenessProbe探针:用于判断容器是否存活(running状态),如果LivenessProbe探针探测到容器不健康,则kubelet将杀掉该容器,并根据容器的重启策略做出相应的处理。如果一个容器不包含LivenessProbe探针,那么kubelet认为该容器的LivenessProbe探针返回的值永远是“Success”。
  • ReadinessProbe探针:用于判断容器是否启动完成(ready状态),可以接收请求。如果ReadinessProbe探针检测到失败,则Pod的状态将被修改。Endpoint Controller将从Service的Endpoint中删除包含该容器所在Pod的Endpoint。

LivenessProbe有以下三种实现方式:
(1)ExecAction:在容器内部执行一个命令,如果该命令的返回码为0,则表示容器健康。

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: busybox
    args:
    - /bin/sh
      -c
      echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 600
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/health
      initialDelaySeconds: 15
      timeoutSeconds: 1

(2)TCPSocketAction:通过容器的IP地址和端口号执行TCP检查,如果能成功建立TCP连接,则表明容器健康。

apiVersion: v1
kind: Pod
metadata:
  name: liveness-tcp-socket
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    livenessProbe:
      tcpSocket:
        port: 80
      initialDelaySeconds: 15
      timeoutSeconds: 1

(3)HTTPGetAction:通过容器的IP地址、端口号及路径调用HTTP Get方法,如果响应的状态码大约等于200且小于400,则认为容器状态健康。

apiVersion: v1
kind: Pod
metadata:
  name: liveness-http-get
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    livenessProbe:
      httpGet:
        path: /_status/healthz
        port: 80
      initialDelaySeconds: 15
      timeoutSeconds: 1

对于每种探测方式,都需要设置initialDelaySeconds和timeoutSeconds两个参数,它们的含义分别如下:

  • initialDelaySeconds:启动容器后进行首次健康检查的等待时间,单位为s;
  • timeoutSeconds:健康检查发送请求后等待响应的超时时间,单位为s。当超时发生时,kubelet会认为容器已经无法提供服务,将会重启该容器。

相关文章

网友评论

    本文标题:Pod生命周期、重启策略和健康检查

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