前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >K8s 1.24与Dockershim分手:未来是containerd和CRI-O的世界

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

作者头像
希里安
发布2024-01-23 12:59:49
3840
发布2024-01-23 12:59:49
举报
文章被收录于专栏:希里安

容器技术创新之路

听说过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的步骤:

更新软件包索引:

代码语言:javascript
复制
sudo apt-get update

安装containerd:

代码语言:javascript
复制
sudo apt-get install containerd

安装完成后,containerd会作为服务运行。

运行一个containerd容器

让我们看看如何使用containerd来运行一个简单的hello-world容器:

首先,拉取hello-world镜像:

代码语言:javascript
复制
sudo ctr image pull docker.io/library/hello-world:latest

然后,运行一个新容器:

代码语言:javascript
复制
sudo ctr run --rm docker.io/library/hello-world:latest hello-world

这两个命令分别完成了获取一个容器镜像和在您的机器上运行该镜像的操作。

常用命令行操作

containerd 自身并不提供一个命令行工具来进行容器的日常管理,但它有一个名为 ctr 的低级命令行客户端,用于与 containerd 守护进程交互,适合于调试和低层次的容器操作。

下面是一些 ctr 命令行工具的常用操作:

查看版本信息

代码语言:javascript
复制
ctr version

拉取镜像

代码语言:javascript
复制
ctr images pull docker.io/library/hello-world:latest

列出镜像

代码语言:javascript
复制
ctr images list

运行容器

代码语言:javascript
复制
ctr run -d docker.io/library/hello-world:latest hello-world

列出容器

代码语言:javascript
复制
ctr containers list

执行容器中的命令

代码语言:javascript
复制
ctr tasks exec --exec-id exec1 hello-world /bin/echo "Hello world!"

查看容器日志

代码语言:javascript
复制
ctr tasks logs hello-world

停止容器

代码语言:javascript
复制
ctr tasks kill hello-world

删除容器

代码语言:javascript
复制
ctr containers rm hello-world

删除镜像

代码语言:javascript
复制
ctr images remove docker.io/library/hello-world:latest

导出容器

代码语言:javascript
复制
ctr containers export hello-world hello-world.tar

请注意,ctr 工具主要用于开发和调试目的,而不是生产环境中的容器管理。在生产环境中,通常使用更高级别的工具,如 Kubernetes 或 Docker,来管理 containerd 运行的容器。这些工具提供了更友好和更丰富的命令行界面,并处理了许多与容器管理相关的复杂细节。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 希里安 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 容器技术创新之路
    • dockershim是什么?
      • containerd
        • 简介
        • 安装containerd
      • 运行一个containerd容器
      • 常用命令行操作
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档