kubernetes Pod到底是什么?

官方文档 对其有详细描述及定义

提到Pod我们不得不了解下容器pod实质是一个容器集合。

什么是容器?

我们所说的容器本身其实并不存在,是一个抽象的概念。在Linux中没有所谓的容器容器的实质是一个视图被隔离、资源受限的进程。

众所周知,容器是使用Linux内核的两个特性——命名空间和cgroup来执行的普通进程。

命名空间/名称空间

命名空间允许您为进程提供一个视图,该视图隐藏那些名称空间之外的所有内容,从而为进程提供自己的运行环境。

常用命名空间包括:

  • Cgroup命名空间: 隔离控制组根目录 (Linux 内核4.6新增)
  • IPC命名空间: 隔离系统进程通信等 (Linux 内核2.6.19新增)
  • MNT命名空间: 隔离挂载点(Linux 内核2.4.19新增)
  • NET命名空间: 隔离网络设备、栈、端口等(Linux 内核2.6.24新增)
  • PID命名空间: 隔离进程IDLinux 内核2.6.24新增)
  • USER命名空间: 隔离用户、用户组IDLinux 内核2.6.23新增,Linux 内核3.8完善)
  • UTS命名空间: 隔离主机名和NIS域名(Linux 内核2.6.19新增)

控制组

默认情况下,一个进程可以使用它所运行的物理机器上的所有资源,从而消耗其他进程的资源。 为了限制这种情况,Linux有一个叫做cgroups的特性。进程可以在cgroup中运行,就像一个命名空间,但是cgroup限制了进程可以使用的资源。 这些资源包括CPURAM、块I/O、网络I/O等。CPU通常受微核(单个CPU核心的1/1000)的限制,内存受RAM字节的限制。 进程本身可以正常运行,但它只能使用cgroup所允许的CPU,如果超过cgroup设置的内存限制,就会出现内存不足错误。

linux通过命名空间与控制组使进程视图被隔离、资源受限,此时该进程即可称为一个容器

Copyright © weiliang 2021 all right reserved,powered by Gitbook本书发布时间: 2024-04-22 16:03:41

results matching ""

    No results matching ""