pod是k8s中最小的资源管理组件
pod也是最小化运行容器化的应用的资源管理对象
pod是一个抽象的概念,可以理解为一个或者多个容器化应用的集合
一个pod内的容器,必须都运行在同一个节点。基于现代容器技术的要求,一个pod运行一个容器,一个容器只运行一个进程。
pause是基础容器,也可以成为父容器,管理pod内容器的共享操作。
pause还可以管理容器的生命周期。
k8s提供了pause容器
1.为pod内的所有容器提供一个命名空间
2.启动容器的pid命名空间,每个pod都作为pid为1的进程(init进程),回收僵尸进程
3.创建pod时,先创建pause容器,然后再拉去镜像生产容器,形成pod
网络:每个pod都会被分配一个集群内部的唯一ip地址,pod内的容器共享网络,pod在集群内部的ip地址和端口,pod内部的容器可以使用localhost互相通信。pod的中容器与外部通信时,从共享的资源进行分配、宿主机的端口映射。
存储:
pod可以指定多个共享的volume,pod内的容器共享这些volume。
自主式pod:pod不会自我修复,pod内容器的进程终止,被删除,缺少资源被驱逐,这个pod没有办法自愈。
控制器管理pod:可以滚动升级,可以自愈(自动重启),可以管理pod的数量以及pod的扩缩容
1.pending 挂起状态
pod已被创建,但是尚未被分配到运行的node节点。(节点上资源不够,需要等待其他pod的调度)
2.runnung: 运行中,pod已经被分配到运行的node节点,pod内部的所有容器都已经启动,运行状态正常,稳定
3.complete:容器内部的进程运行完毕,正常退出,没有发生错误
successded
4.faild:pod中的容器非正常退出,发生了错误,需要通过查看详情和日志来定位问题
5.UNknown:由于某些原因,k8s集群无法获取pod的状态,APIserver出了问题
6.terminating:终止中,pod正在被删除,里面的容器正在终止,终止过程中,资源回收,垃圾清理以及终止过程中需要执行的命令
工作原理:
首先会创建基础容器pause容器,如果有初始化容器,会先创建初始化容器,初始化容器全部成功退出,才会创建pod的业务容器,创建业务容器时会创建两个钩子分别是容器运行的第一个命令和最后一个命令,然后再创建存活探针和流量探针伴随整个pod的生命周期。
1.基础容器:pause
2.init容器(初始化容器):init C
3.业务容器
Always:只有容器退出,总是重启,无论容器的状态码是否正常。默认策略,可以不加
Never:只有容器退出,不论是否正常,都不重启
OnFailure: 只有容器的状态码非0才会重启,正常退出是不重启的。只有报错才会重启
在deployment的yaml文件当中,重启的策略只能是always,可以不写。