K8s 弃用 Docker!一文介绍 containerd ctr、crictl 使用

containerd 是一个高级容器运行时,又名 容器管理器。简单来说,它是一个守护进程,在单个主机上管理完整的容器生命周期:创建、启动、停止容器、拉取和存储镜像、配置挂载、网络等。

containerd 旨在轻松嵌入到更大的系统中。Docker 在底层使用 containerd 来运行容器。Kubernetes 可以通过 CRI 使用 containerd 来管理单个节点上的容器。但是较小的项目也可以从与 containerd 的轻松集成中受益——例如,faasd 使用 containerd(我们需要更多的 d!)在独立服务器上启动一个服务。

但是,以编程方式使用 containerd 并不是唯一的选择。它还可以通过可用客户端之一从命令行使用。由此产生的容器 UX 可能不像 docker 客户端提供的那样全面和用户友好,但它仍然是有用的,例如,用于调试或学习目的。

如何在 ctr 中使用 containerd

ctr 是作为 containerd 项目的一部分提供的命令行客户端。如果您在机器上运行了 containerd,则 ctr 二进制文件很可能也在那里。

该 ctr 界面 与 Docker CLI 不兼容,乍一看,可能看起来不那么用户友好。显然,它的主要受众是测试守护进程的容器开发人员。但是,由于它是最接近实际 containerd API 的东西,因此它可以作为一种很好的探索手段——通过检查可用命令,您可以大致了解 containerd 可以做什么和不能做什么。

ctr 也非常适合学习的能力低级别的使用人员,因为 ctr + containerd 是更接近实际的容器比 docker + dockerd。

使用 ctr 处理容器镜像

拉取镜像,似乎是必需和完全合规的,但是你不能忽略注册表或标签部分:

$ ctr images pull docker.io/library/nginx:1.21
$ ctr images pull docker.io/kennethreitz/httpbin:latest
$ ctr images pull docker.io/kennethreitz/httpbin:latest
$ ctr images pull quay.io/quay/redis:latest

要列出本地镜像,可以使用:

$ ctr images ls

令人惊讶的是,containerd 不提供开箱即用的镜像构建支持。但是 containerd 经常被更高级别的工具用来构建镜像。

ctr 您可以导入使用 docker build 或其他 OCI 兼容软件构建的现有镜像,而不是使用构建镜像:

$ docker build -t my-app .
$ docker save -o my-app.tar my-app

$ ctr images import my-app.tar

使用 ctr,您还可以学习和探索下挂载镜像:

$ mkdir /tmp/httpbin
$ ctr images mount docker.io/kennethreitz/httpbin:latest /tmp/httpbin

$ ls -l /tmp/httpbin/
total 80
drwxr-xr-x 2 root root 4096 Oct 18  2018 bin
drwxr-xr-x 2 root root 4096 Apr 24  2018 boot
drwxr-xr-x 4 root root 4096 Oct 18  2018 dev
drwxr-xr-x 1 root root 4096 Oct 24  2018 etc
drwxr-xr-x 2 root root 4096 Apr 24  2018 home
drwxr-xr-x 3 root root 4096 Oct 24  2018 httpbin
...

$ ctr images unmount /tmp/httpbin

要使用删除镜像 ctr,请运行:

$ ctr images remove docker.io/library/nginx:1.21

使用 ctr 处理容器

你可以运行一个容器用ctr run image-ref container-id。例如:

$ ctr run --rm -t docker.io/library/debian:latest cont1

请注意,ctr 与用户友好地 docker run 为您生成唯一容器 ID 不同,您必须自己提供唯一容器 ID。该 ctr run 命令还只支持一些熟悉的 docker run 标志:--env,-t,--tty,-d,--detach,--rm等,但没有端口指定或自动重启容器--restart=always

与镜像类似,您可以使用以下命令列出现有容器:

$ ctr containers ls

有趣的是,该 ctr run 命令实际上是快捷方式ctr container create + ctr task start:

$ ctr container create -t docker.io/library/nginx:latest nginx_1
$ ctr container ls
CONTAINER    IMAGE                              RUNTIME
nginx_1      docker.io/library/nginx:latest     io.containerd.runc.v2

$ ctr task ls
TASK    PID    STATUS        # Empty!

$ ctr task start -d nginx_1  # -d for --detach
$ ctr task list
TASK     PID      STATUS
nginx_1  10074    RUNNING

我喜欢 container 和 task 子命令的这种分离,因为它反映了 OCI 容器经常被遗忘的性质。尽管普遍认为容器不是进程 -容器是资源被隔离和执行受限制的进程。

使用 ctr task attach,您可以重新连接到在容器内运行的现有任务的 stdio 流:

$ ctr task attach nginx_1
2021/09/12 15:42:20 [notice] 1#1: using the "epoll" event method
2021/09/12 15:42:20 [notice] 1#1: nginx/1.21.3
2021/09/12 15:42:20 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6)
2021/09/12 15:42:20 [notice] 1#1: OS: Linux 4.19.0-17-amd64
2021/09/12 15:42:20 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1024:1024
2021/09/12 15:42:20 [notice] 1#1: start worker processes
2021/09/12 15:42:20 [notice] 1#1: start worker process 31
...

与 docker 非常相似,您可以在现有容器中执行命令:

$ ctr task exec -t --exec-id bash_1 nginx_1 bash

# From inside the container:
$ root@host:/# curl 127.0.0.1:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
...

在删除容器之前,必须停止其所有任务:$ ctr task kill -9 nginx_1

或者,您可以使用以下标志--force 删除正在运行的任务:

$ ctr task rm -f nginx_1

最后,要删除容器,请运行:

$ ctr container rm nginx_1

如何在 nerdctl 中使用 containerd

nerdctl 是一个相对较新的 containerd 命令行客户端。与 ctr,nerdctl 旨在用户友好且与 Docker 兼容。在某种程度上,nerdctl + containerd可以无缝替换docker + dockerd. 但是,这似乎不是该项目的目标:

nerdctl 其目标是促进试验 Docker 中不存在的 containerd 的尖端功能。此类功能包括但不限于延迟拉取 (stargz) 和图像加密 (ocicrypt)。预计这些功能最终也将在 Docker 中可用,但是,这可能需要几个月甚至几年的时间,因为 Docker 目前被设计为仅使用容器子系统的一小部分。重构 Docker 以使用整个 containerd 是可能的,但并不简单。所以我们决定创建一个完全使用 containerd 的新 CLI,但我们不打算用 Docker 来完成。我们一直在为 Docker/Moby 以及 containerd 做出贡献,并将继续这样做。

从基本使用的角度来看,与 相比 ctr,nerdctl 支持:

  • 镜像管理 nerdctl build

  • 容器网络管理

  • Docker 与 nerdctl compose up

最酷的部分是 nerdctl 尝试提供与 docker(和 podman)相同的命令行用户体验。因此,如果您熟悉 docker(或 podman)CLI,那么您已经熟悉 nerdctl.

如何在 crictl 中使用 containerd

crictl 是 Kubernetes CRI 兼容容器运行时的命令行客户端。

引入了 Kubernetes 容器运行时接口 (CRI)以使 Kubernetes 容器运行时充满魔法。Kubernetes 节点代理 kubelet 实现了 CRI 客户端 API,可以使用任何实现 CRI 服务器 API 的容器运行时来管理其节点上的容器和 pod。

从 1.1 版开始,containerd 带有一个内置的 CRI 插件。因此,containerd 是一个兼容 CRI 的容器运行时。因此,它可以与 crictl 共存.

crictl 创建用于检查和调试 Kubernetes 节点上的容器运行时和应用程序。它支持以下操作:

attach: Attach to a running container
create: Create a new container
exec: Run a command in a running container
version: Display runtime version information
images, image, img: List images
inspect: Display the status of one or more containers
inspecti: Return the status of one or more images
imagefsinfo: Return image filesystem info
inspectp: Display the status of one or more pods
logs: Fetch the logs of a container
port-forward: Forward local port to a pod
ps: List containers
pull: Pull an image from a registry
run: Run a new container inside a sandbox
runp: Run a new pod
rm: Remove one or more containers
rmi: Remove one or more images
rmp: Remove one or more pods
pods: List pods
start: Start one or more created containers
info: Display information of the container runtime
stop: Stop one or more running containers
stopp: Stop one or more running pods
update: Update one or more running containers
config: Get and set crictl client configuration options
stats: List container(s) resource usage statistics

这里有趣的部分是,通过 crictl + containerdbundle 可以了解 pod 是如何实现的,但是这个话题值得自己去探索。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/4263.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【ASPLOS 2023】图神经网络统一图算子抽象uGrapher,大幅提高计算性能

作者&#xff1a;周杨杰、沈雯婷 开篇 近日&#xff0c;阿里云机器学习平台PAI和上海交通大学冷静文老师团队合作的论文《图神经网络统一图算子抽象uGrapher》被ASPLOS 2023录取。 为了解决当前图神经网络中框架中不同的图算子在不同图数据上静态kernel的性能问题&#xff0…

【前沿技术】文心一言 PK Chat Gpt

目录 写在前面 一、文心一言 二、Chat GPT 三、对比 四、总结 写在前面 随着人工智能技术的不断发展和普及&#xff0c;越来越多的智能应用走入了人们的日常生活&#xff0c;如智能语音助手、智能客服、机器翻译等等。在这些应用中&#xff0c;自然语言生成&#xff08;…

看完不再愁 | 图解TCP 重传、滑动窗口、流量控制、拥塞控制

目录 前言 正文 &#x1f332; 重传机制 1. 超时重传 2. 快速重传 3. SACK 方法 4. Duplicate SACK &#x1f332; 滑动窗口 &#x1f333; 流量控制 &#x1f333; 拥塞控制 1. 慢启动 2. 拥塞避免算法 3. 拥塞发生 4. 快速恢复 前言 前面我们讲到「硬不硬你说…

Android开发一直在用大公司的开源库,可参考~

一、阿里巴巴 &#xff08;一&#xff09;UI有关 1. 多页面切换场景统一解决方案 UltraViewPager UltraViewPager 是阿里开源的一个封装多种特性的 ViewPager &#xff0c;主要是为多页面切换场景提供统一解决方案。 主要功能: 1. 支持横向滑动&#xff0f;纵向滑动2. 支持一屏…

求红白黑球的个数-课后程序(JavaScript前端开发案例教程-黑马程序员编著-第2章-课后作业)

【案例2-11】求红白黑球的个数 一、案例描述 考核知识点 for循环语句、if判断语句 练习目标 掌握for循环应用。掌握if判断语句应用 需求分析 用js编程 已知&#xff1a;红白球共25个&#xff0c;白黑球共31个&#xff0c;红黑球共28个&#xff0c;求三种球各有多少&#xff…

基于STM32 SG90 9g舵机控制

文章目录一、什么是舵机&#xff1f;二、工作原理三、利用PWM控制四、stm32舵机控制一、什么是舵机&#xff1f; 产品参数 名称&#xff1a;9克舵机180度 尺寸&#xff1a;23mm X 12.2mm X 29mm 重量&#xff1a;9克 扭矩&#xff1a;1.5kg/cm 工作电压&#xff1a;4.2 - 6V 温…

Java大数字运算(BigInteger类和BigDecimal类)

在 Java 中提供了用于大数字运算的类&#xff0c;即 java.math.BigInteger 类和 java.math.BigDecimal 类。这两个类用于高精度计算&#xff0c;其中 BigInteger 类是针对整型大数字的处理类&#xff0c;而 BigDecimal 类是针对大小数的处理类。 BigInteger 类 如果要存储比 …

一本通 3.3.1 树与二叉树

树与二叉树的基本知识 1336&#xff1a;【例3-1】找树根和孩子 【题目描述】 给定一棵树&#xff0c;输出树的根root&#xff0c;孩子最多的结点max以及他的孩子。 【题目分析】 【代码实现】 #include<bits/stdc.h> using namespace std; int father[201], sum[101]…

8.OSP的GR(Graceful Restart,平滑重启)实验

一、GR(Graceful Restart,平滑重启) 技术介绍 GR(Graceful Restart,平滑重启)技术保证了设备在重启过程中转发层面能够继续指导数据的转发,同时控制层面邻居关系的重建以及路由计算等动作不会影响转发层面的功能,从而避免了路由振荡引发的业务中断,保证了关键业务的数…

Java_Spring:5. 基于注解的 IOC 配置

目录 1 环境搭建 1.1 第一步&#xff1a;拷贝必备 jar 包到工程的 lib 目录。 1.2 第二步&#xff1a;使用Component 注解配置管理的资源 1.3 第三步&#xff1a;创建 spring 的 xml 配置文件并开启对注解的支持 2 常用注解 2.1 用于创建对象的注解 2.1.1 Component 2.1…

【MySQL高级篇】第09章_性能分析工具的使用

第09章_性能分析工具的使用 在数据库调优中&#xff0c;我们的目标是 响应时间更快, 吞吐量更大 。利用宏观的监控工具和微观的日志分析可以帮我们快速找到调优的思路和方式。 1. 数据库服务器的优化步骤 当我们遇到数据库调优问题的时候&#xff0c;该如何思考呢&#xff1…

在vue项目中使用echarts(echarts不显示,echarts使用详细)

简述&#xff1a;我们在写大屏项目和vue项目时经常会用到echarts&#xff0c;用于数据统计和可视化&#xff0c;它是一款基于JavaScript的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化定制的数据可视化图表&#xff0c;下面分…

【IAR工程】STM8S208RB基于ST标准库蜂鸣器(BEEP)驱动

【IAR工程】STM8S208RB基于ST标准库蜂鸣器(BEEP)驱动&#x1f33e;寄存器版本《STM8S系列基于IAR开发&#xff1a;蜂鸣器&#xff08;BEEP&#xff09;驱动功能模块示例》&#x1f33f;相关篇《【IAR工程】STM8S208RB基于ST标准库下GPIO点灯示例》&#x1f33f;《【IAR工程】ST…

总结803

早上&#xff1a; 6:44起床 7:00~7:04开合跳100 7:09~8:00小湖读英语 8:00~9&#xff1a;30句句真研 9&#xff1a;40~10:00去教室 10:03~10:15阅读《运动改造大脑》 10:15~12:00上课 12:00~12:20背单词 12:23~12:50吃饭 1:00~2:10午觉 2:30~5:00核聚课程一篇考研英…

HashMap, HashTable, ConcurrentHashMap 之间的区别

目录关于线程安全HashTable 和 ConcurrentHashMap 的区别1. 加锁粒度不同(最关键 最核心的区别!!!)2. ConcurrentHashMap 利用了 CAS 机制 (无锁编程)3. 优化了扩容策略关于线程安全 我们知道 HashMap 是线程不安全的. 如果要在多线程环境下使用哈希表, 则可以使用:HashTable …

深度学习语义分割篇——FCN原理详解篇

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;往期回顾&#xff1a;目标检测系列——开山之作RCNN原理详解    目标检测系列——Fast R-CNN原理详解    目标检测系列——Faster R-CNN原理详解 &#x1f34a;近期目标&…

说微软翻译比谷歌准,有人不信,就拿雾霾造了个句子

导读近年来&#xff0c;谷歌(微博)、微软、亚马逊和Facebook等硅谷巨头在人工智能&#xff08;AI&#xff09;领域进行着军备竞赛。在应用层面&#xff0c;有的开发智能管家、有的做机器人、有的训练AI治疗疾病。谷歌和微软则在翻译领域较上了劲。 长久以来&#xff0c;谷歌翻译…

Redis Stream消息并发和未ack消息处理

文章目录1. RedisStreamConfig2. 消费者MyMessageListener3. RedisStreamUtil4. RedisStreamConstant5. 测试6. 处理消费者已读取未ack的消息redis stream文档参考 https://zhuanlan.zhihu.com/p/60501638 1. RedisStreamConfig package com.tophant.eventdemo.common.config…

CSS3笔试题精讲1

防止父元素高度坍塌 4种方案 父元素的高度都是由内部未浮动子元素的高度撑起的。 如果子元素浮动起来,就不占用普通文档流的位置。父元素高度就会失去支撑,也称为高度坍塌。 即使有部分元素留在普通文档流布局中支撑着父元素,如果浮动 起来的元素高度高于留下的素。那么浮…

MySQL日志管理、备份与恢复

文章目录一.MySQL 日志管理1、错误日志2、通用查询日志3、二进制日志4、慢查询日志5、查看日志6、实例操作二、数据库备份的重要性与分类1、数据备份的重要性2、从物理与逻辑的角度&#xff0c;备份分为&#xff1a;3、从数据库的备份策略角度&#xff0c;备份可分为&#xff1…