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"