Pod 最小部署单元
1、Pod基本概念
- 最小部署单元
- 包含多个容器(一组容器的集合)
- 一个pod中的容器共享网络命名空间(pod中的容器网络共用)
- pod是短暂的(重新创建pod,IP地址不是唯一固定的)
2、Pod存在意义
- 创建容器使用docker,一个docker对应一个容器,一个容器有一个进程,一个容器运行一个应用程序
- Pod是多进程设计,运行多个应用程序——Pod(docker(应用))
- 一个Pod有多个容器,一个容器里面运行一个应用程序
- Pod存在为了亲密性
- 两个应用之间进行交互(如:一个pod中的容器可以进行交互)
- 网络之间调用(在一个Pod中的容器可以通过socket调用,不同Pod可通过IP进行调用)
- 两个应用需要频繁调用
3、Pod实现机制
- 共享网络
- 通过Pause容器,将其他业务容器加入Pause容器中,让所有业务容器在同一个名称空间中,可以实现网络共享
- 容器本身之间相互隔离(隔离使用的有两个部namespace、group)
- Pause容器(称根容器,又称info容器)
- Pause容器中有一个IP、MAC、PORT
- 业务容器(应用容器)
- 名称空间(namespace)

- 共享存储
- 引用数据库概念volume,使用数据卷持久化存储
- 当一个Pod挂掉,重新启一个Pod时,里面容器的日志和业务数据会丢失,可通过挂载数据卷保证数据持久化

4、Pod镜像拉取策略

- IfNotPresent:默认值,镜像在宿主机上不存在时才拉取
- Always:每次创建Pod都会重新拉取一次镜像
- Never: Pod 永远不会主动拉取这个镜像
5、Pod资源限制

- requests表示创建时使用多少资源
- limits表示最大使用多少资源
- 资源限制由docker来限制的
- 关于cpu限制单位CPU是按核心来算的,1核心=1000m
- 避免一个Pod使用所有的资源
6、Pod重启机制

- Always:当容器终止退出后,总是重启容器,默认策略。
- OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。(适用某一次操作)
- Never:当容器终止退出,从不重启容器。(适用某一次操作)
7、Pod健康检查

- 查看Pod运行正常并不能代表应用也正常
- livenessProbe(存活检查)
- 如果检查失败,将杀死容器,根据Pod的restartPolicy来操作
- readinessProbe (就绪检查)
- 如果检查失败, Kubernetes会把Pod从service endpoints中剔除
- Probe支持三种检查方法
- httpGet 发送HTTP请求,返回200-400范围状态码为成功
- exec 执行Shell命令返回状态码是0为成功
- tcpSocket 发起TCP Socket建立成功
8、Pod调度策略

- create pod —> apiserver —> etcd存储
- scheduler会收到apiserver发送watch(监听是否有新的Pod创建)的监听信息,读取etcd创建pod,根据调度算法调度至某个work节点上,写入etcd存储
- work节点上,kubelet —> apiserver —> 读取etcd分配给当前节点的Pod —> docker创建容器 —> 写入etcd存储
9、Pod调度属性

- Pod资源限制对Pod调用产生影响
- 根据request找到满足资源的node节点进行调度
- 节点选择器标签影响Pod调度
- nodeSelector —> env_role —> 调度某个组 —> 某个组下的work节点
10、亲和性

- 节点亲和性 nodeAffinity和nodeSelector基本一样,根据节点上标签约束Pod的调度
- 硬亲和性
- 约束条件必须满足
- env_role等于dev或者test,In表示包含有,若没有那么一直是等待状态
- 软亲和性
- 尝试满足,不保证一定满足
- 补充:支持常用的操作符 operator
- In 包含
- NotIn 不包含
- Exists 存在
- Gt 大于
- Lt 小于
- DoesNotExists 不存在
11、反亲和性
- 污点和污点容忍
- 基本介绍
- nodeSelector和nodeAffinity: Pod调度到某些节点上, Pod属性,调度时候实现
- Taint污点:节点不做普通分配调度,是节点属性
- 应用场景
- 专用节点
- 配置特定硬件节点
- 基于Taint驱逐
- 示例
- 查看节点污点情况
- 污点值有三种
- NoSchedule:一定不会被调试
- ProferNoSchedule:尽量不被调度
- NoExcute:不会调度,并且会驱逐Node已有的Pod(简单来说当前节点有Pod会驱逐)
- 为节点添加污点
- 污点容忍
- key, value自定义,openrator操作符,effect污点类型

Loading...
keepalived