K8S之pod生命周期

本文详细介绍了Kubernetes中Pod的生命周期,包括Pod的基本概念、存在的意义、生命周期的各个阶段,如Pending、Running、Succeeded和Failed状态。讨论了Pod的重启策略、探针机制,如LivenessProbe和ReadinessProbe,以及容器的初始化容器Init C和主容器Main C的创建过程。此外,还涵盖了Pod的启动前后操作和不同类型的容器探针及其区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

K8S之pod生命周期

Pod的基本概念

  • 最小的部署单元

  • 一组容器的集合

  • 一个Pod中的容器共享网络命名空间和存储卷

  • Pod是短暂的

Pod存在的意义

  • Pod为亲密性应用而存在

亲密性应用场景:

  • 两个应用之间发生文件交互
  • 两个应用之间通过lo或socket通信
  • 两个应用之间需要频发的调用

Pod声明周期

Pod的生命周期是通过Replication Controller来管理的。Pod的生命周期过程包括:通过模板进行定义,然后分配到一个Node上运行,在Pod所含容器运行结束后Pod也结束。在整个过程中,Pod处于一下4种状态之一:

  • Pending:Pod定义正确,提交到Master,但其所包含的容器镜像还未完成创建。通常Master对Pod进行调度需要一些时间,之后Node对镜像进行下载也需要一些时间;正在初始化中的Pod处于Pending状态
  • Running:Pod已被分配到某个Node上,且其包含的所有容器镜像都已经创建完成,并成功运行起来;
  • Succeeded:Pod中所有容器都成功终止,并且不会被重启,这是Pod的一种最终状态(所有容器都以“0”的状态退出);
  • Failed:Pod中所有容器都结束了,至少有一个容器以非0状态退出。
  • Unknown:因为某些原因无法取得 Pod 的状态,通常是因为与 Pod 所在主机通信失败。

Kubernetes为Pod设计了一套独特的网络配置,包括:为每个Pod分配一个IP地址,使用Pod名作为容器间通信的主机名等。另外,不建议在Kubernetes的一个Pod内运行相同应用的多个实例。

Pod生命周期的几个阶段

pod生命周期

1.当kubectl创建指令下达到api接口,被调度到kubelet上,kubelet首先调用CRI完成容器环境的初始化。

2.开始进入pod的生命周期,pod开始创建。

3.首先进行Pause基础容器创建,Pause负责网络和存储卷的共享等基础操作。

4.如果定义了Init容器,先进行Init容器(Init C)的创建,Init容器叫初始化容器,可以做一些初始化的操作,比如生成一些应用容器需要的文件。Init C只是用来初始化的,在初始化完成后Init C就会死亡,并不会跟随一直跟随pod的生命周期存在。Init C可以是多个,它不是必须的,也可以没有。多个Init C不能并行运行,一个Init C完成后,才能进行下一个Init C的构建。如果Init容器失败,k8s会不断重启该Pod,直到Init容器运行成功为止。然而,如果pod对应的restartPolicy为Never,那么它不会重启。在所有的nit容器没有成功之前,Pod将不会变成Ready状态。Init容器的端口将不会在Service中进行聚集。

需要注意的是:Init容器具有与应用程序容器分离的单独镜像,所以它们的启动相关代码具有如下优势:

  • 他们可以包含并运行实用工具,但是出于安全考虑,是不建议在应用程序容器镜像中包含这些实用工具的
  • 它们可以包含实用工具和定制化代码来安装,但是不能出现在应用程序镜像中
  • 应用程序镜像可以分离出创建和部署的角色,而没有必要联合它们构建一个单独的镜像。
  • Linux Namespace,所以相对应用程序容器来说具有不同的文件系统视图。因此,它们能够具有访问Secret的权限,而应用程序容器则不能。
  • 它们必须在应用程序容器启动之前运行完成,而应用程序容器是并行运行的,所以Init容器能够提供了一种简单的阻塞或延迟应用容器的启动的方法,直到满足了一组先决条件。

5.开始创建主容器(Main C)

6.主容器Main C运行过程中,如果定义了start操作,首先进行一个start操作。

7.然后如果定义了readiness就绪检测,就执行readiness就绪检测,readiness检测成功完成后,pod才会显示running,才会对外提供服务。

8.如果定义了liveness存活检测,也会同时开始执行,如果liveness检测失败,kubelet杀死该Pod,然后根据重启策略restartPolicy决定是否对pod执行重启。若容器中不包含liveness探针,则kubelet认为该pod的liveness探针返回值永远是success。liveness存活检测是持续过程,一直持续到stop操作完成之后,Main C结束之前。

9.主容器Main C结束退出时,如果定义了stop操作,则先进行stop操作,stop操作完成以后才允许退出。

init实例:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image:  harbor.hongfu.com/library/busybox:v1
    command: ['sh', '-c', 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值