containerd基本使用命令
一、containerd简介
官 方 文 档 : https://containerd.io 在 2016 年 12 月 14 日,Docker 公司宣布将containerd 从 Docker 中分离,由开源社区独立发展和运营。Containerd 完全可以单独运行并管理容器,而 Containerd 的主要职责是镜像管理和容器执行。同时,Containerd 提供了 containerd-shim 接口封装层,
向下继续对接 runC 项目,使得容器引擎 Docker Daemon 可以独立升级。 Containerd 可以在宿主机中管理完整的容器生命周期:容器镜像的传输和存储、容器的执行和管理、存储和网络等。总结一下,它主要负责干以下事情:
• 管理容器的生命周期(从创建容器到销毁容器)
• 拉取/推送容器镜像
• 存储管理(管理镜像及容器数据的存储)
• 调用 runC 运行容器(与 runC 等容器运行时交互)
• 管理容器网络接口及网络 1.docker与containerd之间的关系
Docker 包含 Containerd,Containerd 专注于运行时的容器管理,而 Docker 除了容器管理之外,还可以完成镜像构建之类的功能。
Containerd 提供的 API 偏底层,不是给普通用户直接用的,容器编排的开发者才需要Containerd。 2.Containerd 在容器生态中扮演的角色
Containerd 并不是直接面向最终用户的,而是主要用于集成到更上层的系统里,比如 Kubernetes等容器编排系统。
Containerd 以 daemon 的形式运行在系统上,通过 unix domain socket 暴露底层的 grpc API,上层系统可以通过这些 API 管理机器上的容器.
containerd不包含runc,但是运行容器需要runc
cri-container不包含cni,但是运行容器也需要cni plugin
cri-container-cni包含runc,包含cni。需要解压到根目录下
K8S 为什么要放弃使用 Docker 作为容器运行时,而使用 containerd 呢?
Docker,Kubernetes 等工具来运行一个容器时会调用容器运行时(CRI),比如 containerd,CRI- O,通过容器运行时来完成容器的创建、运行、销毁等实际工作,Docker 使用的是 containerd 作为其运行时;Kubernetes 支持 docker(
在 k8s1.24 版本之前用,1.24 开始废弃了)、containerd, CRI-O 等多种容器运行时,这些容器运行时都遵循了 OCI 规范,并通过 runc 来实现与操作系统内核交互来完成容器的创建和运行 备注:CRI
CRI 是一个插件接口,它使 kubelet 能够使用各种容器运行时,你需要在集群中的每个节点上都有一个可以正常工作的容器运行时, 这样 kubelet 能启动 Pod 及其容器。容器运行时接口(CRI)是kubelet 和容器运行时之间通信的主要协议。 OCI:
OCI, Open Container Initiative ,是一个轻量级,开放的治理结构(项目),在 Linux 基金会的支持下成立,致力于围绕容器格式和运行时创建开放的行业标准。 OCI 项目由 Docker,CoreOS(后来被 Red Hat 收购了,相应的席位被 Red Hat 继承)和容器行业
中的其他领导者在 2015 年 6 月的时候启动。 k8s使用containerd具体原因:
如果你使用 Docker 作为 K8S 容器运行时的话,kubelet 需要先要通过 dockershim 去调用 Docker, 再通过 Docker 去调用containerd。
如果你使用 containerd 作为K8S 容器运行时的话, kubelet 可以直接调用 containerd。
使用 containerd 不仅性能提高了(调用链变短了),而且资源占用也会变小(Docker 不是一个纯粹的容器运行时,具有大量其他功能)。 调用链
Docker 作为 k8s 容器运行时,调用关系如下:
kubelet --> docker shim (在 kubelet 进程中) --> dockerd --> containerd Containerd 作为 k8s 容器运行时,调用关系如下:
kubelet --> cri plugin(在 containerd 进程中) --> containerd
二、containerd安装
# 1.安装源和依赖软件包(与docker没区别)
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum makecache fast # 2.安装containerd
yum install containerd -y
containerd --version # 查看containerd版本 # 3.启动containerd
systemctl start containerd && systemctl enable containerd && systemctl status containerd # 4.修改contianerd配置文件,配置镜像仓库加速地址
# 直接生产默认配置文件:containerd config default > /etc/containerd/config.toml
vim /etc/containerd/config.toml
[plugins]
[plugins.cri]
[plugins."io.containerd.grpc.v1.cri"]
# 将镜像下载地址改为阿里云地址
sandbox_image = "registry.cn- hangzhou.aliyuncs.com/google_containers/pause:3.6" ###自有镜像源配置
[plugins.cri.registry]
[plugins.cri.registry.mirrors]
[plugins.cri.registry.mirrors."docker.io"]
endpoint = ["https://pft7f97f.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn"]
[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"
] systemctl daemon-reload && systemctl restart containerd && systemctl status containerd
# 5.开启包转发功能和修改内核参数
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1 参数生效:sysctl -p
查看: lsmod | grep br_netfilter
2.containerd设置私有镜像仓库
#1. 找到.registry.configs增加以下内容
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = ""
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor.test.com:6443"]
endpoint = ["https://harbor.test.com:6443"]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.test.com:6443".tls]
insecure_skip_verify = true
[plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.test.com:6443".auth]
username = "name"
password = "pass"
systemctl restart containerd
最好不要使用别的端口了直接80快速方便
测试:crictl pull harbor.test.com:6443/app:v1
# 拉取镜像命令
ctr images pull harbor.test.com:6443/tools/centos:centos7.9.2009 --skip-verify 或者
ctr images pull harbor.test.com:6443/tools/centos:centos7.9.2009 --skip-verify --user=admin:harbor123
3.containerd镜像操作
命令介绍:
ctr:是containerd本身的CLI
crictl :是Kubernetes社区定义的专门CLI工具 1.查看本地镜像列表
ctr images list 或者 crictl images
查看导入的镜像
ctr images ls 列表名称:
REF TYPE DIGEST SIZE PLATFORMS LABELS 2.下载镜像命令
ctr images pull docker.io/rancher/mirrored-pause # 3.上传命令:打标签
ctr images tag docker.io/docker/alpine:latest host/test/alping:v1
或
ctr i tag docker.io/docker/alpine:latest host/test/alping:v1
ctr images pull host/test/alping:v1
# 4.导入/导出本地镜像
ctr images import app.tar
ctr images exporter
[root@node1 ~]# ctr i ls -q
docker.io/library/busybox:1.28
docker.io/library/tomcat:8.5-jre8-alpine # 导出
[root@node1 ~]# 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 或 ctr i rm docker.io/library/busybox:1.28
docker.io/library/busybox:1.28 # 导入
[root@node1 ~]# ctr images import busybox-1.28.tar.gz
unpacking docker.io/library/busybox:1.28 (sha256:585093da3a716161ec2b2595011051a90d2f089bc2a25b4a34a18e2cf542527c)...done # 查看容器名称列表
[root@node1 ~]# ctr i ls -q
docker.io/library/busybox:1.28
docker.io/library/tomcat:8.5-jre8-alpine
# 5.显示运行的容器列表
crictl ps # 6.删除本地镜像
ctr images ls
crictl rmi # 没生效可以使用下面这个
ctr i rm REF名称
# 7. 查看容器资源情况
crictl stats
# 8.登录容器平台
crictl exec
# 9.容器启动和停止
crictl start/stop
# 10.查看容器日志
crictl logs
[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 locally
export export images
import import images
list, ls list images known to containerd
mount mount an image to a target path
unmount unmount the image from the target
pull pull an image from a remote
push push an image to a remote
delete, del, remove, rm remove one or more images by reference
tag tag an image
label set and clear labels for an image
convert convert an image
11.查看containerd默认命名空间
[root@moban containerd]# ctr namespace ls
NAME LABELS
default
moby
ctr 有命名空间 namespace 来指定类似于工作空间的隔离区域。使用方法 ctr -n default images ls来查看 default 命名空间的镜像,不加 -n 参数,默认也是使用 default 的命名空间。 12.查看默认名称空间下镜像
[root@moban containerd]# ctr -n=default images ls
REF TYPE DIGEST SIZE PLATFORMS LABELS
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 -
4.基于containerd运行容器
#基于 containerd 运行一个容器
这里要解释一个概念 containers 和 task ,在 docker 里面 container 概念被弱化 ,将 containers 和 task 整合在一起,基于 docker run 可以运行容器。
ctr 中 containers 是镜像实例化的一个虚拟环境,提供一个磁盘,模拟空间,就好比你电脑处于关机状态一样。
ctr 中 tasks 是将容器运行起来,电脑开机了 ,初始化进程等 ,task 就是的这么个形式。 [root@moban containerd]# ctr image pull docker.io/library/busybox:latest # 运行容器
[root@moban containerd]# ctr run -d docker.io/library/busybox:latest busybox-v1 # 查看容器在宿主机的PID
[root@moban containerd]# ctr task ls
TASK PID STATUS
busybox-v1 3914 RUNNING # 进入容器
[root@moban containerd]# ctr task exec --exec-id 3914 -t busybox-v1 sh
/ # # 删除容器
# 可以先停止容器再删除
[root@moban containerd]# ctr task kill --signal 9 busybox-v1
[root@moban containerd]# ctr task ls
TASK PID STATUS
busybox-v1 4233 STOPPED
# 直接删除
[root@moban containerd]# ctr task rm -f busybox-v1
WARN[0000] task busybox-v1 exit with non-zero exit code 137
# 容器运行停止
[root@moban containerd]# ctr task ls
TASK PID STATUS
# 查看
[root@moban containerd]# ctr c ls
CONTAINER IMAGE RUNTIME
busybox-v1 docker.io/library/busybox:latest io.containerd.runc.v2
# 删除
[root@moban containerd]# ctr c rm busybox-v1
5.上传镜像
# 镜像拉取需要加上参数--all-platform,否则上传时候会出现not found报错
ctr images pull --all-platforms harbor.test.com:6443/tools/busybox:latest # 1.标签
[root@moban containerd]# ctr images tag docker.io/library/busybox:latest harbor96.9you.com:6443/tools/busybox:v1
harbor96.9you.com:6443/tools/busybox:v1 # 上传
[root@moban containerd]# ctr images push harbor.test.com:6443/tools/busybox:v1 --user=admin:harbor123 ctr images push harbor.test.com:6443/tools/busybox:v1 --skip-verify
ctr images push harbor.test.com:6443/tools/busybox:v1 --skip-verify --user=admin:harbor123
6.镜像加速器第二种添加方式
# 修改/etc/containerd/config.toml [plugins."io.containerd.grpc.v1.cri".registry]
config_path = "/etc/containerd/certs.d" cd /etc/containerd/certs.d
cat hosts.toml
[host."https://vh3bm52y.mirror.aliyuncs.com",host."https://registry.docker-cn.com"]
capabilities = ["pull"] systemctl restart containerd
7.docker与containerd命令比对
containerd基本使用命令的更多相关文章
- containerd与kubernetes集成
kubernetes集群三步安装 概念介绍 cri (Container runtime interface) cri is a containerd plugin implementation of ...
- containerd简述
containerd是容器虚拟化技术,从docker中剥离出来,形成开放容器接口(OCI)标准的一部分. docker对容器的管理和操作基本都是通过containerd完成的.Containerd 是 ...
- Centos8安装Docker提示:package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
Centos8安装Docker提示:package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but ...
- 实操|如何将 Containerd 用作 Kubernetes runtime
日前专为开发者提供技术分享的又拍云 OpenTalk 公开课邀请了网易有道资深运维开发工程师张晋涛,直播分享<Containerd 上手实践 >,详细介绍 Containerd 的发展历程 ...
- k8s入坑之路(3)containerd容器
containerd概念: containerd主要是namebases与k8s docker不同 存放路径不一致 没有默认仓库 容器运行时: 2020年未kubernetes宣布不再支持docker ...
- containerd与kubernetes集成部署
概念介绍 cri (Container runtime interface) cri is a containerd plugin implementation of Kubernetes conta ...
- Kubernetes将弃用Docker!与 containerd容器引擎
时间戳:2022-06-07 20:32:19 星期二 撰写文档参考:(阿良-腾讯课堂)Kubernetes将弃用Docker 参考博客k8s入坑之路(3)containerd容器 container ...
- Containerd教程
文档是从B站有关视频上对应找到的,具体视频地址是:https://www.bilibili.com/video/BV1XL4y1F7QB?p=21&spm_id_from=333.880.my ...
- containerd 卸载
一.创建脚本 cat > remove.sh <<EOF #!/bin/bash # 删除contained命令及配置 rm -rf /usr/local/bin/ rm -rf / ...
- kubernetes:v1.25 + containerd
由于kubernets从v1.24开始停止支持dockershim,kubernets不再支持通过docker来创建和管理容器.本文记录安装kubernetes v1.25 + containerd ...
随机推荐
- vue中类tabs左右滑动
效果图 思路 给定一个变量用来记录滚动了几列,每滚动一次加1滚动一列,监听页面滚动父级元素宽度改变,重新设置滚动的距离(放在计算属性中让其自动计算) <template> <div ...
- 初学STM32 CAN通信(一)
# 初学STM32 CAN通信(一) 1. CAN协议简介 CAN是控制器局域网络(Controller Area Network)的简称, 是国际上应用最广泛的现场总线之一 ,近年来,它具有的高 ...
- ABC326 A-F
vp on 2023.11.12 A.B:略. C:双指针或者二分. D:暴搜+剪枝,每一行的计算量最多是 $60$. E:期望相关.计算每个点的概率,乘上这个点的权值,并求和即可. F:meet i ...
- #网络流,dinic,最小割#洛谷 3227 [HNOI2013]切糕
题目传送门 题目大意 \(P\)行\(Q\)列的楼房高度均为\(R\),每一层改造要花费一定的金钱, 每个楼房都要挑选有且仅有一层进行改造,并且相邻两个楼房改造位置的相对高度不能超过\(D\), 问最 ...
- Jetty的http2模块
启用http2模块,执行如下命令: java -jar $JETTY_HOME/start.jar --add-modules=http2 命令的输出,如下: INFO : http2 initial ...
- Matplotlib绘图设置---图形剖析和构建
图形剖析和构建 Matplotlib的目标对象是用Python对象表示任意图形元素.Figure对象可以看作盛放图形元素的包围盒,其他的Matplotlib对象(Axes.Title.Grid.Spi ...
- 【FAQ】调用应用内支付SDK时报错,如何用tag对问题进行排查和分析
华为应用内支付服务(In-App Purchases,IAP)为开发者提供便捷的应用内支付体验和简便的接入流程.开发者的应用集成IAP SDK后,调用IAP SDK接口,启动IAP收银台,即可实现应用 ...
- Qt5自带的日志功能,将日志输出到文件
#include "QtWidgetsApplication1.h" #include <QtWidgets/QApplication> #include <Qt ...
- 【6】Spring JavaConfig和常见Annotation
Java 5 的推出,加上当年基于纯 Java Annotation 的依赖注入框架 Guice 的出现,使得 Spring 框架及其社区也"顺应民意",推出并持续完善了基于 Ja ...
- 重新点亮linux 命令树————网络配置的查看[十一三]
前言 简单整理一下网络配置. 正文 通过ifconfig 查看. 这个就是ip地址. 网卡mac地址. 还有一块信息非常重要: 这个io开头的信息,这里面就是我们127.0.0.1的信息. 那么就来演 ...