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)
      notion image
  • 共享存储
    • 引用数据库概念volume,使用数据卷持久化存储
    • 当一个Pod挂掉,重新启一个Pod时,里面容器的日志和业务数据会丢失,可通过挂载数据卷保证数据持久化
    • notion image
4、Pod镜像拉取策略
notion image
  • IfNotPresent:默认值,镜像在宿主机上不存在时才拉取
  • Always:每次创建Pod都会重新拉取一次镜像
  • Never: Pod 永远不会主动拉取这个镜像
5、Pod资源限制
notion image
  • requests表示创建时使用多少资源
  • limits表示最大使用多少资源
  • 资源限制由docker来限制的
  • 关于cpu限制单位CPU是按核心来算的,1核心=1000m
  • 避免一个Pod使用所有的资源
6、Pod重启机制
notion image
  • Always:当容器终止退出后,总是重启容器,默认策略。
  • OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。(适用某一次操作)
  • Never:当容器终止退出,从不重启容器。(适用某一次操作)
7、Pod健康检查
notion image
  • 查看Pod运行正常并不能代表应用也正常
  • livenessProbe(存活检查)
    • 如果检查失败,将杀死容器,根据Pod的restartPolicy来操作
  • readinessProbe (就绪检查)
    • 如果检查失败, Kubernetes会把Pod从service endpoints中剔除
  • Probe支持三种检查方法
    • httpGet 发送HTTP请求,返回200-400范围状态码为成功
    • exec 执行Shell命令返回状态码是0为成功
    • tcpSocket 发起TCP Socket建立成功
8、Pod调度策略
notion image
  • create pod —> apiserver —> etcd存储
  • scheduler会收到apiserver发送watch(监听是否有新的Pod创建)的监听信息,读取etcd创建pod,根据调度算法调度至某个work节点上,写入etcd存储
  • work节点上,kubelet —> apiserver —> 读取etcd分配给当前节点的Pod —> docker创建容器 —> 写入etcd存储
9、Pod调度属性
notion image
  • Pod资源限制对Pod调用产生影响
    • 根据request找到满足资源的node节点进行调度
  • 节点选择器标签影响Pod调度
    • nodeSelector —> env_role —> 调度某个组 —> 某个组下的work节点
10、亲和性
notion image
  • 节点亲和性 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会驱逐)
      • 为节点添加污点
        • 污点容忍
          • notion image
          • key, value自定义,openrator操作符,effect污点类型
           
    Loading...
    目录