其他分享
首页 > 其他分享> > K8s系列之:Pod生命周期和重启策略

K8s系列之:Pod生命周期和重启策略

作者:互联网

K8s系列之:Pod生命周期和重启策略

一、Pod状态

Pod在整个生命周期过程中被系统定义为各种状态。

Pod的状态:

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

二、Pod的重启策略

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

Pod的重启策略包括:

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

Pod的重启策略与控制方式息息相关,当前可用于管理Pod的控制器包括ReplicationController、Job、DaemonSet及直接通过kubelet管理(静态Pod)。

每种控制器对Pod的重启策略要求如下:

三、Pod重启策略和状态转换场景关系

常见的状态转换场景:

Pod包含的容器数Pod当前的状态发生事件AlwaysOnFailureNever
包含一个容器Running容器成功退出RunningSucceededSucceeded
包含一个容器Running容器失败退出RunningRunningFailed
包含两个容器Running1个容器失败退出RunningRunningRunning
包含两个容器Running容器被OOM杀掉RunningRunningFailed

四、Pod健康检查

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

五、LivenessProbe探针

kubelet定期执行LivenessProbe探针来诊断容器的健康状况。LivenessProbe有以下三种实现方式:

1.ExecAction

在下面的例子中,通过执行"cat /tmp/health"命令来判断一个容器运行是否正常。而该Pod运行之后,在创建/tmp/health文件的10s之后将删除该文件,而LivenessProbe健康检查的初始探测时间(initialDelaySeconds)为15s,探测结果将是Fail,将导致kubelet杀掉该容器并重启它。

apiVersion: v1
kind: Pod
metadata: 
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: gcr.io/google_containers/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

在下面的例子中,通过与容器内的localhost:80建立TCP连接进行健康检查。

apiVersion: v1
kind: Pod
metadata: 
  name: pod-with-healthcheck
spec:
  containers:
 - name: nginx
    image: nginx
    ports: 
    - containerPort: 80
    livenessProbe:
      tcpSocket:
        port: 80
      initialDelaySeconds: 15
      timeoutSeconds: 1

3.HTTPGetAction

在下面的例子中,kubelet定时发送HTTP请求到localhost:80/_status/healthz来进行容器应用的健康检查。

apiVersion: v1
kind: Pod
metadata: 
  name: pod-with-healthcheck
spec:
  containers:
 - name: nginx
    image: nginx
    ports: 
    - containerPort: 80
    livenessProbe:
      httpGet:
        path: /_status/healthz
        port: 80
      initialDelaySeconds: 30
      timeoutSeconds: 1

六、initialDelaySeconds和timeoutSeconds参数含义

标签:容器,LivenessProbe,生命周期,重启,探针,kubelet,Pod,K8s
来源: https://blog.csdn.net/zhengzaifeidelushang/article/details/122740857