【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 资源使用情况

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VSCode连接SSH发生connection timeout

想用用实验室服务器连接vscode跑HM编码&#xff0c;今天突然连服务器连不到&#xff0c;报错&#xff1a;[13:47:13.068] Opening exec server for ssh-remotea406-server-lan [13:47:13.082] Initizing new exec server for ssh-remotea406-server-lan [13:47:13.089] Using c…

读软件开发安全之道:概念、设计与实施17读后总结与感想兼导读

1. 基本信息 软件开发安全之道&#xff1a;概念、设计与实施 [美] 洛伦科恩费尔德 &#xff08;LorenKohnfelder&#xff09;著 人民邮电出版社,2024年1月出版 1.1. 读薄率 书籍总字数349千字&#xff0c;笔记总字数58706字。 读薄率58706349000≈16.8% 1.2. 读厚方向 社…

(5) 归并排序

归并排序 归并排序是一种分治策略的排序算法。它是一种比较特殊的排序算法&#xff0c;通过递归地先使每个子序列有序&#xff0c;再将两个有序的序列进行合并成一个有序的序列。 归并排序首先由著名的现代计算机之父 John_von_Neumann 在 1945 年发明&#xff0c;被用在了 E…

swf怎么转成mp4?swf转mp4,掌握这3招就够了!

在制作动画时&#xff0c;大家经常会用到SWF&#xff08;Shockwave Flash&#xff09;格式。不过有时候&#xff0c;为了让swf格式的软件在播放器上播放&#xff0c;就需要把swf转mp4格式&#xff0c;方便分享和播放了。今天我就来给大家介绍三个简单易行的方法&#xff0c;让你…

2.10鼠标事件

目录 实验原理 实验代码 运行结果 文章参考 实验原理 在 OpenCV 中存在鼠标的操作&#xff0c;比如左键单击、双击等。对于 OpenCV 来讲&#xff0c;用户的鼠标操作被认为发生了一个鼠标事件&#xff0c;需要对这个鼠标事件进行处理&#xff0c;这就是事件的响应。下面我们…

Windows配置域名映射IP

一、找到 hosts 文件 打开 C:\Windows\System32\drivers\etc 二、添加hosts文件修改、写入权限 右击hosts文件&#xff0c;点击属性 -> 安全 -> Users -> 编辑 -> Users -> 添加修改、写入权限 -> 确定 -> 确定 三、添加映射规则 在文件尾部添加一行映射…

LLM agentic模式之multi-agent: ChatDev,MetaGPT, AutoGen思路

文章目录 Multi-agentChatDev设计阶段编码阶段测试阶段文档编写 MetaGPTSOP模式下的Agent通信协议带执行反馈的迭代编程 AutoGenconversable agentsConversation ProgrammingAutoGen的应用 参考资料 Multi-agent ChatDev ChatDev出自2023年7月的论文《ChatDev: Communicative…

华为 HCIP-Datacom H12-821 题库 (7)

有需要题库的可以看主页置顶 V群仅进行学习交流 1.配置 VRRP 跟踪物理接口状态的命令是在华为设备上&#xff0c;以下哪一项是配置 VRRP 跟踪物理接口状态的命令&#xff1f; A、track vrrp vrid 1 interface GigabitEthernet0/0/0 B、vrrp vrid 1 track interface GigabitE…

RK3588 13.0去掉SystemUI快速设置选项

Android13.0的SystemUI下拉菜单有很多快速设置选项&#xff0c;有些选项对我们设备来说是多余的&#xff0c;用户要求去掉无用的选项&#xff0c;只保留Internet Bluetooth Screen record 去掉之前&#xff1a; 去掉之后&#xff1a; 为了去掉这些快速设置选项&#xff0c;试…

早上醒来嗓子干、喉咙痛、咳嗽……快用这个润养好物,给嗓子做个spa,让身体润起来~

进入秋季&#xff0c;很多人出现了眼睛干涩、大便干燥、嘴唇干裂、咽喉疼痛等症状&#xff0c;虽说这些还能够忍受&#xff0c;但它却影响了正常的饮食和休息。 秋季气候干燥&#xff0c;外界燥邪侵犯肺部&#xff0c;易伤津液&#xff0c;肺失滋润&#xff0c;清肃失司&#x…

HtmlSanitizer: 一个保护你的网站免受XSS攻击的.Net开源项目

Html跨站脚本攻击&#xff08;XSS&#xff09;是非常常见的&#xff0c;比如博客评论、论坛帖子、社交媒体发布动态等一些用户提交文本的地方&#xff0c;都有可能遭受恶意提交Html代码。 为了确保用户提交内容的安全&#xff0c;我们就需要对用户提交内容进行过滤。 01 项目…

基于TensorFlow框架的手写数字识别系统(代码+论文+开题报告等)

手写数字识别 需安装Python3.X 64bit相关版本、Tensorflow 1.x相关版本 IDE建议使用Pycharm 打开main.py&#xff0c;运行即可 1.4 研究方法 实验研究表明&#xff0c;若手写体数字没有限制&#xff0c;几乎可以肯定没有一劳永逸的方法能同时达到90%以上的识别率和较快的识别…

大模型备案重难点最详细说明【评估测试题+附件】

2024年3月1日&#xff0c;我国通过了《生成式人工智能服务安全基本要求》&#xff08;以下简称《AIGC安全要求》&#xff09;&#xff0c;这是目前我国第一部有关AIGC服务安全性方面的技术性指导文件&#xff0c;对语料安全、模型安全、安全措施、词库/题库要求、安全评估等方面…

qmt量化交易策略小白学习笔记第59期【qmt编程之期权数据--获取指定期权品种的详细信息--原生Python】

qmt编程之获取期权数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 基于BS模型计算欧式期权理论价格 基于Black-Scholes-Merton模型&#xff0c;输入期权标的价格、期权行权价、无风险利率…

【技术分享】顶尖 GIS 技术

谈到 GIS&#xff0c;就不能不提到现代地理智能。是指基于 GIS、遥感和卫星定位技术的地理空间可视化、分析、决策、设计和控制的技术总称。地理智能是 GIS 区别于其他信息技术最重要的价值之一。它由地理可视化、地理决策、地理设计、地理控制四个层次组成。它们形成了一个地理…

ES6 day-03

目录 一. ES6 函数 1.1 函数参数的扩展 1.1.1 默认参数 1.1.2 不定参数 1.2 箭头函数 二. Iterator(迭代器) 三. ES6 Promise 对象(重点) 3.1 Promise前言 3.1.1 Promise概述 3.1.2 Promise 状态 3.1.3 then 方法 3.2 基本使用 3.2 promise结合数据请求 3.3 回调…

中国各省份-环境规制相关数据(2000-2022年)

环境规制&#xff0c;也称为环保政策和污染治理&#xff0c;是一系列由政府制定的旨在解决环境问题、保护生态环境和促进可持续发展的政策措施。这些措施包括法律法规、行政命令、经济激励和市场机制等&#xff0c;目的是约束和指导企业和个人行为&#xff0c;减少对环境的负面…

pikachu文件包含漏洞靶场通关攻略

本地文件包含 先上传一个jpg文件&#xff0c;内容写上<?php phpinfo();?> 上传成功并且知晓了文件的路径 返回本地上传&#xff0c;并../返回上级目录 可以看到我们的php语句已经生效 远程文件包含 在云服务器上创建一个php文件 然后打开pikachu的远程文件包含靶场&…

企业级RAG应用优化整合贴【上】:数据索引阶段的8个必知技巧 |建议收藏

基于大模型的RAG应用&#xff0c;一个普遍的认识是&#xff1a; 做原型很简单&#xff0c;投入生产很难 为什么我的RAG应用很难按预期工作&#xff1f;在之前的文章中我们曾经陆续的对RAG应用优化做过零星与局部的探讨&#xff0c;如融合检索、查询转换、多模态处理、Agentic…

link .css加载失败事件

https://andi.cn/page/621728.html 博客中的代码可以一键运行代码运行平台点击工具按钮可以查看console消息