2020-03-15 Pod生命周期

Kubernetes Pod的生命周期

状态 :
  • Pending:Pod被创建起,但是没有任何一个Node满足调度的条件,此时被挂起,或者Pod 已被 Kubernetes 系统接受,但有一个或者多个容器镜像尚未创建。等待时间包括调度 Pod 的时间和通过网络下载镜像的时间,这可能需要花点时间。
  • Running:正常运行
  • Failed:异常停止
  • succeeded:pod中的所有的容器已经正常的自行退出,并且k8s永远不会自动重启这些容器,一般会是在部署job的时候会出现。
  • Unknown:出于某种原因,无法获得Pod的状态,通常是由于与Pod主机通信时出错。如Kubectl与apiserver无法正常通行,得不到pod的状态等..
  • CrashLoopBackOff: 容器退出,kubelet正在将它重启
  • InvalidImageName: 无法解析镜像名称
  • ImageInspectError: 无法校验镜像
  • ErrImageNeverPull: 策略禁止拉取镜像
  • ImagePullBackOff: 正在重试拉取
  • RegistryUnavailable: 连接不到镜像中心
  • ErrImagePull: 通用的拉取镜像出错
  • CreateContainerConfigError: 不能创建kubelet使用的容器配置
  • reateContainerError: 创建容器失败
  • RunContainerError: 启动容器失败
  • PostStartHookError: 执行hook报错
  • ContainersNotInitialized: 容器没有初始化完毕
  • ContainersNotReady: 容器没有准备完毕
  • ContainerCreating:容器创建中
  • PodInitializing:pod 初始化中

在pod生命周期中,一共经历了这么几个重要的阶段

image.png
  • 1(init C)初始化容器对pod进行初始化
  • 2(post start)容器启动前钩子
  • 3 两种探针的三个类型:ExecAction、TCPSocketAction、HTTPGetAction
  • 3.1 liveness probe存活性探针,用于探测pod当前状态是否处于运行状态,探测方式共有三种,①执行自定义命令 ②向指定的TCP端口发请求 ③向对指定的HTTP服务发送请求(向指定url发送GET请求)
  • 3.2 readiness probe就绪性探针,用于探测主容器中的主进程是否处于就绪状态,一个pod存活不代表他能够对外提供服务。探测方式同存活性探针

Pod的重启策略 restartPolicy:

  • Always:只要pod进程挂了就重启,默认为Always,为了反复重启不给系统带来压力,他反复重启是这么做的,比如第一次重启是立即重启,第二次重启是终止后10秒后开始的 ,第三次20s...40s...80s..最长等待时间为300s。只要节点在,pod只会重启不会重新调度,除非删除pod
  • OnFailure:只有pod状态为错误的时候才重启
  • Never:无论什么情况都不重启
    pod终止逻辑:pod接到终止信号后不会立即kill,而是会提供一个宽限期默认是30s,30s内如果没有完成平滑终止才会强制kill。
### livenessProbe 使用示范
apiVersion: v1
kind: Pod
metadata:
     name: liveness-exec-pod
     namespace: default
spec:
     containers:
     -  name: liveness-exec-container
        image: busybox:latest
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh","-c","touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 3600"] 
        livenessProbe:
           exec:
                command: ["test","-e","/tmp/healthy"]
           initialDelaySeconds: 1
           periodSeconds: 3
##  readinessProbe 使用示例
apiVersion: v1
kind: Pod
metadata:
     name: readiness-httpget-pod
     namespace: default
spec:
     containers:
      - name: readiness-httpget-container
         image: ikubernetes/myapp:v1 imagePullPolicy: IfNotPresent ports:
     - name: http
       containerPort: 80
    readinessProbe:
        httpGet:
            port: http
            path: /index.html
        initialDelaySeconds: 1
        periodSeconds: 3

你可能感兴趣的:(2020-03-15 Pod生命周期)