【K8s】专题十三:Kubernetes 容器运行时之 Docker 与 Containerd 详解

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发、订阅专栏!


专栏订阅入口

Linux 专栏 | Docker 专栏 | Kubernetes 专栏


往期精彩文章

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法(续)

【Docker】MySQL 源码构建 Docker 镜像(基于 ARM 64 架构)


目录

一、基本概念

二、Docker 简介

三、Containerd 简介

四、容器运行时的选择

1、Kubernetes 场景下的选择

2、其他场景下的选择

附录一:Containerd 安装方法(二进制方式)

附录二:Containerd 常用命令

1、ctr 命令

2、crictl 命令


一、基本概念

在 Kubernetes 中,容器运行时(Container Runtime)是集群 Node 节点的核心组件之一。

Container Runtime 的主要功能包括:

  • 镜像管理
  • 容器生命周期管理,包括容器的创建、启动、停止、删除
  • 资源隔离
  • 网络配置
  • 存储挂载
  • 安全特性

Kubernetes 集群的 Kubelet 组件,可以通过 Container Runtime Interface(CRI)与 Container Runtime 进行交互,确保容器能够按照 Kubernetes 的调度策略和管理要求,在 Node 节点上运行。

主流的容器运行时有 Docker、Containerd 等。Docker 是早期最流行的容器运行时,而 Containerd 最早是 Docker 的组件之一。本文将对 Docker 与 Containerd 的关系、选择等内容进行详细解读。


二、Docker 简介

笔者在 Docker 专栏 文章【Docker】专题一:Docker 基本架构 做过介绍,点击查看更多详细内容。

Docker 是一种轻量级虚拟化技术,用户通过 Docker 可以在多个隔离的环境中运行不同的应用程序,从而简化了应用程序的打包、分发和部署过程。

Docker 最开始只是一个单一的二进制文件,负责镜像、容器、网络、卷等资源所有的管理工作。

在 Docker 后续演化的架构中,Containerd 成为 Docker Daemon 的核心子组件,承担与容器相关的实际管理工作:

  • Docker Daemon 将高层指令(如 docker run)转换为 Containerd 可以理解的指令
  • Containerd 则使用 Runc 作为容器运行时(Container Runtime),通过调用 Runc 实际执行这些指令


三、Containerd 简介

Containerd 是一种行业标准的容器运行时,强调简单性、健壮性和可移植性。

Containerd 最初是 Docker 的组件之一,负责管理容器的生命周期,其设计目标是提供一个简单、高效、安全的容器运行时,专注于核心功能,避免不必要的复杂性。

2017 年,Docker 将 Containerd 作为一个独立的容器运行时项目,捐赠给了云原生计算基金会(CNCF),目前已经成为容器管理领域的标准。

c4f51de860de4483ae96adf39561b276.png


四、容器运行时的选择
1、Kubernetes 场景下的选择

Kubernetes 从 1.20 版本开始,推荐使用 Containerd 作为默认的容器运行时,弃用了对 Docker 的直接支持(⚠️ 不是完全不支持!)。

Kubernetes 对默认容器运行时的变更,是基于 Containerd 与 Docker 相比具有调用链更短、组件更少、占用节点资源更少、运行更稳定的优势,可以为 Kubernetes 提供更轻量、更高效的容器管理能力,以及对 OCI 标准的全面支持能力。

下图所示,Containerd 与 Kubernetes 可以实现更紧密、高效的集成:

  • Kubernetes 弃用对 Docker 的直接支持之前,Kubelet 使用 Containerd 作为高层运行时,中间需要经过 Dockershim 和 Dockerd 两步转发
  • Kubernetes 弃用对 Docker 的直接支持之后,Kubelet 直接访问 Containerd,提升了容器运行时的调用效率(🔔 CRI-Plugin 运行在 Containerd 进程中,实现类似 Dockershim 的功能)

9c69ebbc3d624469b3f321a72577d243.webp

2、其他场景下的选择

当遇到以下使用场景时,仍需要选择 Docker 作为容器运行时:

  • 使用 DinD(Docker in Docker)
  • 使用 docker build、docker push、docker save、docker load 等命令
  • 调用 docker API
  • 使用 Docker Compose、Docker Machine、Docker Swarm
  • 使用 Sealer 部署 Kubernetes 集群,默认使用 Docker 作为容器运行时


附录一:Containerd 安装方法(二进制方式)
# AMD架构
wget https://github.com/containerd/containerd/releases/download/v1.7.21/containerd-1.7.21-linux-amd64.tar.gz
tar -xzvf containerd-1.7.21-linux-amd64.tar.gz -C /usr/

systemctl daemon-reload
systemctl enable --now containerd

===================================================================================
# ARM架构
wget https://github.com/containerd/containerd/releases/download/v1.7.21/containerd-1.7.21-linux-arm64.tar.gz
tar -xzvf containerd-1.7.21-linux-amd64.tar.gz -C /usr/

systemctl daemon-reload
systemctl enable --now containerd


附录二:Containerd 常用命令

笔者在 Docker 专栏 文章【Docker】专题二:Docker 常用命令 中已经介绍过常用的 Docker 命令,点击查看更多详细内容。

在 Containerd 作为容器运行时的情况下,可以通过 ctr 工具或 crictl 工具来与之进行交互:

  • ctr 是 Containerd 自带的客户端工具
  • crictl 是 CRI 客户端工具,比较接近 docker 命令

此外还有 nerdctl 等类似工具,以后找机会给大家详细介绍。

1、ctr 命令
# 镜像操作命令
ctr -n <ns> i xx                         # 镜像操作命令格式,默认 ns 为 k8s.io
ctr i ls                                 # 查看本地镜像列表,同 docker images
ctr i rm <镜像ID或镜像名>                  # 删除本地镜像,同 docker rmi -f <镜像ID或镜像名>
ctr i pull <镜像名>                       # 拉取远程镜像,同 docker pull <镜像名>
ctr i tag <旧镜像名> <新镜像名>             # 修改镜像名称,同 docker tag <旧镜像名> <新镜像名>
ctr i import xxx.tar                     # 从本地文件导入镜像,同 docker load -i xxx.tar
ctr i export xxx.tar <镜像名>             # 导出镜像为本地文件,同 docker save <镜像名> -o xxx.tar

# 容器操作命令
ctr -n <ns> c xx                         # 容器操作命令格式,默认 ns 为 k8s.io
ctr c ls                                 # 查看容器列表,同 docker ps -a,查看所有容器
ctr c rm <容器ID或容器名>                  # 删除容器,同 docker rm -f <容器ID或容器名>
ctr c info <容器ID或容器名>                # 查看容器信息,同 docker inspect <容器ID或容器名>
ctr c create <镜像ID或镜像名> <容器名>      # 创建容器,同 docker create,仅创建容器(容器并未运行)

2、crictl 命令
# 镜像操作命令
crictl img                               # 查看本地镜像列表
crictl pull <镜像ID或镜像名>               # 拉取远程镜像
crictl rmi <镜像ID或镜像名>                # 删除本地镜像

# 容器操作命令
crictl ps -a                             # 查看容器列表
crictl rm <容器ID或容器名>                 # 删除容器
crictl logs <容器ID或容器名>               # 查看容器日志
crictl stats / statsp                    # 查看容器 / Pod 资源使用情况

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

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

相关文章

硬件工程师笔试面试知识器件篇——电容

目录 电容 2.1、基础 电容原理图 电容实物图 2.1.1、定义 2.1.2、原理 2.1.3、电容的类型 分类1: 分类2: 2.1.4、电容的应用 2.2、相关问题 2.2.1、电容器的电容值如何测量 2.2.2、不同类型的电容器在实际应用中有那些具体差异 2.2.3、如何选择合适的电容器来满…

探索Mem0:下一代人工智能与机器学习内存管理基础设施(二)Mem0+Ollama 部署运行

探索Mem0:下一代人工智能与机器学习内存管理基础设施(二) Mem 0(发音为“mem-zero”)通过智能记忆层增强AI助手和代理,实现个性化的AI交互。Mem 0会记住用户偏好,适应个人需求,并随着时间的推移不断改进,使其成为客户支持聊天机器人,AI助手和自治系统的理想选择。 …

HNU-2023电路与电子学-实验1

写在前面&#xff1a; 这是电路与电子学课程的第一次实验&#xff0c;按照指导书的需求在Multisim软件搭建一个电路传感器模型&#xff0c;难度较小&#xff0c;细心完成就没有问题。 小tips&#xff1a;22级实验是采用上传到测试平台来进行功能检测&#xff0c;如果不通过则…

ARCGIS 纸质小班XY坐标转电子要素面(2)

本章用于说明未知坐标系情况下如何正确将XY转要素面 背景说明 现有资料&#xff1a;清除大概位置&#xff0c;纸质小班图&#xff0c;图上有横纵坐标&#xff0c;并已知小班XY拐点坐标&#xff0c;但未知坐标系。需要上图 具体操作 大部分操作同这边文章ARCGIS 纸质小班XY…

rsync搭建全网备份

rsync搭建全网备份 1. 总体概述1.1 目标1.2 简易指导图1.3 涉及工具或命令1.4 环境 2. 实施2.1 配置备份服务器2.2 备份文件准备2.3 整合命令2.4 扩展功能 1. 总体概述 1.1 目标 本次搭建目标&#xff1a; 每天定时把服务器数据备份到备份服务器备份完成后进行校验把过期数据…

OpenCV绘图函数(14)图像上绘制文字的函数putText()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在图像上绘制指定的文本字符串。 cv::putText 函数在图像上绘制指定的文本字符串。无法使用指定字体渲染的符号会被问号&#xff08;?&#xff…

电信500M宽带+AX210无线网卡测速

500M电信宽带&#xff0c;PC的Wifi模块是AX210 一、PC测速 2.4G Wifi 5G Wifi 有线网口 二、 手机端&#xff0c;小翼管家App测速 2.4G Wifi 5G Wifi 结论&#xff1a; 手机上网要快的话&#xff0c;还是要选择5G wifi

Vue 使用接口返回的背景图片和拼图图片进行滑动拼图验证

一、背景 前两天发了一篇 vue-monoplasty-slide-verify 滑动验证码插件使用及踩坑_vue-monoplasty-slide-verify 引用后不显示-CSDN博客 这两天项目又需要通过接口校验&#xff0c;接口返回了背景图片和拼图图片&#xff0c;于是在网上找了一篇帖子&#xff0c;vue 图片滑动…

四、搭建网站服务器超详细步骤——解决宝塔界面无法登录问题

前言 本篇博客是搭建网站服务器的第四期&#xff0c;也到了中间的一节 先分享一下我在搭建网站时的个人感受&#xff0c;我在这个环节卡住了很久 后来突然醒悟了&#xff0c;然后成功进入了宝塔界面 现在就来分享一下&#xff0c;我所遇到的问题 小伙伴们坐好了 …

PostgreSQL技术内幕6:PostgreSQL索引技术

文章目录 0. 简介1.PG索引类型介绍2. PG创建索引说明及索引属性查看2.1 创建说明2.2 查看方式2.2.1 查看PG默认支持的索引及对应的Handler类型2.2.2 查看B树索引属性 3. 索引选择3.1 查看索引情况 4.PG中B-Tree索引原理4.1 页存储结构 5.索引代码分析5.1 不同索引结构解析5.1.1…

day15-Linux的优化_linux15个优化

① UID 当前用户uid信息 [rootoldboy59 ~]# id uid0(root) gid0(root) groups0(root) \\UID 当前用户uid信息※② PATH 存放的是命令的位置/路径 [rootoldboy59 ~]# echo $PATH \\用$符号识别环境变量 /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bi…

【技巧】Excel检查单元格的值是否在另一列中

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 用到的excel函数 IF(ISNUMBER(MATCH(H2, I2:I10, 0)), H2, "") 注意改上面的“H2、I2、I10”&#xff01; 函数效果 函数解释 检查单元格 …

探索MongoDB的Python之钥:pymongo的魔力

文章目录 探索MongoDB的Python之钥&#xff1a;pymongo的魔力背景&#xff1a;为什么选择pymongo&#xff1f;简介&#xff1a;pymongo是什么&#xff1f;安装&#xff1a;如何将pymongo纳入你的项目&#xff1f;基础用法&#xff1a;五个核心函数介绍1. 连接到MongoDB2. 选择数…

[Deepin] 简单使用 RustDesk 实现远程访问Deepin

本教程假设你学会了看官方文档&#xff0c;且拥有基本的IT常识 本教程仅提供可用的方法&#xff0c;并讲述局限性和更优但更复杂的方法&#xff0c;不是一个手把手教程 目标&#xff1a;实现远程访问Deepin 依托 樱花frpRustDesk的“允许通过ip访问” 概述 在RustDesk打开…

【C++】—— string 模拟实现

【C】—— string模拟实现 0 前言1 string的底层结构2 默认成员函数的实现2.1 构造函数2.1.1 无参构造2.1.2 带参构造2.1.2 合并 2.2 析构函数2.3 拷贝构造函数2.3.1 传统写法2.3.2 现代写法 2.3 赋值重载2.3.1 传统写法2.3.2 现代写法2.3.3 传统写法与现代写法的优劣 3 size、…

Bootstrap 字体图标无法显示问题,<i>标签字体图标无法显示问题

bootstrap fileInput 以及 Bootstrap 字体图标无法显示问题。 今天在用 bootstrap fileInput 插件的时候发现图标无法显示&#xff0c;如下&#xff1a; 查看DOM&#xff0c;发现那些图标是<i>标签做的&#xff1a; 网上的方案 方案1 网上很多人说是我们打乱了boots…

每日OJ_牛客_走迷宫(简单bfs)

目录 牛客_走迷宫&#xff08;简单bfs&#xff09; 解析代码&#xff1a; 牛客_走迷宫&#xff08;简单bfs&#xff09; 走迷宫__牛客网 解析代码&#xff1a; 采用一个二维数组&#xff0c;不断的接受迷宫地图(因为有多个地图)&#xff0c;获取到迷宫地图后&#xff0c;采…

信号有效带宽

根据傅里叶变换可以知道信号带宽是无穷大的&#xff0c;这对实际应用是帮助不大的&#xff0c;所以有了有效带宽的概念&#xff0c;可能大家知道常用的经验公式&#xff1a;O.35/Tr或者0.5/Tr等&#xff0c;那这个公式是怎么来的呢&#xff1f;有效带宽又是什么含义呢&#xff…

Go Web 编程 PDF

&#x1f4da; Go Web开发必读:《Building Web Applications with Go》PDF资源分享 &#x1f50d; 找寻良久,终于寻得这本珍贵资源!现在我免费分享给大家 你是否正在学习Go语言开发Web应用?是否想要提升Go并发编程能力?这本书绝对不容错过! &#x1f4d6; 关于这本书 《B…

短信PHP接口平台可以为企业带来哪些优势

短信验证码在我们的日常生活中可以说是无处不在&#xff0c;并且短信验证码目前在市场中已经得到了广泛的使用&#xff0c;这种验证方法可以保证注册人事实名认证&#xff0c;并且可以防止恶意注册&#xff0c;不过也有人觉得短信验证码有一些累赘&#xff0c;那么短信验证码真…