一、Pod概述

1、Pod的定义

Pod是K8S中创建和管理的最小单位。

2、一个Pod至少包含多少容器

1个pause容器(基础容器/父容器/根容器)和 1个或者多个应用容器(业务容器)

通常一个Pod最好只包含一个应用容器,一个应用容器最好也只运行一个应用进程
同一个Pod里的容器都是运行在同一个node节点上的,并且共享 net mnt uts pid ipc 命名空间

3、pause容器的作用

给Pod容器组做环境初始化

作为linux命名空间共享的基础,为Pod里的其它容器提供网络、存储资源的共享
作为pid=1的init管控类进程管理整个Pod容器组的生命周期

二、Pod的3种类型

  • 控制器管理的Pod:

由scheduler调度到node节点运行的;被控制器管理的;有自愈能力,一旦Pod挂掉了,会被控制器重新拉起;有副本管理、滚动更新等功能
创建命令:kubectl create deployment ....     控制器有 deployment  statefulset   deamonset 

  • 自主独立的Pod:

由scheduler调度到node节点运行的;不被控制器管理的;没有自愈能力,一旦Pod挂掉了,不会被重新拉起;没有副本管理、滚动更新等功能
创建命令:kubectl run

  • 静态Pod:

不由scheduler调度到node节点运行的,而是由kubelet自行管理的;始终与kubelet运行在同一个node节点上;通过向apiserver发送请求无法直接删除的
在node节点的/etc/kubernetes/manifests目录中放置Pod的yaml配置文件,kubelet就会自动根据yaml配置文件创建静态Pod

三、Pod中的3种容器

  • pause容器(基础容器/父容器/根容器)

给Pod容器组做环境初始化,作为linux命名空间共享的基础,为Pod里的其它容器提供网络、存储资源的共享,作为pid=1的init管控类进程管理整个Pod容器组的生命周期。pause容器是Pod最先启动的容器。

  • init容器(初始化容器/init container)

可以在应用容器启动前,为应用容器提供运行依赖环境或工具包;还可以阻塞或延迟应用容器的启动
init容器是在pause容器之后启动的;如果Pod定义了多个init容器,它们是串行启动的,即要在上一个init容器成功的完成启动退出后才会启动

  • 应用容器(业务容器/main container)

提供应用程序业务,应用容器是在所有init容器都成功的完成启动退出后才会启动;如果Pod定义了多个应用容器,它们是并行启动

四、Pod容器的3种镜像拉取策略

imagePullPolicy(与image字段同一层级)

IfNotPresent:优先使用node节点本地已存在的镜像,如果本地没有则从仓库拉取镜像。是标签为非latest的镜像的默认拉取策略
Always:总是从仓库拉取镜像,无论node节点本地是否已存在镜像。是标签为latest或无标签的镜像的默认拉取策略
Never:仅使用node节点本地镜像,总是不从仓库拉取镜像。

五、Pod容器的3种重启策略

restartPolicy(与containers字段同一层级)

Always:当Pod容器退出时,总是重启容器,无论容器退出状态码如何。是默认的容器重启策略
OnFailure:当Pod容器异常退出时(容器退出状态码为非0),才会重启容器;正常退出的容器(容器退出状态码为0)不重启
Never:当Pod容器退出时,总是不重启容器,无论容器退出状态码如何

deamonset statefulset控制器的Pod容器重启策略只能设置为 Always,自主类型的Pod容器重启策略可选择 Always OnFailure Never

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐