目录
- 一、Namespace(命名空间)
- 二、Control Groups (Cgroups)
- 三、结合使用Namespace和Cgroups
- 四、其他核心技术组件
容器核心技术主要围绕两个核心组件构建:Namespace 和 Control Groups (Cgroups)。这两者都是现代操作系统内核级别的功能,它们共同提供了容器所需的资源隔离和限制能力。
一、Namespace(命名空间)
Namespace 为容器提供了访问隔离的能力,它允许每个容器拥有自己独立的视图,包括文件系统、网络设备、进程ID空间、用户ID空间、挂载点、IPC(进程间通信)和UTS(主机名与域名)。这使得容器内的进程感觉就像是在一个单独的系统上运行,实际上却是在共享宿主机的内核。以下是Namespace的几种类型:
CLONE_NEWPID
:进程ID命名空间,使得每个容器有独立的进程ID空间。CLONE_NEWNET
:网络命名空间,让容器有独立的网络设备、IP地址、端口空间等。CLONE_NEWNS
:挂载命名空间,允许每个容器有不同的文件系统视图和挂载点。CLONE_NEWUSER
:用户ID命名空间,使容器内的root用户与宿主机的root用户分离。CLONE_NEWCGROUP
:控制组命名空间,虽然不是所有Linux内核都支持,但它可以隔离cgroup层次结构。CLONE_NEWIPC
:IPC命名空间,用于隔离System V IPC和POSIX消息队列。CLONE_NEWUTS
:UTS命名空间,允许容器拥有独立的主机名和NIS域。
二、Control Groups (Cgroups)
Cgroups 是用来限制、记录和隔离进程组使用的物理资源(如CPU、内存、磁盘I/O等)的一种机制。通过Cgroups,系统管理员可以控制和监控资源的分配,确保即使在高负载情况下,单个容器也不会耗尽整个系统的资源。Cgroups的工作方式是通过层级结构来组织进程,并为每个层级或子层级设定资源使用规则。例如,你可以设置一个cgroup,确保某个容器组的CPU使用率不超过总CPU的20%。
三、结合使用Namespace和Cgroups
结合Namespace的隔离能力和Cgroups的资源控制能力,容器得以实现轻量级的虚拟化。容器内的进程看到的是一个被隔离的环境,且它们的资源使用被严格控制,而这一切都在同一个宿主机的内核中实现,无需额外的虚拟化开销。
四、其他核心技术组件
-
Root File System(根文件系统):每个容器运行时都会基于一个轻量级的根文件系统(通常是一个镜像),这个镜像包含了运行应用程序所需的所有依赖,进一步增强了容器的可移植性和隔离性。
-
容器运行时(Runtime):如runc,它负责根据容器镜像创建和运行容器实例,执行容器的生命周期管理。
-
容器编排系统:如Kubernetes,它提供了容器的自动化部署、扩展和管理能力,通过高级抽象层(如Pods、Services、Deployments等)进一步提升了容器化应用的运维效率。
综上所述,Namespace和Cgroups构成了容器技术的基础,而容器镜像、容器运行时和容器编排系统则构建了现代容器生态系统的其余部分,共同推动了云原生应用的快速发展。