Kubernetes的核心技术——Pod

1、Pod概述

  1. pod是k8s系统中可以创建和管理的最小单元
  2. pod可以包含多个容器(一组容器的集合)
  3. 一个pod容器共享网络命名空间

2、pod存在的意义

  1. 创建容器使用docker,一个docker对应一个容器,一个容器有进程,一个容器运行一个应用程序
  2. pod是多进程设计,运行多个应用程序。一个pod有多个容器,一个容器运行一个应用程序
  3. pod存在为了亲密性应用:两个应用进行交互、网络间调用、两个应用需要频繁调用

3、实施机制

  1. 共享网络:通过pause容器,把其业务容器加入到pause容器中,让所有业务容器在同一名称空间中,可以实现网络共享
  2. 共享存储:引入数据卷概念Volum,使用数据卷进行持久化存储

4、pod镜像拉取策略

  1. IfNotPresent:默认值,镜像在宿主机上不存在时才拉取
  2. Always:每次创建pod都会重新拉取一次镜像
  3. Never:pod永远不会主动拉取这个镜像

5、pod资源限制

resource:
  requests:
    ......  #调度
  limits:
    ......	#最大

6、pod重启机制

restartPlicy:never
  # Always:当容器终止推出之后,总是重启容器,默认策略
  # OnFailure:当容器异常退出(退出状态码非0)时,才重启
  # Never:当容器终止退出,从不重启容器

7、pod健康检查

  1. livenessProbe(存活检查)

    如果检查失败,将杀死容器,根据pod的restartPolicy来操作

  2. readinessProbe(就绪检查)

    如果检查失败,k8s会把pod从service endPoints中剔除

  3. probe支持以下三种检查方法

    • httpGet:发送http请求,返回200-400范围状态码为成功
    • exec:执行shell命令返回状态码为0是成功
    • tepSocket:发起TCP Socket建立成功

8、创建pod的流程

由client向master上的API Sever请求,然后将pod存储在etcd上,存储信息返回至API Server,由API Server告知Schedule为其分配node,在分配完node之后将结果返回API Server,并将结果存储在etcd上;node节点访问API Server然后读取etcd拿到分配给当前节点的pod,然后响应给docker创建容器。
详细过程点击查看图解

9、pod调度

影响调度的属性

  1. pod资源限制对pod调度产生影响

  2. 节点选择标签影响pod调度

  3. 节点亲和性影响pod调度

    节点亲和性nodeAffinity和之前nodeSelector基本一样的,根据节点上标签约束来决定pod调度到哪些节点上

    • 硬亲和性:约束条件必须满足
    • 软亲和性:尝试满足,不保证完全满足

    支持常用的操作符:

    operator:In,NotIn,Exists,Gt,Lt,DoesNotExists

  4. 污点和污点容忍

    Taint污点:节点不做普通分配调度,是节点属性

    场景:

    专用节点、配置特点硬件节点、基于Taint驱逐

    污点值有三个:NoSchedule:一定不被调度

    ​ PreferNoSchedule:尽量不被调度

    ​ NoExecute:不会嗲殴打,并且还会驱逐Node已有pod

    查看污点:

    kubectl describe node node1 | grep Taint
    

    为节点添加污点:

    kubectl taint node [node] key=value:污点三个值
    kubectl taint node node1 env=yes:NoSchedule
    

    删除节点:

    kubectl taint node node1 env:Noschedule -node/node1 untainted
    

    污点容忍:

    tolerations:

    类似于软亲和,即是NoSchedule,也可能被调用

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐