Kubernetes的每个Pod都有一个特殊的称为根容器的Pause容器

pause容器之外都是与业务相关的容器。

Pod里的业务容器共享Pause容器的IP,共享Pause容器挂接的Volume,从而简化了业务容器之间的通信问题,也解决了文件共享问题。同时Pause容器会报告容器组的状态。

Kubernetes为每个Pod分配唯一的IP地址,称为Pod IP,则Pod中的多个容器共享Pod IP。

Kubernetes要求底层网络支持集群内任意两个Pod之间的TCP/IP直接通信,这通常采用虚拟二层网络技术,比如Flannel、Openvswitch等,这样,在kubernetes里,一个Pod里的容器与另外主机上的Pod容器能够直接通信。

Pod其实有两种类型:

  • 普通的Pod

  • 静态的Pod

Static Pod并不存放在Kubernetes的etcd存储,而是存放在某个具体Node的具体文件中,并且只能在该Node启动运行。

普通的Pod一般被创建,就会被放入etcd存储,随后被Kubernetes Master调度到某个具体的Node上并进行绑定,随后该Pod被对应的Node上的kubelet进程实例化成一组相关的Docker容器并启动起来。默认情况下,Pod里的某个容器停止,Kubernetes会自动检测到这个问题并重新启动这个Pod(重启Pod里的所有容器)。如果Pod所在的Node宕机,则将Node上的所有Pod调度到其他节点。

定义Pod对象

apiVersion: v1
kind: Pod
metadata:
  name: myweb
  labels:
    name: myweb
spec:
  containers:
  - name: myweb
    image: kubeguide/tomcat-app:v1
    ports:
    - containerPort: 8080
    env:
    - name: MYSQL_SERVICE_HOST
      value: 'mysql'
    - name: MYSQL_SERVICE_PORT
      value: '3306'

Pod IP与containerPort组成Endpoint,表示Pod里的服务进程的对外通信地址。

Event

Event记录事件最早产生事件、最后出现时间、重复次数、发起者、类型,以及导致此事件的原因等众多信息。

Event通常会关联到某个具体的资源对象,是排查故障的重要参考信息。

当发现某个Pod迟迟无法创建时,可以查看该Pod

kubectl describe pod xxxx

资源配额

每个Pod都可以对其能够使用的资源设置限额,当前可以设置限额的资源有CPU与Memory。

在kubernetes中,通常以千分之一的CPU配额为最小单位,用m表示。通常一个容器的CPU配额被定义为100~300m。

在kubernetes中,计算资源配额限定需要设定两个参数:

  • Requests:资源最小申请量,系统必须满足需求

  • Limits:资源最大允许使用量

比如,设置MySQL的资源配额

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

results matching ""

    No results matching ""