一、Pods提供两种共享资源:网络和存储。

(1)网络,每个Pod被分配一个独立的IP地址,Pod中的每个容器共享网络命名空间,包括IP地址和网络端口。Pod内的容器可以使用localhost相互通信。当Pod中的容器与Pod 外部通信时,他们必须协调如何使用共享网络资源(如端口)。k8s要求底层网络支持集群内任意两个Pod之间的TCP/IP直接通信,这一般是采用虚拟二层网络技术来实现的,如Open vSwitch。

(2)存储,Pod可以指定一组共享存储volumes。Pod中的所有容器都可以访问共享volumes,允许这些容器共享数据。volumes 还用于Pod中的数据持久化,以防其中一个容器需要重新启动而丢失数据。

二、Pod的几个关键知识点:

很少会直接在kubernetes中创建单个Pod。因为Pod的生命周期是短暂的,用后即焚的实体。当Pod被创建后(不论是由你直接创建还是被其他Controller),都会被Kuberentes调度到集群的Node上。直到Pod的进程终止、被删掉、因为缺少资源而被驱逐、或者Node故障之前这个Pod都会一直保持在那个Node上。

Pod不会自愈。如果Pod运行的Node故障,或者是调度器本身故障,这个Pod就会被删除。同样的,如果Pod所在Node缺少资源或者Pod处于维护状态,Pod也会被驱逐。Kubernetes使用更高级的称为Controller的抽象层,来管理Pod实例。虽然可以直接使用Pod,但是在Kubernetes中通常是使用Controller来管理Pod

Controller可以创建和管理多个Pod,提供副本管理、滚动升级和集群级别的自愈能力。例如,如果一个Node故障,Controller就能自动将该节点上的Pod调度到其他健康的Node上。通常,Controller会用你提供的Pod Template来创建相应的Pod。

Pod都会包含一个特殊的“根容器”,一个或多个业务容器。当根容器“死亡”了时,代表该Pod整个容器组的不可用。

Endpoint,Pod的IP加上Pod里的容器端口(containerPort)称为一个Endpoint,代表着此Pod里的一个服务进程的对外通信地址。

Pod Event事件,可以使用kubectl describe pod xxxx查看一个Pod的详细信息,其中包括了该Pod所发生的每个事件的信息。Event事件信息对于故障排查很有帮助。

三、Pod的资源限额:

CPU限额,资源限制的单位为cpu Core的数量,该资源是以绝对值计算的。k8s将1/1000的CPU Core的资源定义为可供分配的最小CPU资源单位,称为m通常一个容器的CPU配额被定义为100~300m,即占用0.1~0.3个CPU Core。因为该配额是一个资源的绝对值,所以无论是在一个只有2 CPU Cores的机器上,还是在一个有48CPU Cores的机器上,100m所代表的CPU使用量都是一样的。

内存限额,内存的资源限制是以字节为计量单位,内存的配额也是按资源的绝对值进行分配的。

三、k8s中配置资源限额的方法:

Requests设置,一个资源的最小申请量,是系统必须满足的一个用量;

Limits设置,该资源的最大允许使用量,不能被突破,当容器试图突破该参数限制时,可能会被k8s Kill并重启。

一般是结合使用以上两个参数去定义一个资源的配额,如下所示。

spec:

containers:
  - name: db
    image: mysql
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"