containerd 基本使用

2024-02-13 01:50
文章标签 使用 基本 containerd

本文主要是介绍containerd 基本使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于nerdctl + buildkitd+containerd构建容器镜像

版本

  • ctr containerd.io 1.6.18
  • crictl version v1.26.0
  • buildkit-v0.11.4.linux-amd64.tar.gz
  • nerdctl version 1.2.1
Containerd和Docker在命令使用上的一些区别

在这里插入图片描述

通过buildkit工具来构建containerd 镜像

链接:https://blog.csdn.net/omaidb/article/details/128673207
https://www.cnblogs.com/gdcplasf/p/16438612.html

下载安装 buildkit
https://github.com/moby/buildkit/releases创建buildkit对应目录,解压buildkit 安装包到指定路径
[root@k8s-master /]# mkdir -p /usr/local/containerd/
[root@k8s-master /]# tar -xvf buildkit-v0.11.0.linux-amd64.tar.gz -C /usr/local/containerd/cp /usr/local/containerd/bin/buildctld /usr/local/bin  #复制buildkitd 到 /usr/binbuildctl -version 验证安装-----------------------------------
# 编写 buildkit 套接字文件
cat >> /lib/systemd/system/buildkitd.socket << EOF
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit[Socket]
ListenStream=%t/buildkit/buildkitd.sock[Install]
WantedBy=sockets.targetEOF
-----------------------------------三、安装buildkitd 服务
cp /usr/local/containerd/bin/buildkitd /usr/local/bin/#配置 systemd 服务,编写systemd unit文件
[root@k8s-master /]# vi /usr/lib/systemd/system/buildkit.service
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit[Service]
ExecStart=/usr/local/containerd/bin/buildkitd --oci-worker=false --containerd-worker=true[Install]
WantedBy=multi-user.target#启用buildkit.service并设置开机自动运行
systemctl daemon-reload # 重载服务
systemctl enable --now buildkit.service # 启用buildkit.service 并设置开机自动运行
systemctl daemon-reload && systemctl restart buildkitd && systemctl enable buildkitd
systemctl status buildkit # 查看运行状态

nerdctl

Containerd 官方推出了一个新的 CLI 叫 nerdctl。Containerd高级命令行工具nerdctl。
nerdctl 的目标并不是单纯地复制 docker 的功能,它还实现了docker 不具备的功能,例如延迟拉取镜像(lazy-pulling)、镜像加密(imgcrypt)等。

下载地址 https://developer.aliyun.com/article/1094835

# 下载nerdctl到指定目录
## -c 断点续传, -P 下载到指定目录
wget -c -P /usr/local/ https://github.com/containerd/nerdctl/releases/download/v1.2.1/nerdctl-1.2.1-linux-amd64.tar.gz
# 创建nerdctl对应bin目录
mkdir -p /usr/local/containerd/bin
# 解压nerdctl到指定路径
tar -xvf nerdctl-1.1.0-linux-amd64.tar.gz -C /usr/local/containerd/bin/
# 创建软链接
ln -s /usr/local/containerd/bin/nerdctl /usr/local/bin/nerdctl
# 查看是否安装成功
which nerdctl
------------------------------------------------------------
[root@k8s-master bin]# nerdctl --version
nerdctl version 1.2.1[root@k8s-master bin]# nerdctl version
Client:Version:	v1.2.1OS/Arch:	linux/amd64Git commit:	a0bbfd75ba92bcb11ac6059bf4f6f4e50c6da0b8buildctl:Version:	v0.11.4GitCommit:	3abd1ef0c195cdc078d1657cb50f62a2cdc26f8fServer:containerd:Version:	1.6.18GitCommit:	2456e983eb9e37e47538f59ea18f2043c9a73640runc:Version:	1.1.4GitCommit:	v1.1.4-0-g5fd4c4d
------------------------------------------------------------1、容器管理nerdctl run # 运行容器
nerdctl exec # 进入容器
nerdctl ps #列出容器
nerdctl inspect #获取容器的详细信息。
nerdctl logs #获取容器日志
nerdctl stop #停止容器
nerdctl rm #删除容器3、镜像管理
nerdctl images #镜像列表
nerdctl -n k8s.io image lsnerdctl pull #拉取镜像
nerdctl push #推送镜像
nerdctl tag #镜像标签
nerdctl save #导出镜像
nerdctl rmi #删除镜像
nerdctl load #导入镜像#镜像构建(安装buildkit)
nerdctl build -t 构建目录#从 Dockerfile 构建镜像
nerdctl build #其实是使用了 buildctl 命令来构建镜像# 构建镜像时不使用缓存(默认值:false)
nerdctl build --no-cache nerdctl ns ls 查看名字空间,这和K8s的名字空间不是一回事,其中default就是containerd的默认名字空间,http://k8s.io是K8s的名字空间#查看网络
[root@k8s-master /]# nerdctl network ls
NETWORK ID    NAME    FILEcbr0    /etc/cni/net.d/10-flannel.confcbr0    /etc/cni/net.d/10-flannel.conflisthost    none 

containerd的本地CLI工具ctr命令

命令介绍:
ctr:是containerd本身的CLI
crictl :是Kubernetes社区定义的专门CLI工具

containerd安装

yum list | grep containerd

容器运行时containerd安装配置
https://blog.csdn.net/rendongxingzhe/article/details/124595415

ctr 命令

ctr -v 和 crictl -v
[root@k8s-master ~]# ctr -v
ctr containerd.io 1.6.18[root@k8s-master ~]# containerd -v
containerd containerd.io 1.6.18 2456e983eb9e37e47538f59ea18f2043c9a73640#crictl -v 输出的是当前 k8s 的版本,可以认为 crictl 是用于 k8s 的。
[root@k8s-master containerd]# crictl -v
crictl version v1.26.0

镜像操作

ctr images list  或者 crictl images  #1.查看本地镜像列表
ctr images ls  查看导入的镜像#拉取镜像
ctr image  pull docker.io/jenkins/jenkins:lts# 6.删除本地镜像
ctr images ls
ctr i ls -q # 查看容器名称列表
# 导出
ctr images export busybox-1.28.tar.gz docker.io/library/busybox:1.28
# 删除
[root@node1 ~]# ctr images rm docker.io/library/busybox:1.28
docker.io/library/busybox:1.28
# 导入
[root@node1 ~]# ctr images import busybox-1.28.tar.gz [root@master containerd]# ctr image --help
NAME:ctr images - manage images
USAGE:ctr images command [command options] [arguments...]
COMMANDS:check                    check existing images to ensure all content is available locallyexport                   export imagesimport                   import imageslist, ls                 list images known to containerdmount                    mount an image to a target pathunmount                  unmount the image from the targetpull                     pull an image from a remotepush                     push an image to a remotedelete, del, remove, rm  remove one or more images by referencetag                      tag an imagelabel                    set and clear labels for an imageconvert                  convert an image11.查看containerd默认命名空间 
[root@k8s-master manifests]# ctr namespace ls
NAME   LABELS 
k8s.io        
mobyctr 用命名空间 namespace 来指定类似于工作空间的隔离区域。使用方法 ctr -n default images ls来查看 default 命名空间的镜像,不加 -n 参数,默认也是使用 default 的命名空间。12.查看默认名称空间下镜像
REF                                                                           TYPE                                                      DIGEST                                                                  SIZE      PLATFORMS                                                                        LABELS                          
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.26.1        application/vnd.docker.distribution.manifest.list.v2+json sha256:85f705e7d98158a67432c53885b0d470c673b0fad3693440b45d07efebcda1c3 20.5 MiB  linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x                   io.cri-containerd.image=managed
registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6                 application/vnd.docker.distribution.manifest.list.v2+json sha256:3d380ca8864549e74af4b29c10f9cb0956236dfb01c40ca076fb6c37253234db 294.7 KiB linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,windows/amd64     io.cri-containerd.image=managed
4.运行容器,基于containerd

https://www.cnblogs.com/yangmeichong/p/16661444.html

# 查看容器在宿主机的PID
[root@moban containerd]# ctr task ls
TASK          PID     STATUS    
busybox-v1    3914    RUNNING
# 删除容器
# 先停止容器再删除
[root@moban containerd]# ctr task kill --signal 9 jenkins
[root@moban containerd]# ctr task ls
TASK PID STATUS
busybox-v1 4233 STOPPED# 删除容器
ctr task rm -f jenkins

三、crictl 命令

安装 k8s 后,命令行才会有 crictl 命令。


[root@k8s-master containerd]# crictl ps  显示运行的容器列表CONTAINER           IMAGE               CREATED             STATE               NAME                      ATTEMPT             POD ID              POD
534cd8cf47936       e9c08e11b07f6       7 days ago          Running             kube-controller-manager   0                   cd0b94604efe5       kube-controller-manager-k8s-master
29f4d8e77d817       fce326961ae2d       7 days ago          Running             etcd                      0                   1590d35e04aff       etcd-k8s-master
af18b87b9297c       655493523f607       7 days ago          Running             kube-scheduler            0                   20f08e8387045       kube-scheduler-k8s-master
6b71a949ca15f       deb04688c4a35       7 days ago          Running             kube-apiserver            0                   c2c699bdd5bc2       kube-apiserver-k8s-master关于 crictl ps 报错 runtime connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]crictl依次查找容器运行时,当查找第一个unix:///var/run/dockershim.sock 没有找到,需要手动指定当前k8s的容器运行时,例如:
kubernetes 1.24+ 之后,如果dockershim已经变成了cri-docker,所以你需要执行:
crictl config runtime-endpoint unix:///var/run/cri-dockerd.sock如果你的容器运行时,已经换成了containerd,则执行:
crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock另外:生成的配置在cat /etc/crictl.yaml,可以随时修改。

a

# 5.显示运行的容器列表
crictl ps 
# 7. 查看容器资源情况
crictl stats 
# 8.登录容器平台
crictl exec 
# 9.容器启动和停止
crictl start/stop
# 10.查看容器日志
crictl logs 

containerd的组件

containerd提供包括容器的运行、测试、发布和接口调用的工具。

在这里插入图片描述

containerd和k8s的关系

kubelet通过grpc协议和containerd交互。k8s规定了这个交互的规范,这就是大名鼎鼎的CRI。这里我们理解CRI为一个k8s定义的接口。它定义在 k8s.io/cri-api 中。只要实现了这套规范,就可以成为k8s的容器运行时。

Containerd 创建一个容器时会创建一个containerd-shim进程,然后container-shim进程创建业务进程。
对于k8s中的pod,可以通过containerd创建一个pause 容器,然后创建业务容器,这两个容器共享特定的namespace即可

docker-containerd的作用

1.创建容器记录的metadata
2.请求 containerd 的 task 模块,task 模块会在 runtime 中创建 task 实例,分别会加入 task list, 监控 cgroup 等操作
3.每个 task 实例则调用 shim 去创建container

k8s使用containerd具体原因:

使用 containerd 作为K8S 容器运行时, kubelet 可以直接调用 containerd。(调用链变短了)

如果你使用 Docker作为 K8S 容器运行时,kubelet 需先通过 dockershim 去调用 Docker,再通过 Docker 去调用containerd。
如果你使用 containerd 作为K8S 容器运行时的话, kubelet 可以直接调用 containerd。
使用 containerd 不仅性能提高了(调用链变短了),而且资源占用也会变小(Docker 不是一个纯粹的容器运行时,具有大量其他功能)。调用链
Docker 作为 k8s 容器运行时,调用关系如下:
kubelet -> docker shim(在 kubelet 进程中)-> dockerd -> containerdContainerd 作为 k8s 容器运行时,调用关系如下:
kubelet --> cri plugin(在 containerd 进程中) --> containerd
使用 containerd 作为K8S 容器运行时, kubelet 可以直接调用 containerd。
Containerd的运行优势
  • container和docker不同,containerd重点是继承在大规模的系统中,例如kubernetes,而不是面向开发者,让开发者使用,更多的是容器运行时的概念,承载容器运行。
  • 官方提供sdk,可以在工程中实现镜像、容器得全部操作。
  • 从k8s的角度看,可以选择 containerd 或 docker 作为运行时组件:其中 containerd 调用链更短,组件更少,更稳定,占用节点资源更少。
  • containerd 相比于docker 多了 namespace 概念,每个 image 和 container 都会在各自的namespace下可见。
Containerd 启动流程
Docker和 Containerd 的区别

Docker 包含 Containerd,Containerd 专注于运行时的容器管理,而 Docker 除了容器管理之外,还可以完成镜像构建之类的功能。
Containerd 提供的 API 偏底层,不是给普通用户直接用的,容器编排的开发者才需要Containerd。

containerd 相比于docker , 多了namespace概念, 每个image和container 都会在各自的namespace下可见, 目前k8s会使用k8s.io 作为命名空间

在这里插入图片描述

Containerd常用命令
1.查看容器运行状态# 1.ctr
ctr container ls
#指定命名空间
ctr --namespace=k8s.io container ls# 2.crictl
crictl ps# 3.nerdctl
nerdctl ps
2.查看镜像# 1.ctr
ctr image ls
#指定命名空间
ctr --namespace=k8s.io image ls# 2.crictl
crictl image# 3.nerdctl
nerdctl image3.查看容器日志
#ctr 没有相关命令
crictl logs
nerdctl logs4.修改镜像标签
ctr image tag
# crictl 没有相关命令
nerdctl tag5.导出镜像
ctr image export
crictl 没有相关命令
nerdctl save6.导入镜像
ctr image import
# crictl 没有相关命令
nerdctl load7.删除镜像
ctr image rm
crictl rmi
nerdctl rmi8.拉取镜像
ctr image pull
crictl pull
nerdctl pull9.推送镜像
ctr image push# crictl 没有相关命令nerdctl push

这篇关于containerd 基本使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/704160

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联