k8s入门-基础概念
31 May 2023 - joy717
k8s相关概念
个人理解,难免有不对的地方。
实际上,关于容器、容器运行时环境,并没有一个准确的“官方”定义。
容器(container)
---2021.8更新---
是一个特殊的进程/线程,有隔离/限制/独立文件系统等功能。
---old-----
操作系统(linux)提供了 namespaces
和cgroups
功能,使用这些功能,创建出一个相对独立的,类似虚拟机的环境。使用了这样技术的,即可称为容器。实际上,docker container的核心功能,也是基于此。
(namespaces
可隔离的cpu、内存、网络等,而cgroups
则可限制cpu、内存等的使用量)
与虚拟机不同的是,容器是跑在操作系统内核之上的一个进程
。
容器运行时环境(container runtime)
container runtime
,为container运行而提供的一个环境。这个环境提供了,容器所需要的基础功能。比如创建namespaces、cgroups,并且在这个环境里执行命令等功能。在此基础上,不同团队实现了不同的功能集合,也由此有了很多不同的container runtime。比如有些runtime扩展的功能包含:
- image相关功能,管理、分享image等;
- 提供API给上层调用。
- ...
由此,也产生了两大类runtime。一部分runtime只提供容器运行,所需要的一些底层的、基础的环境(功能)。姑且称之为底层runtime
。而一部分runtime,既提供了基础的功能,又提供了很多丰富的功能,这类runtime,姑且称之为上层runtime
。
而部分上层runtime,在基础功能部分,不一定是自己实现,而是直接使用了其他的底层runtime,也就是在底层runtime,外面又包了一层,提供了更加丰富的功能。比较典型的例子:(Docker) containerd
,是一个上层runtime,但是底层功能(与namespaces、cgroups等操作)却使用了runc
这么一个底层的runtime。这样做的好处是,其中一个是可以解耦。也更“微服务化”。
以上参考:
参考1 系列