k8s(7)

目录

一.Pod的定义?

pause容器的作用?(给Pod容器组做环境初始化)

Pod的3种容器:

Pod容器的3种镜像拉取策略:imagePullPolicy(与image字段同一层级)

Pod容器的3种重启策略:restartPolicy(与containers字段同一层级)

Pod容器的资源限制:resources.requests|limits(resources与image字段同一层级)

QOS服务质量:确定Pod的调度和驱逐优先级

Pod容器的3种探针(健康检查):

探针的3种探测方式:


一.Pod的定义?

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

一个Pod至少包含多少容器?

1个pause容器(基础容器/父容器/根容器)

1个或者多个应用容器(业务容器)

通常一个Pod最好只包含一个应用容器,一个应用容器最好也只运行一个应用进程

同一个Pod里的容器都是运行在同一个node节点上的,并且共享 net mnt uts pid ipc 命名空间

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容器组做环境初始化,功能具体见上

pause容器是Pod最先启动的容器

init容器(初始化容器/init container):可以在应用容器启动前,为应用容器提供运行依赖环境或工具包;还可以阻塞或延迟应用容器的启动

init容器是在pause容器之后启动的;如果Pod定义了多个init容器,它们是串行启动的,即要在上一个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

Pod容器的资源限制:resources.requests|limits(resources与image字段同一层级)

resources.requests.cpu|memory|hugepages-<size>|ephemeral-storage|nvidia.com/gpu(需要第三方插件支持) 设置Pod容器创建时需要预留的资源量

resources.limits.cpu|memory|hugepages-<size>|ephemeral-storage|nvidia.com/gpu(需要第三方插件支持) 设置Pod容器能够使用的资源量上限

如果Pod容器的进程使用的内存资源量超过limits.memory设置的值则会引发内存不足OOM错误

QOS服务质量:确定Pod的调度和驱逐优先级

Guaranteed:Pod 中的每个容器,包含初始化容器,必须指定内存、CPU 的 requests 和 limits,并且 requests 和 limits 要相等

Burstable:Pod 中至少一个容器具有内存 或 CPU requests

BestEffort:Pod 中的所有容器都没有指定内存 或 CPU 的 requests和 limits

优先级:Guaranteed > Burstable > BestEffort

Guaranteed (QoS) 的 Pod,其优先级最高,在其资源使用量不超过其 limits 的情况下,可以确保不被杀死

在系统内存资源紧张,且集群中没有 QoS 为 Best-Effort 级别的其它 Pod 时,一旦 Burstable (QoS) 的Pod 使用的资源量超过了其 requests,这些 Pod 就容易被杀死

BestEffort (QoS) 的 Pod,其优先级最低,当系统内存资源紧张时,这些 Pod 底层容器中的进程是最先会被杀死的

kubectl describe -n <命名空间> pods <资源名称> 查看Pod中的每个容器的资源限制的配置

kubectl describe node <node节点名称> 查看node节点的资源总量、每个Pod的资源限制和节点的资源限制总量及比例

Pod容器的3种探针(健康检查):

存活探针(livenessProbe):探测Pod容器是否在正常运行。如果探测失败则kubelet杀掉容器,并根据容器重启策略决定是否重启容器

就绪探针(readinessProbe):探测Pod是否进入就绪状态(ready状态栏是否100%比例),并做好接收service转发来的请求准备。

如果探测失败则Pod变成未就绪状态(0/1 1/2),service就会删除相关联的Pod端点,并不再转发请求给处于未就绪状态的Pod

启动探针(startupProbe):探测Pod容器内的应用进程是否启动成功。在启动探针探测成功之前,存活探针和就绪探针都会处于暂停状态,直到启动探针探测成功为止

如果探测失败则kubelet杀掉容器,并根据容器重启策略决定是否重启容器

探针的3种探测方式:

exec:在容器里执行linux命令,如果命令返回码为0则认为探测成功,如果命令返回码为非0值则认为探测失败

httpGet:向PodIP和指定的端口及URL路径发送HTTP GET请求,如果HTTP响应状态码为2XX 3XX则认为探测成功,如果HTTP响应状态码为4XX 5XX则认为探测失败

tcpSocket:向PodIP和指定的端口发送TCP连接请求(三次握手),如果端口正确且TCP连接成功则认为探测成功,如果TCP连接失败则认为探测失败

相关推荐
亚林瓜子40 分钟前
BC-Linux8.6上面离线手动安装Docker引擎
linux·运维·docker·容器·bc-linux
kaiyuanheshang10 小时前
docker 中的entrypoint和cmd指令
运维·docker·容器·cmd·entrypoint
Python私教11 小时前
除了 Docker,还有哪些类似的容器技术?
运维·docker·容器
hummhumm15 小时前
第33章 - Go语言 云原生开发
java·开发语言·后端·python·sql·云原生·golang
petaexpress15 小时前
5种常见的k8s云原生数据管理方案详解
云原生·kubernetes·k8s云原生
wenyue112116 小时前
云原生开发框架
数据库·云原生
颜淡慕潇16 小时前
【K8S系列】深入解析 Kubernetes 中的 Deployment
后端·云原生·容器·kubernetes
zwm_yy18 小时前
docker-mysql
mysql·docker·容器
FinelyYang21 小时前
docker+容器+redis+minio+java jar,实现开机自启动
运维·docker·容器