凤城市网站建设,潍坊尚呈网站建设公司怎么样,莱芜网站建设电话,互联网网站开发有哪些职位Pod是什么#xff1f;
pod是k8s中最小的资源管理组件。
pod也是最小化运行容器化应用的资源管理对象。
pod是一个抽象的概念#xff0c;可以理解为一个或者多个容器化应用的集合
在一个pod当中运行一个容器是最常用的方式
在一个pod当中可以同时运行多个容器#xff0c…Pod是什么
pod是k8s中最小的资源管理组件。
pod也是最小化运行容器化应用的资源管理对象。
pod是一个抽象的概念可以理解为一个或者多个容器化应用的集合
在一个pod当中运行一个容器是最常用的方式
在一个pod当中可以同时运行多个容器一个pod当中可以同时封装几个需要耦合的互相协作的容器。这些容器是共享资源的也可以互相协作组成一个service单位。
不论运行一个容器还是多个容器k8s管理的都是pod而不是容器。
一个pod内的多个容器必须都运行在同一个node节点上
基于现代容器技术的要求。最常用的就是1个pod运行1个容器1个容器只运行一个进程目的是为了横向扩展方便扩缩容和解耦。这样管理方便简单直观。
1个pod内运行多个容器耦合度太高。一旦一个进程失败整个pod将全部失败。实现解耦基于pod可以创建多个副本实现高可用和负载均衡。
pause容器
pod内的容器共享资源。
共享机制pause底层基础容器来提供共享资源的机制。
pause是基础容器也可以称为父容器。管理pod内容器的共享操作。
pause还可以管理容器的生命周期。
k8s提供了pause容器两大核心功能 为pod内的所有容器提供一个的命名空间。只有都在同一个命名空间内才可以共享资源。 启动容器的pid(进程号)命名空间每个pod中都作为pid为1的进程(init进程)回收僵尸进程。 当创建pod时会先创建1个pause容器然后再拉取镜像生成容器 pause会在每个pod中创建一个pid为1的进程来管理pod中的进程。包括回收僵尸进程。
kubelet管理node节点
pause管理pod内的容器
1、 master节点发出指令pod使用的镜像nginxpod的副本数
2、 kube-scheduler来分配执行的node节点
3、 node节点的kubelet收到master指令先拉pause再拉nginx镜像
4、 pause容器先启动提供命名空间进程管理pid1。来为pod内的容器提供共享服务以及容器的进程管理。
pause容器共享两种资源网络资源、存储资源
网络资源每个pod都会被分配一个集群内部的唯一IP地址。pod内的容器共享网络。pod在集群内部的IP地址和端口。
pod内部的容器可以使用localhost互相通信。pod中的容器与外部通信时从共享的资源当中进行分配宿主机的端口映射。
pod可以指定多个共享的volume。pod内的容器共享这些vloume。volume可以实现数据的持久化。可以防止pod重新构建后文件丢失。
总结
每个pod都有1个pause基础容器
pause容器对应的镜像属于k8s集群的一部分。创建集群就会有pause这个基础镜像。
pod里面包含了一个或者多个相关的容器(应用)
pod外设置一个基础镜像
1、 pod内部有一组容器挂了一个就算pod失效了吗
引入pause禁止代表整个容器的组状态。可以解决对pod内部容器整体状态的判断
2、 pod内容器共享IP共享volume挂在卷解决了容器内网络通信的问题。解决了容器内文件共享的问题。 pod的分类
自主式pod这个pod不会自我修复。如果pod内容器的进程终止或者被删除或者缺少资源被驱逐。这个pod没有办法自愈。
只要不是基于deployment、daemanset资源控制器创建的都是自主式pod
控制器管理pod滚动升级可以自愈(可以自动重启)可以管理pod的数量以及pod的扩缩容
pod的生命周期状态 1、 pending---挂起表示pod已被创建但是尚未被分配到运行的node节点。
可能有几种情况导致 节点上资源不够 需要等待其他pod的调度等
2、 running---运行中pod已经被分配到了node节点。pod内部的所有容器都已经启动。运行状态良好正常稳定。
3、 complete/successded表示容器内部的进程运行完毕后正常退出。没有发生错误。
4、 faild表示pod中的容器非正常退出。发生了错误。需要通过查看详情和日志来定位问题。
5、 UNknown表示由于某些原因k8s集群无法获取pod的状态。一般是APIserver出现问题。
6、 terminating表示终止中。表示pod正在被删除内部容器正在终止。终止过程中涉及到资源回收垃圾清理以及终止过程中需要执行的命令。所以需要时间终止。
Pod生命周期图
1、 先有pause基础容器才会创建初始化init容器
2、 初始化容器运行完毕而且是成功运行完毕后才会创建pod的主业务容器
在容器的生命周期中还伴随着2个容器钩子
3、 容器钩子
poststart表示容器运行时执行的第一个命令
prestop容器结束时执行的最后一个命令
容器生命周期中还有2个探针
探针用于检测容器状态是否正常。
livenessProbe存活探针
readinessProbe流量探针
启动探针
存活探针和流量探针会伴随整个pod的生命周期
会不停的检测内部主业务容器的情况。只要主业务容器出现问题整个pod将不再式ready状态。
但是启动探针除外
创建pod的容器分类
1、 基础容器pause
2、 init容器(初始化容器)init c
3、 业务容器
先启动pause基础容器 init初始化容器 pod业务主容器
在pause基础容器和init初始化容器的过程中。pod状态init 1/3---2/3---3/3
当所有init初始化都启动完毕才会创建业务容器
实验验证
vim init.yamlapiVersion: v1
kind: Pod
metadata:name: nginx-init
spec:containers:- name: nginx1image: nginx:1.22
#定义的业务容器initContainers:- name: init-centos1image: centos:7command: [echo, hello,world]- name: init-contos2image: centos:7command: [echo, I am ready]
#这里定义业务容器和两个init初始化容器
#会先创建完pause初始化容器后
#才会先执行init-centos1输出helloworld。
#再执行init-centos2输出I am ready
#最后才会拉起nginx容器
init容器的作用
1、 环境变量可以在创建的过程中为业务容器定制好相关的代码和工具。
2、 init容器独立于业务容器。是单独构建的镜像。对业务容器不产生任何安全影响。
3、 init容器能以不同于pod内应用容器的文件系统视图运行secrets的权限。应用容器无法访问secerts的权限。
总结
init容器提供了应用容器运行之前的先决条件提供了一种阻塞或者延迟机制来控制应用容器的启动。只有前置条件满足才会创建pod内的应用容器。属于k8s的一种机制。
1、 在pod的启动过程中容器时按照初始化容器先启动每个容器都必须在下一个容器启动之前成功退出
2、 如果运行失败会按照容器的重启策略进行指定动作。restartPolicyAlways/Never/onFailure(非正常退出才会重启)
3、 所有的init容器没有成功之前pod是不会进入ready状态的。
init容器与service无关不能对外提供访问也不会在service暴露端口。
4、 如果重启pod所有init容器一定会重新执行。
5、 如果修改init容器的spec(参数)只限制于image。修改的修改字段都不生效。前提基于deployment
6、 每个容器的名称都要唯一且不能重复。
pod的重启策略
实验举例
apiVersion: v1
kind: Pod
metadata:name: centos
spec:restartPolicy: OnFailure
#k8s中pod的重启策略基于容器的状态进行pod的重启
#Always总是重启。只要容器退出无论容器的状态码是正常还是不正常。默认策略可以不加
#Never永不重启。只要容器退出无论容器是否正常都不重启
#OnFailure只有容器的状态码非0时候才会重启。正常退出不会重启。
#一般情况下都使用默认Always只有特殊情况下会使用Never
#在deployment的yaml文件当中重启的策略只能是Always也是默认策略。所以可以不加。containers:- name: centosimage: centos:7command: [echo, I am ready]
在deployment的yaml文件当中重启的策略只能是Always也是默认策略。所以可以不加
实验举例
apiVersion: apps/v1
kind: Deployment
metadata:name: centos2labels:zyg: test
spec:replicas: 1selector:matchLabels:zyg: testtemplate:metadata:labels:zyg: testspec:restartPolicy: Nevercontainers:- name: centos2image: centos:7command: [echo, 123]
总结
pause容器是底层容器/基础容器。提供pod内容器的网络和存储共享以及pod内容器退出之后的资源回收。
init容器不是不一定要存在的。是人为设定的。是业务容器启动之前的必要条件。
pod的生命周期 pause基础容器 init容器-----全部成功退出----才会到主业务容器 容器钩子poststart启动时第一条命令、prestop推出时第一条命令 探针探测容器的健康状态伴随pod的整个生命周期。除了启动探针。
总的来说
pod就是用来封装容器的。业务时容器服务也是容器端口也是容器。