Pod 生命周期

容器的状态和生命周期?

容器状态及转移图

  • CREATE
  • RUNNING
  • PAUSE
  • STOPPED
  • Killed

状态转移图

Pod的启动流程和生命周期?

启动流程

  1. init container: 初始化容器进行初始化
  2. main container:主容器初始化
    • post start: 主容器启动前执行特定操作
    • after start: 主容器结束前执行特定操作
    • liveness probe: 主容器运行状态检测
    • readiness probe: 主容器就绪状态检测,检测服务是否准备就绪,可对外提供服务 无论是运行检测和就绪检测,都支持命令、TCP、HTTP等检查方式

Pods的几种状态

  • Pending: 调度未完成,已经创建对应的资源,但是未完成就绪,原因有如下几种
    • 处于下载镜像的过程中
    • 指定标签无法满足,导致找不到节点运行Pod
    • 运行状态检测或者就绪状态检测导致?(待测试)
  • Running: Pods已经被创建,并且绑定到了对应的node上
  • Succeeded: Pods内的容器都已经成功结束终止运行,并且没有设置重启策略,常见于Job类Pod
  • Failed: Pods内的容器都已经结束终止运行,但其中有容器退出状态非0,所以状态为failed
  • Unknown: 无法获得Pods状态信息,通常是Pods所运行的主机网络异常

生命周期回调函数

  • PostStart:
  • PreStop:
apiVersion: v1 
kind: Pod 
metadata: 
  name: javaweb-2 
spec: 
  containers: 
  - image: resouer/sample:v2 
    name: war 
    lifecycle: 
      postStart: 
        exec: 
          command: 
            - "cp" 
            - "/sample.war" 
            - "/app" 
      preStop: 
        httpGet: 
          host: monitor.com 
          path: /warning 
          port: 8080 
          scheme: HTTP

事件:

1. 客户端发起创建Pods请求到APIServer
2. APIServer将请求存储在ETCD中
3. APIServer请求Scheduler调度,并将调度结果保存在ETCD中
4. Work节点上的kubelet通过APIServer检测到状态变化
5. kubelet此时从APIServer中拿到创建Pods的清单,并根据清单创建启动Pods
6. kubelet将结果状态发回给APIServer,APIServer将结果写回ETCD中

results matching ""

    No results matching ""