首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

K8s 1.24与Dockershim分手:未来是containerd和CRI-O的世界

近日见闻

最近降温,着实很冷!

摘抄

如觉不满,即时转台,无谓日日抱怨。

世界那么大,一定有更好的人与事,

正在等待如此可爱的你,去,去追求。

——亦舒

容器技术创新之路

听说过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 集群中仍然可以运行。

dockershim是什么?

在 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 维护的复杂性,提高了系统的性能和稳定性。

containerd

简介

官网:https://containerd.io/

containerd是一个行业标准的容器运行时,它提供了必要的功能来运行容器化应用程序。作为核心容器运行时组件,它负责镜像的传输和存储、容器的执行和监督、网络的配置和管理等。

与Docker相比,containerd更加轻量级和模块化,它是Docker软件堆栈的一部分,但可以与Docker独立运行。containerd旨在提供一个简化版的平台来运行容器,减少系统资源的占用,而Docker提供了一整套的容器生命周期管理工具。

安装containerd

在类Unix系统中安装containerd相对简单。以下是在基于Debian的系统(如Ubuntu)上安装containerd的步骤:

更新软件包索引:

sudo apt-get update

安装containerd:

sudo apt-get install containerd

安装完成后,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 运行的容器。这些工具提供了更友好和更丰富的命令行界面,并处理了许多与容器管理相关的复杂细节。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OL6pFVOWM9AbpAm5AC5HvITg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券