# 1.Pod的基本概念 1. 在Kubernetes中,最小的管理元素不是一个个独立的容器,而是Pod,Pod是最小的,管理,创建,计划的最小单元。 2. Pod是一组容器的集合 3. 一个Pod中的容器共享网络空间 4. Pod是短暂存在的 # 2.Pod存在的意义 1. 创建容器使用docker,一个docker对应一个容器,一个容器有进程,一个容器运行一个应用程序 2. Pod是多进程设计,运行多个应用程序。 * 一个Pod有多个容器,一个容器里面运行一个应用程序 3. Pod存在为了亲密性应用 * 两个应用进行交互 * 网络之间的调用 * 两个应用需要频繁调用 # 3.Pod的实现机制 ## 1.共享网络 容器之间相互隔离,namespace,group 多个容器在同一个namespace里面 ![image-20210629170139908](../../照片/image-20210629170139908.png) pause(info)是根容器 新容器(业务容器)会加入info容器之中 info容器会独立出IP地址,MAC地址 在同一个namespace里面 ## 2.共享存储 pod持久化数据-日志数据,业务数据 持久化存储--数据卷(volumn) # 4.镜像拉取策略 * ifnotpresent:默认值,镜像在宿主机不存在才拉取 * always:每次创建Pod都会重新拉取一次镜像 * never:Pod永远不会主动拉取这镜像 # 5.Pod资源的限制 限制由docker实现 # 6.Pod的重启的机制 ![image-20210629180552052](../../照片/image-20210629180552052.png) # 7.Pod的健康检查 容器检查-无法检查潜在危险,例如不能提供服务 应用层面健康检查 K8S的检查机制 ![image-20210629180901274](../../照片/image-20210629180901274.png) ![image-20210629180953925](../../照片/image-20210629180953925.png) # 8.Pod的调度策略 ![image-20210629182003299](../../照片/image-20210629182003299.png) master节点 create --- apiserver -- etcd scheduler -- apiserver -- etcd --调度算法,把Pod调度某个node系欸但上 node节点 kublet -- apiserver -- 读取etcd拿到分配给当前节点的pod -- docker创建容器 ## 1.影响调度的属性 ### 1.Pod资源的限制 ### 2.节点选择器标签 首先对节点创建标签 ### 3.节点亲和性(nodeaffinity) 和nodeselector基本一样,根据节点上标签约束来决定Pod调度到那些节点上 (1)硬亲和性-required 约束条件必须满足 (2)软亲和性-preferred 尝试满足,不保证 支持的操作符 In NotIn Exists Gt Li DoesNotExists ### 4.污点和污点容忍 Taint污点:节点不做普通分配调度,是节点属性 (上面三个都是对Pod做的限制,污点是对节点表示限制) * 专用节点 * 配置特定硬件节点 * 基于Taint驱逐 污点值有三个 NoSchedule:一定不被调度 PreferNoSchdule:尽量不被调度 NoExecute:不会调度,并且还会驱逐Node已有Pod 污点容忍 ![image-20210630093930467](../../照片/image-20210630093930467.png) 加入污点也可能被调度到