Kubernetes (四)POD基础概念

一、什么是POD
Pod,是一个逻辑概念,是Kubernetes 项目的原子调度单位。一个POD可以包含一个或多个容器
 
二、POD的特点
POD中的容器共享网络和共享存储
1、共享存储资源
可以为一个Pod指定多个共享的Volume 资源。
Pod 中的所有容器都可以访问共享的volume资源
 
2、共享网络资源
每个Pod都会被分配一个唯一的IP地址
Pod中的所有容器共享网络空间,包括IP地址和端口
Pod内部的容器可以使用 localhost互相通信
 
三、POD的实现原理
每个Pod都有一个中间容器,这个容器叫作 Infra 容器,Infra 容器启动后永远处于“暂停”状态
在 Pod 中, Infra 容器永远都是第一个被创建的容器,而其他用户定义的容器,则通过 Join Network Namespace 的方式,与 Infra 容器关联在一起。
Pod 的生命周期只跟 Infra 容器一致

 

 

# docker ps
deda12323422        6968df931ebb                                        "/docker-entrypoint.…"   5 weeks ago         Up 5 weeks                              k8s_filebeat_filebeat-pv7jg_kube-system_4770d022-1755-11eb-8cc3-fa163e3878a8_0
e48bcfddf568        mirrorgooglecontainers/pause-amd64:3.0              "/pause"                 5 weeks ago         Up 5 weeks                              k8s_POD_filebeat-pv7jg_kube-system_4770d022-1755-11eb-8cc3-fa163e3878a8_0
# docker inspect --format '{{.State.Pid}}'  deda12323422
6029

# docker inspect --format '{{.State.Pid}}' e48bcfddf568
5978

# ls -l /proc/6029/ns/net
total 0
lrwxrwxrwx 1 root root 0 Dec  2 11:37 net -> net:[4026531956]

# ls -l /proc/5978/ns/net
total 0
lrwxrwxrwx 1 root root 0 Dec  2 11:37 net -> net:[4026531956]
四、为什么需要POD?
1、“超亲密关系”这样的调度问题
具有“超亲密关系”的容器指的是特征包括但不限于:
  • 互相之间会发生直接的文件交换、
  • 使用 localhost 或者 Socket 文件进行本地通信、
  • 会发生非常频繁的远程调用、
  • 需要共享某些 Linux Namespace等等
 
这些容器是有需求要部署在一起的,如果是按照容器一个个调度,就有可能出现由于调度的节点资源不足而重新调度的问题。
例如:A,B,C单个容器,需要的内存资源都为1G,现在节点剩余2.5G的内存,当调度完A、B节点后,剩余内存已经不能满足C的需求,而出现调度失败
通过POD,作为原子调度单位,调度的时候是统一按照 Pod 而非容器的资源需求进行计算的,从而避免这个问题。
 
2、容器设计模式
容器的本质是进程,当用户想在一个容器里跑多个功能并不相关的应用时,应该优先考虑它们是不是更应该被描述成一个 Pod 里的多个容器,而不是在一个容器里运行多个进程。
 
 
 

 

posted @ 2020-12-03 17:32  guoxianqi  阅读(600)  评论(0编辑  收藏  举报