前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文带你掌握Containerd

一文带你掌握Containerd

作者头像
用户1107783
发布2023-12-28 17:47:29
2280
发布2023-12-28 17:47:29
举报

Containerd 是什么

Containerd是一个开源的容器运行时工具,它为容器提供了核心功能。作为一个独立的项目,Containerd旨在管理容器的核心功能,如镜像管理、容器生命周期管理、网络和存储管理等。它是由Docker项目中的核心组件分离出来的,用于提供一个更加轻量级、独立且可嵌入的容器运行时环境。Containerd被设计为一个通用的核心容器运行时,因此许多容器平台和工具都可以构建在其之上,包括Kubernetes、Docker等。Containerd并不是直接面向终端用户的工具,而是为了提供稳定、可靠的容器基础设施,让开发者和其他项目可以基于它构建更高级别的容器化解决方案。

与 Docker 的关系

Docker和Containerd之间有一种父子关系。Containerd实际上是从Docker项目中拆分出来的,是Docker引擎中的核心组件之一。具体来说,Docker Engine在其架构中使用了一种插件化的方式,而Containerd就是其中一个重要的组件。Docker Engine的架构涵盖了各种功能模块,其中包括容器构建、镜像管理、容器运行时、网络和存储管理等。Containerd被用作Docker Engine中负责容器生命周期管理和基本操作的核心组件之一。因此,Docker实际上是建立在Containerd之上的应用层工具。当你使用Docker命令时,它会与Containerd交互以执行诸如创建、运行和管理容器等操作。然而,Containerd本身更加通用和抽象化,可以为其他容器平台和工具提供底层支持,而不仅限于Docker。总体而言,Docker是一个集成了各种工具和功能的容器平台,而Containerd是其中一个核心组件,负责提供基本的容器运行时功能。

安装Containerd

系统信息

代码语言:javascript
复制
[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core)

二进制安装

下载地址?https://github.com/containerd/containerd最新版本1.7.10

代码语言:javascript
复制
[root@localhost ~]# wget https://github.com/containerd/containerd/releases/download/v1.7.10/cri-containerd-1.7.10-linux-amd64.tar.gz
[root@localhost ~]# tar xf cri-containerd-1.7.10-linux-amd64.tar.gz  -C /

生成Containerd配置

代码语言:javascript
复制
[root@localhost ~]# mkdir /etc/containerd
[root@localhost ~]# containerd config default > /etc/containerd/config.toml

查看配置
[root@localhost ~]# cat/etc/containerd/config.toml

安装好containerd 之后,Containerd的配置文件中有如下两项配置:
root = /var/lib/containerd
state = "/run/containerd"

root配置的目录是用来保存持久化数据的目录,包括content, snapshot, metadata和runtime
state 是用来保存运行时的临时数据的,包括 sockets、pid、挂载点、运行时状态以及不需要持久化的插件数据。

Containerd开机自启

代码语言:javascript
复制
[root@localhost ~]# systemctl enable --now containerd
Created symlink from /etc/systemd/system/multi-user.target.wants/containerd.service to /etc/systemd/system/containerd.service.
[root@localhost ~]# systemctl start containerd

验证其版本
[root@localhost ~]# containerd --version
containerd github.com/containerd/containerd v1.7.10 4e1fe7492b9df85914c389d1f15a3ceedbb280ac

runc验证

默认 Containerd 安装好就会自带一个 runc 命令

代码语言:javascript
复制
执行runc命令,如果有版本号返回则为正常
[root@localhost ~]# runc -v
runc version 1.1.10
commit: v1.1.10-0-g18a0cb0f
spec: 1.0.2-dev
go: go1.20.10
libseccomp: 2.5.4

如果运行runc命令时提示:runc: error while loading shared libraries: ?libseccomp.so.2: cannot open shared object file: No such file or directory,则表明runc没有找到libseccomp,需要安装 libseccomp libseccomp安装

代码语言:javascript
复制
[root@localhost ~]# wget https://github.com/opencontainers/runc/releases/download/v1.1.5/libseccomp-2.5.4.tar.gz
[root@localhost ~]# tar xf libseccomp-2.5.4.tar.gz
[root@localhost ~]# cd libseccomp-2.5.4/
[root@localhost ~]# ./configure
[root@localhost ~]# make && make install

查找的到 即安装成功
[root@localhost ~]# find / -name "libseccomp.so"
/root/libseccomp-2.5.4/src/.libs/libseccomp.so 
/usr/local/lib/libseccomp.so

做软链

代码语言:javascript
复制
[root@localhost ]# ln -s /usr/local/lib/libseccomp.so /lib64/libseccomp.so.2

再次查看
[root@localhost ]# runc -v
runc version 1.1.10
commit: v1.1.10-0-g18a0cb0f
spec: 1.0.2-dev
go: go1.20.10
libseccomp: 2.5.4

也可以二进制runc安装?https://github.com/opencontainers/runc最新版本:1.1.10

代码语言:javascript
复制
[root@localhost ~]# wget https://github.com/opencontainers/runc/releases/download/v1.1.10/runc.amd64
[root@localhost ~]# chmod +x runc.amd64

查找containerd安装时已安装的runc所在的位置,然后替换
[root@localhost ~]# which runc /usr/local/sbin/runc

替换containerd已安装的runc
[root@localhost ~]# mv runc.amd64 /usr/local/sbin/runc

执行runc命令,如果有命令帮助则为正常
[root@localhost ~]# runc -v
runc version 1.1.10
commit: v1.1.10-0-g18a0cb0f
spec: 1.0.2-dev
go: go1.20.10
libseccomp: 2.5.4

yum安装

在使用 yum 包管理器安装 Containerd 之前,需要先设置 Containerd 的 YUM 仓库。以下是大致的步骤:

准备YUM 仓库

创建一个名为 /etc/yum.repos.d/containerd.repo 的文件,并将以下内容添加到该文件中:

代码语言:javascript
复制
[containerd]
name=containerd
baseurl=https://download.docker.com/linux/centos/7/$basearch/stable
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
enabled=1

安装 Containerd

在设置好仓库文件后,运行以下命令以更新 YUM 缓存并使其识别新的仓库信息:

代码语言:javascript
复制
[root@localhost ~]# yum makecache
[root@localhost ~]# yum install -y containerd.io

启动 Containerd

代码语言:javascript
复制
[root@localhost ~]# systemctl enable containerd
[root@localhost ~]# systemctl start containerd

验证 Containerd

代码语言:javascript
复制
[root@localhost ~]# containerd -v
containerd containerd.io 1.6.25 d8f198a4ed8892c764191ef7b3b06d8a2eeb5c7f

[root@localhost ~]# runc -v
runc version 1.1.10
commit: v1.1.10-0-g18a0cb0
spec: 1.0.2-dev
go: go1.20.10
libseccomp: 2.3.1

Containerd 常见命令操作

更换 Containerd 后,以往常用的 docker 命令也不再使用,取而代之的分别是 crictl 和 ctr 两个命令客户端。一般来说某个主机安装了 k8s 后,命令行才会有 crictl 命令。而 ctr 是跟 k8s 无关的,主机安装了 containerd 服务后就可以操作 ctr 命令。

  • crictl 是遵循 CRI 接口规范的一个命令行工具,通常用它来检查和管理kubelet节点上的容器运行时和镜像。
  • ctr 是 containerd 的一个客户端工具。

还有一个更高级点的命令 nerdctl ,nerdctl 是用于 containerd 并且 兼容 docker cli 习惯的管理工具,主要适用于刚从 docker 转到 containerd 的用户,操作 containerd 的命令行工具 ctr 和 crictl 不怎么好用,所以就有了 nerdctl。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-12-21,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 云原生运维圈 微信公众号,前往查看

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

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Containerd 是什么
  • 与 Docker 的关系
  • 安装Containerd
    • 系统信息
      • 二进制安装
        • 生成Containerd配置
          • Containerd开机自启
            • runc验证
            • yum安装
              • 准备YUM 仓库
                • 安装 Containerd
                  • 启动 Containerd
                    • 验证 Containerd
                    • Containerd 常见命令操作
                    相关产品与服务
                    容器服务
                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                    http://www.vxiaotou.com