首页 > 其他分享 >containerd服务相关

containerd服务相关

时间:2023-06-19 15:25:16浏览次数:35  
标签:容器 服务 Kubernetes containerd Containerd 相关 Docker root

一、Containerd概念

在2016年12月14日,Docker 公司宣布将 containerd 从 Docker 分离,由开源社区独立发展和运营。

Containerd 完全可以单独运行并管理容器,而 Containerd 的主要职责是镜像管理和容器执行。
Containerd 提供了 containerd-shim 接口封装层,向下继续对接 runC项目,使得容器引擎 Docker Daemon 可以独立升级。

Containerd 可以在宿主机中管理完整的容器生命周期:容器镜像的传输和存储、容器的执行和管理、存储和网络等。主要负责以下事情:

  • 容器生命周期管理:容器的创建、启动、停止、删除、暂停、恢复、重启、查看、执行等
  • 拉取和推送容器镜像
  • 存储管理:容器的镜像和容器数据的存储
  • 调用 runC 运行容器
  • 管理容器网络接口及网络

1、Containerd 和 Docker 的关系

Docker 包含 Containerd,但是 Containerd 不包含 Docker。Docker 依赖于 Containerd,但是 Containerd 不依赖于 Docker。Docker 除了容器管理之外,还可以完成镜像构建之类的功能。

Containerd 提供的API偏底层,不是给普通用户直接用的,容器编排的开发者才需要 Containerd。

2、Containerd 在容器生态中扮演的角色

Containerd 是一个守护进程,它可以管理容器的生命周期,但是它不会自己创建容器,而是通过和其他工具的配合来实现容器的创建和管理。比如,Docker 通过 Containerd 来管理容器的生命周期,但是 Docker 会自己创建容器。

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

Containerd 以 daemon 的形式运行在系统上,通过 unix domain socket 暴露底层的 grpc API,供上层的工具调用。

二、Containerd架构

三、Kubernetes 与 Containerd

Kubernetes 与 Containerd 的关系如下图所示:(待补充)

1、Kubernetes 与 Docker

Kubernetes 1.20 版本开始,支持使用 Containerd 作为容器运行时。在 Kubernetes 1.20 之前,Kubernetes 一直使用 Docker 作为容器运行时。

Kubernetes 1.24 版本将移除对 Docker 的支持,只支持 Containerd。

2、CRI(Container Runtime Interface)

容器运行时接口(CRI) 是 Kubernetes 为了支持多种容器运行时而定义的一套接口规范,它定义了容器运行时必须实现的接口,包括镜像管理、容器生命周期管理、容器资源管理等。

CRI 是一个插件接口,它使 kubelet 能够使用各种容器运行时,需要在集群的每个节点上都有一个可以正常工作的容器运行时,这样 kubelet 能启动 Pod 及其容器。容器运行时接口(CRI)是 kubelet 和容器运行时之间通讯的主要协议。

Kubernetes 通过 CRI 与容器运行时进行通信,而不是直接调用容器运行时的 API。这样,Kubernetes 就可以支持多种容器运行时,而不需要修改代码。

Kubernetes 1.5 版本引入了 CRI,但是当时只支持 Docker。Kubernetes 1.11 版本开始,支持使用 CRI 来管理容器(创建、运行、销毁等工作),而不是直接调用 Docker 的 API。

Kubernetes 1.20 版本开始,支持使用 Containerd 作为容器运行时。在 Kubernetes 1.20 之前,Kubernetes 一直使用 Docker 作为容器运行时。

3、OCI(Open Container Initiative)

OCI(开放容器倡议) 是一个开放的容器标准,它定义了容器的镜像格式和容器运行时。OCI 由 Linux 基金会维护,它的目标是为容器提供一个开放的标准。

OCI 项目由 Docker,CoreOS(后来被 Red Hat 收购),Mesosphere,Microsoft,IBM,Huawei,Alibaba 等公司在 2015 年 6 月发起,它的目标是为容器提供一个开放的标准。

OCI 项目包含两个子项目:runtime-specimage-specruntime-spec 定义了容器运行时的标准,image-spec 定义了容器镜像的标准。

使用containerd作为K8S容器运行时缘故:

  • 如果使用 Docker 作为 kubelet 容器运行时的话,kubelet 需要先通过 dockershim 去调用 Docker,再通过 Docker 去调用 containerd。
  • 如果使用 containerd 作为 kubelet 容器运行时的话,kubelet 可以直接调用 containerd,不需要经过 dockershim 和 Docker。
  • 使用 containerd 作为 kubelet 容器运行时,不仅性能提高了,而且资源占用也会变小。(Docker 不是一个纯粹的容器运行时,具有大量其他功能)

四、Containerd安装和配置

1、安装

安装 docker 可以自动安装 containerd,也可以以如下方式单独安装 containerd。

# 配置 docker-ce.repo的yum源
[root@af116724e217 yum.repos.d]# yum install yum-utils -y
[root@af116724e217 yum.repos.d]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror, ovl
adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

# 安装 containerd
[root@af116724e217 yum.repos.d]# yum install containerd -y
[root@af116724e217 yum.repos.d]# systemctl enable containerd
Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service, pointing to /usr/lib/systemd/system/containerd.service.
[root@af116724e217 yum.repos.d]# systemctl start containerd

2、配置

containerd 的配置文件是 /etc/containerd/config.toml,默认情况下,containerd 会使用默认配置,不需要修改配置文件。

如修改配置文件,需要重启 containerd 服务。

[root@af116724e217 yum.repos.d]# systemctl daemon-reload
[root@af116724e217 yum.repos.d]# systemctl restart containerd

五、Containerd使用

Containerd 的命令行工具是 ctr,它的功能非常强大,可以用来管理容器、镜像、快照、命名空间、任务、事件等。

[root@af116724e217 yum.repos.d]# ctr --help
NAME:
   ctr - 

containerd CLI

USAGE:
   ctr [global options] command [command options] [arguments...]

VERSION:
   1.6.21

DESCRIPTION:
   
ctr is an unsupported debug and administrative client for interacting
with the containerd daemon. Because it is unsupported, the commands,
options, and operations are not guaranteed to be backward compatible or
stable from release to release of the containerd project.

COMMANDS:
   plugins, plugin            provides information about containerd plugins
   version                    print the client and server versions
   containers, c, container   manage containers
   content                    manage content
   events, event              display containerd events
   images, image, i           manage images
   leases                     manage leases
   namespaces, namespace, ns  manage namespaces
   pprof                      provide golang pprof outputs for containerd
   run                        run a container
   snapshots, snapshot        manage snapshots
   tasks, t, task             manage tasks
   install                    install a new package
   oci                        OCI tools
   shim                       interact with a shim directly
   help, h                    Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --debug                      enable debug output in logs
   --address value, -a value    address for containerd's GRPC server (default: "/run/containerd/containerd.sock") [$CONTAINERD_ADDRESS]
   --timeout value              total timeout for ctr commands (default: 0s)
   --connect-timeout value      timeout for connecting to containerd (default: 0s)
   --namespace value, -n value  namespace to use with commands (default: "default") [$CONTAINERD_NAMESPACE]
   --help, -h                   show help
   --version, -v                print the version

1、查看命令

# 查看 containerd 版本
[root@master ~]# ctr version
Client:
  Version:  1.6.21
  Revision: 3dce8eb055cbb6872793272b4f20ed16117344f8
  Go version: go1.19.9

Server:
  Version:  1.6.21
  Revision: 3dce8eb055cbb6872793272b4f20ed16117344f8
  UUID: ddf93e04-2c24-43f8-a8ce-c51654614c67

# 查看 containerd 命名空间
[root@master ~]# ctr namespace ls
NAME   LABELS 
k8s.io        
moby

# 查看 containerd 事件
[root@master ~]# ctr events ls

# 查看 containerd 插件
[root@master ~]# ctr plugin ls
TYPE                                  ID                       PLATFORMS      STATUS    
io.containerd.content.v1              content                  -              ok        
io.containerd.snapshotter.v1          aufs                     linux/amd64    skip      
io.containerd.snapshotter.v1          btrfs                    linux/amd64    skip 

# 查看 containerd 任务
[root@master ~]# ctr task ls
TASK    PID    STATUS 

# 查看 containerd 镜像
[root@master ~]# ctr images ls
REF TYPE DIGEST SIZE PLATFORMS LABELS

# 查看 containerd 容器
[root@master ~]# ctr containers ls
CONTAINER    IMAGE    RUNTIME 

# 查看 k8s.io 命名空间下的容器
[root@master ~]# ctr  -n=k8s.io container ls
CONTAINER                                                           IMAGE                                                                      RUNTIME                  
01e87c7dbfbaec8fab12cf3e6b202f08e26706ca28f984312d329ffb583640b2    registry.aliyuncs.com/google_containers/pause:3.7                          io.containerd.runc.v2


# 查看 k8s.io 命名空间下的镜像
[root@master ~]# ctr  -n=k8s.io images ls
REF                                                                                                                                     TYPE                                                      DIGEST                                                                  SIZE      PLATFORMS                                                                        LABELS                          
10.104.43.110/springcloud/config:4                                                                                                      application/vnd.docker.distribution.manifest.v2+json      sha256:c208dcb447fbe05a0ae4598ea2b91d0606751d3da49148b710470ddc5956c353 138.9 MiB linux/amd64                                                                      io.cri-containerd.image=managed

标签:容器,服务,Kubernetes,containerd,Containerd,相关,Docker,root
From: https://www.cnblogs.com/xiugeng/p/17491227.html

相关文章

  • 有关Docker安装、使用的部分相关问题
    @LastUpdate:2022/10/31注:如需在容器内使用显卡,需要安装好NVIDIA显卡驱动、cuda、nvidia-docker[方法见下文]。0.运行环境Docker引擎支持在x86_64(或amd64),armhf,andarm64上运行.1.卸载旧版本dockersudoapt-getremovedockerdocker-enginedocker.iocontainerd......
  • 云服务器无法正常关机/重启的几种原因
    大家在使用个人电脑或服务器的时候经常会遇到无法正常关机/重启的情况,其中Windows系统比较常见。关于服务器无法正常关机/重启的情况,我们大致总结了几个常见的原因:1、系统文件中自动关机程序的缺陷。假如我们在“开始/运行”中输入命令“rundll32user.exe,exitwindows”看看能否正......
  • Oracle服务端和客户端版本补丁不一致造成Tuxedo应用程序出core案例
    这是一个CU**系统调用的查询天气预报的Tuxedo服务,OraclePro*C程序,连接的是Oracle10.2.0.4库,出现问题的现象是不定时的产生core,服务down,触发Tuxedo服务的自动重启机制,但一般MAXGEN配置是100,即1天内若重启100次后服务就不会自动重启了,只能人工干预,每次重启后会好一阵,且该服务已经由......
  • .Net 微服务之旅
    本系列文章从0开始搭建微服务,基于自己本地环境开发。本系列会一步步记录整个开发实战环境。不足之处,望各位多多指正,会不定期修改并更正到文章中。基础资源Windows10VisualStudio2022.Net7.0WSL2子系统UbuntuDockerGitLab&GitLabCI/CDNuget私有仓库......
  • 【salesforce技术积累】-APEX调用外部服务概念理解(包含外部站点设置)
    1.基本概念・salesforce中的「コールアウト」指的是salesforce作为客户端去调用其他的服务,「Webサービス」指的是salesforce作为服务器被其他客户端调用。(个人理解)下面这个网站是其他人的解释说明:Salesforce(他システムとの連携メモ)-Qiita打不开的小伙伴请继续看下面。。。......
  • Tuxedo服务无法启动的问题解决(涉及MP下tlisten和TLOG的报错)
    今天同事说有一个Tuxedo应用在做测试,但重启了机器和Tuxedo环境后,服务仍无法启动,这次的问题排查和处理比较典型,值得梳理一次。应用环境:OS:SunOS5.9Tuxedo:9.1,MP双机环境问题现象:由于服务不可用,之前有同事使用kill干掉了一些Tuxedo进程,但无法确定具体范围。重启了服务器和Tuxedo......
  • 香港服务器的优势
    互联网时代下的全球贸易以数据为根,网络为本。香港地理位置与当地政策得天独厚,吸引着大批站长们。下面就来讲一下香港服务器的优势有哪些。1、香港服务器网络设施完善作为数据中心,香港服务器在数据中心建设方面非常成熟规范,而且网络设备质量更高。各类网络设备专业完善的网路监控、......
  • 天翼云服务器上Wamp无法外网访问
    在天翼云主机上安装的Wamp默认是无法外网访问的需要改以下四个地方一、wamp在 httpd.conf中改允许外网访问二、wamp在 httpd.conf中改80端口改为81 (80端口需要备案)三、在天翼云安全组的 入方向规则中加入允许 Tcp 81端口 访问四、本地服务器的防火......
  • Windows服务器定时重启设置教程 103.216.155.x
    Windows系统的任务计划程序,可以添加计划任务,设置任务开始时间及执行的间隔,实现应用的自动执行。例如:实现定时重启、关机等常见的功能。如何使用参考以下步骤1、新建一个文本文件,将文件后缀改为bat,然后添加如下代码shutdown-r-f-t 0该命令的作用是立即强制重启机器。在文件中单......
  • Windows10搭建NFS服务
    1.下载haneWINNFSServerforWindows链接如下:https://www.hanewin.net/nfs-e.htm2.安装并且执行haneWINNFSServer安装完后,打开hanWin如下:进入Edit->Preferences进入Exports->Editexportsfile2.1修改配置文件添加一行配置如下:D:\ldc_res-name:nfs*(rw,sync......