愿所有的美好都能不期而遇
基础知识(基础名词一)
基础知识(基础名词一)

基础知识(基础名词一)

内容目录

​ 随着kubernets和云原生的快速发展,关于k8s和容器的名次也越来越多,为了简化沟通成本和差错,对基本的概念进行简单的整理

容器生态系统

img

​ 容器生态系统是由许多令人兴奋的技术、大量的专业术语和大公司相互争斗组成的。这些公司偶尔会在休战中走到一起合作,商定一些标准,这些标准有助于使这个生态系统在不同的平台和操作系统之间更具互操作性,并减少对单一公司或项目的依赖。

基础概念

其工作流程简单来说是这样的:

  1. Docker,Kubernetes 等工具来运行一个容器时会调用容器运行时(CRI)比如 containerd,CRI-O
  2. 通过容器运行时来完成容器的创建、运行、销毁等实际工作
  • Docker 使用的是 containerd 作为其运行时;Kubernetes 支持 containerd,CRI-O 等多种容器运行时
  • 这些容器运行时都遵循了 OCI 规范,并通过 runc 来实现与操作系统内核交互来完成容器的创建和运行

下面就分别介绍图中所提到的术语和规范。

Docker

​ Docker是一个完整的容器平台,它包括Docker Engine、Docker CLI、Docker Registry、Docker Compose、Docker Swarm等多个组件,可以帮助用户快速构建、发布和运行容器应用。

  • Docker Engine负责启动和管理Docker容器。
  • Docker CLI则提供了一个命令行界面来管理Docker容器、镜像、网络等资源。
  • Docker Registry是一个中央仓库,用于存储和共享Docker镜像。
  • Docker Compose和Docker Swarm则是两个容器编排工具,可以帮助用户管理和调度多个Docker容器。

docker image

​ Docker 镜像,实际上是以 Open Container Initiative(OCI)格式打包的镜像。因此从repo中拉出的镜像,既可以使用docker run 启动,也可以直接部署在k8s集群中。

Dockershim

​ 在 Kubernetes 包括一个名为 dockershim 的组件,使它能够支持 Docker。但 Docker 由于比 Kubernetes 更早,没有实现 CRI,所以这就是 dockershim 存在的原因,它支持将 Docker 被硬编码到 Kubernetes 中。随着容器化成为行业标准,Kubernetes 项目增加了对额外运行时的支持,比如通过 Container Runtime Interface (CRI) 容器运行时接口来支持运行容器。因此 dockershim 成为了 Kubernetes 项目中的一个异类,对 Docker 和 dockershim 的依赖已经渗透到云原生计算基金会(CNCF)生态系统中的各种工具和项目中,导致代码脆弱。

​ 2022 年 4 月 dockershim 将会从 Kubernetes 1.24 中完全移除。今后 Kubernetes 将取消对 Docker 的直接支持,而倾向于只使用实现其容器运行时接口的容器运行时,这可能意味着使用 containerd 或 CRI-O。这并不意味着 Kubernetes 将不能运行 Docker 格式的容器。containerd 和 CRI-O 都可以运行 Docker 格式(实际上是 OCI 格式)的镜像,它们只是无需使用 docker 命令或 Docker 守护程序。

Container Runtime Interface (CRI)

​ CRI是Kubernetes定义的一组API规范,它定义了容器运行时(如Docker、containerd、CRI-O等)与Kubernetes之间的接口,以实现Kubernetes与容器运行时的解耦。CRI定义了容器的生命周期管理、容器网络、存储卷、镜像管理等一系列操作,并将这些操作封装成了一组统一的gRPC接口。这样,Kubernetes只需要实现一组CRI接口,就可以支持不同的容器运行时,而无需针对每种容器运行时编写不同的代码。

Containerd

​ Containerd是一个轻量级的容器运行时,由Docker在2015年开源,并于2017年捐赠给了CNCF(Cloud Native Computing Foundation)。它可以与Docker一起使用,也可以独立运行。Containerd实现了CRI规范的所有功能,包括容器的生命周期管理、镜像管理、网络管理等。Containerd的设计重点在于高度可扩展性和安全性。

CRI-O

​ CRI-O 是另一个实现了容器运行时接口(CRI)的高级别容器运行时,可以使用 OCI(开放容器倡议)兼容的运行时,它是 containerd 的一个替代品。

​ CRI-O 诞生于 RedHat、IBM、英特尔、SUSE、Hyper 等公司。它是专门从头开始创建的,作为 Kubernetes 的一个容器运行时,它提供了启动、停止和重启容器的能力,就像 containerd 一样。

Open Container Initiative (OCI)

​ OCI的目标是为容器技术定义一组开放、稳定和通用的标准,以实现容器技术的互操作性和可移植性。

​ OCI定义了两个标准规范:OCI ImageOCI Runtime

  • OCI Image规范定义了容器镜像格式和内容,包括镜像的元数据、配置和文件系统布局等,以确保容器镜像的可移植性和兼容性。

  • OCI Runtime规范则定义了容器运行时的标准接口和生命周期管理,包括容器的创建、启动、暂停、恢复、销毁等一系列操作。这样,不同的容器运行时就可以遵循相同的规范进行实现,使得容器在不同的运行时之间可以进行互操作和移植。

runc

​ Runc是一个开源的轻量级容器运行时,是Docker项目中的容器运行时实现之一,也是OCI Runtime规范的标准实现之一。Runc的主要功能是在Linux系统上管理和运行容器。

​ Runc的设计理念是简单、轻量级和可移植。它使用标准的Linux容器机制(如cgroups、命名空间等)来隔离和管理容器,与底层的操作系统无关,因此具有良好的跨平台性。

​ Runc提供了一组命令行工具来创建、启动、停止、删除容器,同时也支持容器快照、恢复等高级功能。Runc的运行时行为可以通过配置文件进行自定义,以满足不同的使用场景和需求。

一条评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注