容器技术
NameSpace + Cgroups实现
- NameSpace:实现容器的工作空间与资源隔离:
- PID namespace:保障进程隔离,每个容器都以PID=1的init进程来启动。
- MNT namespace: 保障每个容器都有独立的目录挂载路径。
- UTS namespace:保障每个容器都有独立的主机名或域名。
- NET namespace:保障每个容器都有独立的网络栈、socket和网卡设备。
- IPC namespace:只有在相同IPC命名空间的容器才可以利用共享内存、信号量和消息队列通信。
- User namespace:用于隔离容器中UID、GID以及根目录等。可配置映射宿主机和容器中的UID、GID。
- Cgroups:一种可以限制单个进程或者多个进程所使用资源的机制
单进程模型
- 容器的单进程模型的本质其实是容器中的 1 号进程并不具有管理多进程、多线程等复杂场景下的能力
- 手动开启pause容器机制
- pause容器作为pod中所有容器的父容器,是第一个启动的容器,当pause容器正常启动后,其他业务负载相关的容器就会加入pause容器的namespace,从而同一pod下的其他容器都共享这个pause容器的命名空间,相互之间以localhost访问,构成统一的整体。
- 在pod中作为容器共享namespace的基础
- 作为pod内的所有容器的父容器,扮演 init 进程(即systemd)的作用,pause进程