首页 > 其他分享 >第二十九节 containerd的介绍与安装

第二十九节 containerd的介绍与安装

时间:2024-08-31 10:24:54浏览次数:13  
标签:容器 containerd Containerd 第二十九 plugins Docker cri 安装

一、containerd的介绍

1、containerd 介绍

(1)早在2016年3月,Docker 1.11的Docker Engine里就包含了containerd,而现在则是把containerd从Docker Engine里
彻底剥离出来,作为一个独立的开源项目独立发展,目标是提供一个更加开放、稳定的容器运行基础设施。和原先包含在Docker Engine里
containerd相比,独立的containerd将具有更多的功能,可以涵盖整个容器运行时管理的所有需求。

(2)containerd并不是直接面向最终用户的,而是主要用于集成到更上层的系统里,比如Swarm,Kubernetes,Mesos等容器编排系统。

(3)containerd以Daemon的形式运行在系统上,通过暴露底层的gRPC API,上层系统可以通过这些API管理机器上的容器。

(4)每个containerd只负责一台机器,Pull镜像,对容器的操作(启动、停止等),网络,存储都是由containerd完成。
具体运行容器由runc负责,实际上只要是符合OCI规范的容器都可以支持。

(5)对于容器编排服务来说,运行时只需要使用containerd+runc,更加轻量,容易管理。

(6)独立之后containerd的特性演进可以和Docker Engine分开,专注容器运行时管理,可以更稳定。

第二十九节   containerd的介绍与安装_docker

第二十九节   containerd的介绍与安装_docker_02


2、Containerd前世今生

2013年docker公司在推出docker产品后,由于其对全球技术产生了一定的影响力,Google公司明显感觉到自己公司内部所使用的
Brog系统江湖地位受到的威胁,希望Docker公司能够与自己联合打造一款开源的容器运行时作为Docker核心依赖,但Docker公司
拒绝了;

接着Google公司联合RedHat、IBM等公司说服Docker公司把其容器核心技术libcontainer捐给中立社区(OCI,Open Container 
Intiative),并更名为runC。

为了进一步遏制Docker在未来技术市场影响力,避免在容器市场上Docker一家独大,Google公司带领导RedHat、IBM等成立了CNCF
(Cloud Native Computing Fundation)基金会,即云原生计算基金会。CNCF的目标很明确,既然在容器应用领域无法与Docker相抗衡,
那就做Google更有经验的技术市场------大规模容器编排应用场景,Google公司把自己内部使用的Brog系统开源------Kubernetes,
也就是我们今天所说的云原生技术生态。

2016年Docker公司推出了Docker Swarm,意在一统Docker生态,让Docker既可以实现容器应用管理,也可以实现大规模容器编排,
经过近1年左右时间的市场验证后,发现在容器编排方面无法独立抗衡kubernetes,所以Docker公司于2017年正式宣布原生支持
Kubernetes,至此,Docker在大规模容器编排应用市场败下阵来,但是Docker依然不甘心失败,把Docker核心依赖Containerd
捐给了CNCF,依此说明Docker依旧是一个Paas平台。

2020年CNCF基金会宣布Kubernetes 1.20版本将不再仅支持Docker容器管理工具,此事的起因主要也与Docker捐给CNCF基金会的
Containerd有关,早期为了实现Kubernetes能够使用Docker实现容器管理,专门在Kubernetes组件中集成一个shim(垫片)技术,
用来将Kubernetes容器运行时接口(CRI,Container Runntime Interface)调用翻译成Docker的API,这样就可以很好地使用Docker了,
但是随着Kubernetes在全球技术市场的广泛应用,有更多的容器管理工具的出现,它们都想能够借助于Kubernetes被用户所使用,
所以就提出标准化容器运行时接口,只要适配了这个接口就可以集成到Kubernetes生态当中,所以Kubernetes取消了对shim的维护,
并且由于Containerd技术的成功,可以实现无缝对接Kubernetes,所以接下来Kubernetes容器运行时的主角是Containerd。

3、Containerd架构

Containerd设计的目的是为了嵌入到Kubernetes中使用,它是一个工业级的容器运行时,不提供给开发人员和终端用户直接使用,
这样就避免了与Docker产生竞争,但事实上,Containerd已经实现大多数容器管理功能,例如:容器生命周期管理、容器镜像传输
和管理、容器存储与网络管理等。

第二十九节   containerd的介绍与安装_配置文件_03

Containerd采用标准的c/s架构
-服务端通过GRPC协议提供稳定的API
-客户端通过调用服务端的API进行高级的操作

-为了实现解耦,Containerd 将不同的职责划分给不同的组件,
每个组件就相当于一个子系统(subsystem),连接不同子系统的组件被称为模块。

例如,上图中的每一个长虚线的方框都表示一种类型的插件,包括Service Plugin、Metadata Plugin、
GC Plugin、Runtime Plugin 等,其中Service Plugin又会依赖Metadata Plugin GC Plugin和Runtime Plugin。
每一个小方框都表示一个细分的插件,例如Metadata Plugin 依赖Containers Plugin、Content Plugin 等。

Containerd 两大子系统为:

-Bundle:在Containerd中,Bundle包含了配置、元数据和根文件系统数据,

你可以理解为容器的文件系统。而Bundle子系统允许用户从镜像中提取和打包Bundles。


-Runtime:Runtime子系统用来执行Bundles,比如创建容器。其中,每一个子系统的

行为都由一个或多个模块协作完成(架构图中的Core部分)。每一种类型的模块都以插件

的形式集成到Containerd中,而且插件之间是相互依赖的。

4、常用插件

Content Plugin:提供对镜像中可寻址内容的访问,所有不可变的内容都被存储在这里。


Snapshot Plugin:用来管理容器镜像的文件系统快照。

镜像中的每一个layer都会被解压成文件系统快照,类似于Docker中的"graphdriver"。


Metrics:暴露各个组件的监控指标。

第二十九节   containerd的介绍与安装_docker_04

5、架构缩略图

Containerd被分为三个大块:StorageMetadataRuntime

第二十九节   containerd的介绍与安装_配置文件_05


二、containerd的安装

1、yum方式安装

获取阿里云YUM源
# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看YUM源中Containerd软件
# yum list | grep containerd
containerd.io.x86_64                        1.4.12-3.1.el7             docker-ce-stable
安装Containerd
# yum -y install containerd.io

第二十九节   containerd的介绍与安装_Docker_06

第二十九节   containerd的介绍与安装_配置文件_07

2、containerd的验证

使用rpm -qa命令查看是否安装
# rpm -qa | grep containerd
containerd.io-1.6.33-3.1.el7.x86_64

第二十九节   containerd的介绍与安装_配置文件_08

设置containerd服务启动及开机自启动
# systemctl enable containerd
# systemctl start containerd

第二十九节   containerd的介绍与安装_docker_09

查看containerd服务启动状态
# systemctl status containerd

[root@lyc-80-28 ~]# systemctl status containerd
● containerd.service - containerd container runtime
   Loaded: loaded (/usr/lib/systemd/system/containerd.service; enabled; vendor preset: disabled)
   Active: active (running) since 五 2024-08-30 23:33:04 CST; 29s ago
     Docs: https://containerd.io
  Process: 1498 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
 Main PID: 1503 (containerd)
    Tasks: 12
   Memory: 18.3M
   CGroup: /system.slice/containerd.service
           └─1503 /usr/bin/containerd

第二十九节   containerd的介绍与安装_配置文件_10

安装Containerd时ctr命令亦可使用,ctr命令主要用于管理容器及容器镜像等。
使用ctr命令查看Containerd客户端及服务端相关信息。
# ctr version
---------------------
[root@lyc-80-28 ~]# ctr version
Client:
  Version:  1.6.33
  Revision: d2d58213f83a351ca8f528a95fbd145f5654e957
  Go version: go1.21.11

Server:
  Version:  1.6.33
  Revision: d2d58213f83a351ca8f528a95fbd145f5654e957
  UUID: 58ebdd57-0346-4760-b15a-387a718b6c55

第二十九节   containerd的介绍与安装_docker_11

三、使用二进制部署containerd

Containerd有两种安装包:
第一种是containerd-xxx,这种包用于单机测试没问题,不包含runC,需要提前安装。

第二种是cri-containerd-cni-xxxx,包含runc和k8s里的所需要的相关文件。k8s集群里需要用到此包。
虽然包含runC,但是依赖系统中的seccomp(安全计算模式,是一种限制容器调用系统资源的模式。)

1、containerd 的二进制包下载

Github官网
https://github.com/containerd/containerd/releases/download/v1.7.21/cri-containerd-cni-1.7.21-linux-amd64.tar.gz

直接下载包
wget https://github.com/containerd/containerd/releases/download/v1.7.21/cri-containerd-cni-1.7.21-linux-amd64.tar.gz

第二十九节   containerd的介绍与安装_Docker_12

第二十九节   containerd的介绍与安装_Docker_13

第二十九节   containerd的介绍与安装_Docker_14

上传containerd的tar包到服务器
mkdir containerd 
mv cri-containerd-cni-1.7.21-linux-amd64.tar.gz containerd/
cd containerd 
tar -zxvf cri-containerd-cni-1.7.21-linux-amd64.tar.gz

第二十九节   containerd的介绍与安装_Docker_15

第二十九节   containerd的介绍与安装_配置文件_16

第二十九节   containerd的介绍与安装_docker_17

cp -p  /root/containerd/usr/local/bin/*   /usr/local/bin/
cp -p  /root/containerd/etc/systemd/system/containerd.service  /usr/lib/systemd/system/
chmod +x  /usr/lib/systemd/system/containerd.service

第二十九节   containerd的介绍与安装_配置文件_18

2、生成containerd的配置文件

生成默认配置文件

Containerd 的默认配置文件为 /etc/containerd/config.toml,可以使用

containerd config default > /etc/containerd/config.toml命令创建一份模块配置文件

创建配置文件目录
mkdir /etc/containerd
生成配置文件
containerd config default > /etc/containerd/config.toml
查看配置文件
cat /etc/containerd/config.toml

第二十九节   containerd的介绍与安装_Docker_19

将默认配置文件进行替换

备份默认配置文件
cp /etc/containerd/config.toml /etc/containerd/config.toml.bak
修改配置文件
vim /etc/containerd/config.toml
--------------
root = "/var/lib/containerd"
state = "/run/containerd"
oom_score = -999

[grpc]
  address = "/run/containerd/containerd.sock"
  uid = 0
  gid = 0
  max_recv_message_size = 16777216
  max_send_message_size = 16777216

[debug]
  address = ""
  uid = 0
  gid = 0
  level = ""

[metrics]
  address = ""
  grpc_histogram = false

[cgroup]
  path = ""

[plugins]
  [plugins.cgroups]
    no_prometheus = false
  [plugins.cri]
    stream_server_address = "127.0.0.1"
    stream_server_port = "0"
    enable_selinux = false
    sandbox_image = "easzlab/pause-amd64:3.2" #配置了沙箱镜像
    stats_collect_period = 10
    systemd_cgroup = false
    enable_tls_streaming = false
    max_container_log_line_size = 16384
    [plugins.cri.containerd]
      snapshotter = "overlayfs"
      no_pivot = false
      [plugins.cri.containerd.default_runtime]
        runtime_type = "io.containerd.runtime.v1.linux"
        runtime_engine = ""
        runtime_root = ""
      [plugins.cri.containerd.untrusted_workload_runtime]
        runtime_type = ""
        runtime_engine = ""
        runtime_root = ""
    [plugins.cri.cni]
      bin_dir = "/opt/kube/bin"
      conf_dir = "/etc/cni/net.d"
      conf_template = "/etc/cni/net.d/10-default.conf"
    [plugins.cri.registry]
      [plugins.cri.registry.mirrors]
        [plugins.cri.registry.mirrors."docker.io"]     #endpoint表示配置镜像地址
          endpoint = [
            "https://docker.mirrors.ustc.edu.cn",
            "http://hub-mirror.c.163.com"
          ]
        [plugins.cri.registry.mirrors."gcr.io"]
          endpoint = [
            "https://gcr.mirrors.ustc.edu.cn"
          ]
        [plugins.cri.registry.mirrors."k8s.gcr.io"]
          endpoint = [
            "https://gcr.mirrors.ustc.edu.cn/google-containers/"
          ]
        [plugins.cri.registry.mirrors."quay.io"]
          endpoint = [
            "https://quay.mirrors.ustc.edu.cn"
          ]
    [plugins.cri.x509_key_pair_streaming]
      tls_cert_file = ""
      tls_key_file = ""
  [plugins.diff-service]
    default = ["walking"]
  [plugins.linux]
    shim = "containerd-shim"
    runtime = "runc"
    runtime_root = ""
    no_shim = false
    shim_debug = false
  [plugins.opt]
    path = "/opt/containerd"
  [plugins.restart]
    interval = "10s"
  [plugins.scheduler]
    pause_threshold = 0.02
    deletion_threshold = 0
    mutation_threshold = 100
    schedule_delay = "0s"
    startup_delay = "100ms"
--------------

第二十九节   containerd的介绍与安装_配置文件_20

3、设置containerd开机启动

systemctl enable containerd   #开机启动

systemctl start containerd      #启动

systemctl status containerd    #查看状态

第二十九节   containerd的介绍与安装_配置文件_21

ctr version

[root@lyc-80-28 containerd]# ctr version
Client:
  Version:  v1.7.21
  Revision: 472731909fa34bd7bc9c087e4c27943f9835f111
  Go version: go1.22.6

Server:
  Version:  v1.7.21
  Revision: 472731909fa34bd7bc9c087e4c27943f9835f111
  UUID: 2886d391-2655-4a30-b40e-4f2a69b40877

第二十九节   containerd的介绍与安装_配置文件_22

4、runc 的配置

由于二进制包中提供的runC默认需要系统中安装seccomp支持,需要单独安装,

且不同版本runC对seccomp版本要求一致,所以建议单独下载runC 二进制包进行安装,里面包含了seccomp模块支持。

下载Runc

离线包下载
https://github.com/opencontainers/runc/releases/download/v1.1.13/runc.amd64

直接下载
wget https://github.com/opencontainers/runc/releases/download/v1.1.13/runc.amd64
移动位置
mv  runc.amd64  /usr/sbin

为runc添加可执行权限
chmod +x /usr/sbin/runc.amd64

查看安装状态
runc  -version

第二十九节   containerd的介绍与安装_Docker_23

到此,containerd安装安装完毕!

到此,containerd安装安装完毕!









标签:容器,containerd,Containerd,第二十九,plugins,Docker,cri,安装
From: https://blog.51cto.com/u_14016919/11880669

相关文章

  • CentOS 安装 GDAL
    需要离线安装GDAL(venv)[root@VM-8-12-centos~]#pipinstallgdalLookinginindexes:http://mirrors.tencentyun.com/pypi/simpleCollectinggdal Downloadinghttp://mirrors.tencentyun.com/pypi/packages/bd/10/85c41cc7c520be9cf755f5862e8c6c8b0c91c8987cb1c706f7092......
  • 使用docker安装mysql
    安装Docker1、Docker教程地址:https://www.runoob.com/docker/centos-docker.install.html2、安装docker命令:yuminstalldocker-io3、启动docker命令:servicedockerstart4、查看docker是否启动成功命令:ps-ef|grepdocker使用docker安装mysql1、查询mysql命令:docke......
  • 一个linux服务器安装多个java版本,如何选择指定的 java版本去执行
    linux中有时候可能你由于不同的项目需要使用不同版本的javajdk部署,你就需要在你的linux服务中安装很多个版本的javajdk,那么在linux中如何安装和使用不同版本的javajdk呢?1.安装第一个javajdk版本:到java官网下载一个javajdk版本,并解压,然后配置环境变量。javajdk地址:wge......
  • Adobe Photoshop (ps2024)软件win/mac下载安装
    一、软件简介1.1产品背景AdobePhotoshop(简称PS)是Adobe公司旗下最为著名的图像处理软件之一,自问世以来,一直受到广大平面设计人员、摄影师、艺术家及电脑美术爱好者的青睐。Photoshop以其强大的图像扫描、编辑修改、图像制作、广告创意及图像输入输出功能而闻名,是图形图像处......
  • Adobe Premiere Pro(PR2024)软件下载安装win/mac
    一、软件概述1.1简介AdobePremierePro(简称PR)是Adobe公司开发的一款专业视频编辑软件,广泛应用于电影、电视、广告、社交媒体内容的后期制作中。它以其强大的编辑功能、高效的工作流程和广泛的兼容性而闻名,支持从高清到4K甚至更高分辨率的视频编辑。1.2主要特点高效编辑......
  • Adobe Photoshop(PS2024)软件win/mac下载安装
    一、软件概述1.软件背景AdobePhotoshop(简称PS)是AdobeSystems公司开发并发行的一款强大的图像处理软件,自1990年首次发布以来,便迅速成为数字图像处理和图形设计的行业标准。Photoshop不仅支持图像扫描、编辑修改、图像制作、广告创意,还集图像输入与输出于一体,是平面设计师、......
  • 专业视频编辑软件Adobe Premiere Pro(PR2024)win/mac软件安装下载
    一、软件概述1.1简介AdobePremierePro(简称PR)是Adobe公司开发的一款专业视频编辑软件,广泛应用于电影、电视、广告、网络视频等领域。它提供了强大的视频剪辑、调色、音频处理、效果添加及多轨编辑等功能,能够满足从初学者到专业影视制作人员的不同需求。1.2主要特点高性......
  • 三维建模动画设计C4D mac软件下载_绿色安装包+安装步骤
    我们目前生活在一个抛弃平面化设计风格向复杂的立体、运动效果转变的世界。如此,你需要一款始终能针对市场需求调整的软件,这就是CINEMA4D能带给你的。如果你正在准备为你的个人或企业设计一个站点,那么你必须考虑使用CINEMA4D来创造令人惊艳的官网效果。这里有着各种反射和......
  • pip install gdal 在Windows系统上安装gdal
     django.core.exceptions.ImproperlyConfigured:CouldnotfindtheGDALlibrary(tried"gdal302","gdal301","gdal300","gdal204","gdal203","gdal202","gdal201","gdal20").Is......
  • [kubernetes]使用kubeadm和containerd部署kubernetes
    前言因宿主机内核版本限制和垂直伸缩特性的需要,安装的k8s版本为1.25,runtime为containerd,cni为calico。containerd、kubeadm、kubelet也可以用包管理器来安装,因为不想配repo,也不想校验repo版有哪些区别,所以这几个都是用原生二进制方式安装的。环境信息IPHostnameOSVersio......