k8s yaml文件pod的生命周期

Pod是k8s中最小限额资源管理组件,也是最小化运行容器化的应用的资源管理对象。

Pod是一个抽象的概念,可以理解为一个或者多个容器化应用的集合。

在一个pod当中运行一个容器是最常用的方式。

在一个pod当中同时运行多个容器,在一个pod当中可以同时封装几个需要耦合的相互协作的容器。这些多个容器共享资源,也可以互相协作组成一个service单位。

不论运行一个容器还是多个容器。k8s管理的都是pod而不是容器。

一个pod内的容器,必须都运行在同一个节点上。基于现代容器技术的要求,一个pod运行一个容器,一个容器只运行一个进程。

横向扩展,方便扩缩容

解耦,一个pod内运行多个容器,耦合度太高,一但一个进程失败,整个pod将全部失败,实现解耦。基于pod可以创建多个副本实现高可用和负载均衡。管理方便简单直观。

Pod内的容器共享资源。共享机制:pause底层基础容器来提供共享资源的机制。

Pause容器是基础容器,也可以称为父容器,管理pod内容器的共享操作。

Pause还可以管理容器的生命周期

k8s提供了pause容器两大功能:

  1. 为pod内的所有容器提供一个命名空间
  2. 启动容器的pid(进程号)命名空间,每个pod中都作为pid唯一的进程(init进程)。回收僵尸进程。
  3. 创建pod时,先创建pause容器,然后拉取镜像,形成pod。

第一步:master节点发出指令,pod使用的镜像nginx。Pod的副本数

第二部:kube-scheduler来分配执行的node节点

第三部:node节点的kubelet收到master指令。拉pause,拉nginx:1.22 pod1

第四部:pause容器先启动,提供命名空间,进程管理pid1 来为pod内的容器提供共享服务以及 容器的进程管理。

Pause容器共享两种资源

网络:每个pod都会被分配一个集群内部的唯一IP地址,pod内的容器共享网络。Pod在集群内部的ip地址和端口。

Pod内部的容器可以使用localhost互通通信。Pod的中容器与外部通信时,从共享的资源当中进行分配,宿主机的端口映射。

Pause容器共享两种资源

网络:每个pod都会被分配一个集群内部的唯一IP地址,pod内的容器共享网络。Pod在集群内部的ip地址和端口。

Pod内部的容器可以使用localhost互通通信。Pod的中容器与外部通信时,从共享的资源当中进行分配,宿主机的端口映射。

总结:

每个pod都有一个基础容器pause容器。

Pause容器对应的镜像属于k8s集群的一部分。创建集群就会有pause这个基础镜像。

Pod里面包含看一个或者多个相关的容器(应用)

Pod外再设置一个基础镜像:

  1. pod内部有一组容器,挂了一个,就算这个pod失效了吗? 引入pause禁止,代表整个容器的组的状态。可以解决对pod内部容器整体状态的判断。
  2. Pod内的容器共享ip 共享volume,解决了容器内网络通信的问题,解决了容器内部文件共享问题。

Pod的生命周期状态

  1. pending 挂起 pod已被创建,但是尚未被分配到运行的node节点(节点上资源不够,需要等待其他pod的调度)
  2. running:运行中。Pod已经被分配到了node节点,pod内部的所有容器都已经启动,运行状态正常,稳定。
  3. complete:容器内部的进程运行完毕,正常退出。没有发生错误。
  4. faild:pod中的容器非正常退出。发生错误,需要通过查看详情和日志来定位问题。
  5. UNkown:由于某些原因,k8s集群无法获取pod的状态。APIserver出了问题。
  6. terminating:终止中 ,pod正在被删除,里面的容器正在终止。终止过程中,资源回收,垃圾清理,以及终止过程中需要执行的命令。

创建pod的容器分类:

  1. 基础容器:pause
  2. Init容器(初始化容器):init c

1和2这个过程中。Pod的状态就是init: 0/3

  1. 业务容器

init容器的作用:

环境变量

可以在创建的过程中为业务容器定制好相关的代码和工具

Init容器独立与业务容器,他是单独构建的一个镜像,对业务容器不产生任何安全影响。

Init容器能以不同于pod内应用容器的文件系统视图运行。Secrets的权限。应用容器无法访问sercerts的权限。

总结:init容器提供了应用容器运行之前的先决条件,提供了一种阻塞或者延迟机制来控制应用容器的启动,只有前置条件满足,才会创建pod的应用容器。

  1. 在pod的启动过程中,容器按照初始化容器先启动,每个容器必须在下一个容器启动之前,要成功退出。
  2. 如果运行失败,会按照容器的重启策略进行指定动作。RestartPolicy Always never onFailure(非正常退出才会重启)
  3. 所有的init容器没有成功之前,pod是不会进入ready状态。

Init容器与service无法。不能对外提供访问。

  1. 如果重启pod,所有的init容器一定会重新执行
  2. 如果修改init容器的spec(参数),只限于image,其他的修改字段 都不生效(基于deploment。
  3. 每个容的名称都要唯一,不能重复。

Pod的重启策略:

总结:

Pause容器:底层容器/基础容器

提供pod内容器的网络和存储共享,以及pod内容器退出之后的资源回收。、

Init容器:人为设定的,业务容器启动之间的必要条件。

Pod的生命周期:

  1. pause基础容器
  2. Init容器----全部成功退出-------业务容器
  3. Poststart prestop 容器的钩子

启动时命令和退出时的命令

  1. 探针:探测容器的健康状态。伴随pod的整个生命周期(除了启动探针)

总结:pod就是用来封装容器的,业务是容器。服务也是容器端口也是容器

相关推荐
脚踏实地的大梦想家24 分钟前
【Docker】P5 Docker Compose 实战指南:一键部署 WordPress + MySQL
mysql·docker·容器
闲人编程1 小时前
现代Python开发环境搭建(VSCode + Dev Containers)
开发语言·vscode·python·容器·dev·codecapsule
老年DBA4 小时前
Kubernetes 上的 GitLab + ArgoCD 实践(三):使用 ArgoCD 打通 CD 流程
kubernetes·gitlab·argocd
帅帅梓9 小时前
docker图形化管理
docker·容器·eureka
努力搬砖的咸鱼15 小时前
容器之间怎么通信?Docker 网络全解析
网络·docker·云原生·容器
liming49518 小时前
Ubuntu18.04部署k8s
云原生·容器·kubernetes
YC运维20 小时前
Kubernetes资源管理全解析
java·容器·kubernetes
Leinwin20 小时前
微软发布Azure Kubernetes Service Automatic国际版
microsoft·kubernetes·azure
不爱笑的良田21 小时前
从零开始的云原生之旅(六):DaemonSet 实战日志采集器
云原生
chinesegf21 小时前
Docker篇6-项目app.py和flask_app.service配置和映射到docker中
docker·容器·flask