听说过docker和k8s的朋友,如果经常关注的话也一定知道containerd,这是一个容器运行时。可以使得pod运行在上面,因为k8s在1.24版本之后docker作为容器运行时被弃用了。官方是这么解释的:自 1.24 版起,Dockershim 已从 Kubernetes 项目中移除。弃用 Docker 这个底层运行时,转而支持符合为 Kubernetes 创建的容器运行接口 Container Runtime Interface (CRI) 的运行时。对于Kubernetes 的终端用户不会有太大影响。这也并不意味着 Docker 已死、也不意味着不能或不该继续把 Docker 用作开发工具。Docker 仍然是构建容器的利器,使用命令 docker build 构建的镜像在 Kubernetes 集群中仍然可以运行。
在 Kubernetes v1.24 版本中,内建组件 dockershim 被移除。
Kubernetes 的 dockershim 组件使得你可以把 Docker 用作 Kubernetes 的 容器运行时。是 Kubernetes 项目提供的一个软件组件,它充当了 Kubernetes 与 Docker 容器运行时之间的桥梁。
在 Kubernetes 中,容器运行时提供了在节点上运行容器所需的环境。为了与不同的容器运行时通信,Kubernetes 定义了一个叫做容器运行时接口(Container Runtime Interface, CRI)的标准。
当 Kubernetes 项目开始支持不同的容器运行时,它们需要一个统一的方式来与这些运行时进行通信。因为 Docker 是最早受Kubernetes支持的容器平台,但是 Docker 的设计并未完全遵守CRI规范,因此需要一个适配层来让 Kubernetes 能够与 Docker Engine 通信。这个适配层就是 Dockershim。它允许 Kubernetes 通过标准的 CRI 与 Docker 容器运行时进行交互。
Dockershim 将 Kubernetes 的 CRI 调用翻译成 Docker 引擎 API 调用。这样,Kubernetes 就可以控制 Docker 运行的容器,包括启动、停止容器,拉取镜像等操作。
随着时间的推移,直接使用 CRI 兼容的容器运行时(如 containerd 和 CRI-O)成为了更加高效和简洁的选择,因为这些运行时原生适配 CRI,无需额外的转换层。因此,从 Kubernetes 1.24 版本开始,它弃用了对 Dockershim 的支持,转而鼓励用户直接使用 CRI 标准的容器运行时。这也减少了 Kubernetes 维护的复杂性,提高了系统的性能和稳定性。
官网:https://containerd.io/
containerd是一个行业标准的容器运行时,它提供了必要的功能来运行容器化应用程序。作为核心容器运行时组件,它负责镜像的传输和存储、容器的执行和监督、网络的配置和管理等。
与Docker相比,containerd更加轻量级和模块化,它是Docker软件堆栈的一部分,但可以与Docker独立运行。containerd旨在提供一个简化版的平台来运行容器,减少系统资源的占用,而Docker提供了一整套的容器生命周期管理工具。
在类Unix系统中安装containerd相对简单。以下是在基于Debian的系统(如Ubuntu)上安装containerd的步骤:
更新软件包索引:
sudo apt-get update
安装containerd:
sudo apt-get install containerd
安装完成后,containerd会作为服务运行。
让我们看看如何使用containerd来运行一个简单的hello-world容器:
首先,拉取hello-world镜像:
sudo ctr image pull docker.io/library/hello-world:latest
然后,运行一个新容器:
sudo ctr run --rm docker.io/library/hello-world:latest hello-world
这两个命令分别完成了获取一个容器镜像和在您的机器上运行该镜像的操作。
containerd
自身并不提供一个命令行工具来进行容器的日常管理,但它有一个名为 ctr
的低级命令行客户端,用于与 containerd
守护进程交互,适合于调试和低层次的容器操作。
下面是一些 ctr
命令行工具的常用操作:
查看版本信息
ctr version
拉取镜像
ctr images pull docker.io/library/hello-world:latest
列出镜像
ctr images list
运行容器
ctr run -d docker.io/library/hello-world:latest hello-world
列出容器
ctr containers list
执行容器中的命令
ctr tasks exec --exec-id exec1 hello-world /bin/echo "Hello world!"
查看容器日志
ctr tasks logs hello-world
停止容器
ctr tasks kill hello-world
删除容器
ctr containers rm hello-world
删除镜像
ctr images remove docker.io/library/hello-world:latest
导出容器
ctr containers export hello-world hello-world.tar
请注意,ctr
工具主要用于开发和调试目的,而不是生产环境中的容器管理。在生产环境中,通常使用更高级别的工具,如 Kubernetes 或 Docker,来管理 containerd
运行的容器。这些工具提供了更友好和更丰富的命令行界面,并处理了许多与容器管理相关的复杂细节。