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

news2024/9/23 10:26:41

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

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


专栏订阅入口

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),目前已经成为容器管理领域的标准。


四、容器运行时的选择
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 的功能)

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.coloradmin.cn/o/2099913.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记忆化搜索【上】

509. 斐波那契数 题目链接&#xff1a;斐波那契数 递归&#xff08;暴搜&#xff09; 斐波那契数列&#xff0c;最传统的解法&#xff0c;采用递归&#xff1a; class Solution { public:int fib(int n){return dfs(n);}int dfs(int n){if(n 0 || n 1)return n;return d…

搭建核心架构网络项目(局域网)

一个基础项目的搭建 一、项目简介 这个项目主要就是最基础的一个局域网&#xff0c;模拟现实企业的网络架构&#xff0c;确保网络的安全性&#xff0c;通过VLAN划分实现不同部门或用户组的隔离等。 下图是我们这次要搭建的局域网拓扑图。&#xff08;左边为财务部门&#xff0…

[Algorithm][综合训练][kotori和n皇后][取金币][矩阵转置]详细讲解

目录 1.kotori和n皇后1.题目链接2.算法原理详解 && 代码实现 2.取金币1.题目链接2.算法原理详解 && 代码实现 3.矩阵转置1.题目链接2.算法原理详解 && 代码实现 1.kotori和n皇后 1.题目链接 kotori和n皇后 2.算法原理详解 && 代码实现 解法&…

Yapi部署文档

Yapi是高效、易用、功能强大的API管理平台&#xff0c;旨在为开发、产品、测试人员提供更优雅的接口管理服务 官网地址&#xff1a;Yapi 环境&#xff1a; l Git l NodeJs&#xff08;7.6&#xff09; l Mongodb&#xff08;2.6&#xff09; 1、 NodeJs的安装 获取资源 …

嵌入式硬件-ARM处理器架构,CPU,SOC片上系统处理器

多进程空间内部分布图&#xff1a;注意&#xff1a;创建线程实际使用兑取空间&#xff0c;栈区独立 ARM处理器架构&#xff1a; 基于ARM920T架构的CPU:以下时哈佛结构ARM920T是ARM公司的32位RISC&#xff08;精简指令集计算机&#xff09;处理器内核。它具有以下特点&#xff1…

day-47 组合

思路 回溯&#xff1a;利用个dfs方法递归调用&#xff0c;每个元素有选或不选两种抉择&#xff0c;当选中元素个数等于k时&#xff0c;将链表p加入答案&#xff0c;当idsn且选中元素个数小于n时&#xff0c;直接返回 解题过程 每次选中元素调用dfs方法后记得还原 Code class…

【数据结构】顺序表和链表——顺序表(包含丰富算法题)

文章目录 1. 线性表2. 顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现2.4 顺序表算法题2.4.1 移除元素2.4.2 删除有序数组中的重复项2.4.3 合并两个有序数组 2.5 顺序表问题与思考 1. 线性表 线性表&#xff08;linear list&#xff09;…

vivado 定义时间约束

定义时间约束和 例外情况 在本实验中&#xff0c;您将学习两种为设计创建约束的方法。您必须使用 AMD Vivado™IDE中包含的AMD Kintex™7 CPU网表示例设计。 第一步&#xff1a;打开示例项目 1.打开Vivado IDE。 •在Linux上&#xff1a; 1.更改实验室材料的存储目录。 cd&…

HarmonyOS--后台代理提醒

一、概述 HarmonyOS提供后台代理提醒功能&#xff0c;在应用退居后台或退出后&#xff0c;计时和提醒通知功能被系统后台代理接管。后台代理提醒就是由系统后台进程代理应用的提醒功能。后台代理提醒服务通过reminderAgentManager模块提供提醒定义、创建提醒、取消提醒等能力。…

zdppy+vue3+onlyoffice文档管理系统实战 20240902 上课笔记 登录功能优化

遗留问题 1、登录以后跳转最近文档2、如果用户没有登录应该自动跳转登录页面3、如果用户的token校验失败&#xff0c;应该自动调整登录界面4、按回车键自动跳转登录页面 登录以后跳转最近文档 const router useRouter() router.push("/")实际代码&#xff1a; c…

C++篇:C向C++迈进(下)

目录 引言 缺省参数 1.缺省参数的概念 2.缺省参数的分类 2.1 全缺省 2.2 半缺省 3.注意事项 函数重载 1.函数重载的定义 2.函数重载的基本规则 3.函数重载的运用场景 引用 1.引用的概念 2.引用的主要特性 3.常引用 4.引用的使用场景 4.1 函数参数传递 4.2 函…

计算机网络-VRRP基础概念

回顾一下以前我们学习的网络通信基础&#xff0c;终端通过交换机可以相互进行通信&#xff0c;而如果是不同网段间的通信需要经过三层网关&#xff0c;网关进行路由寻址和转发&#xff0c;所以基本的网络结构就是终端--交换机--路由器网关--网络出口--Internet。 一、VRRP虚拟路…

逻辑回归算法详解

目录 原理推导 逻辑回归求解 项目实战--信用卡欺诈检测 数据分析与预处理 数据读取与分析 样本不均衡解决方案 特征标准化 下采样方案 交叉验证 模型评估方法 正则化惩罚 逻辑回归模型 参数对结果的影响 混淆矩阵 分类阈值对结果的影响 过采样方案 SMOTE数据生…

点击率预测模型Embedding层的学习和训练

导读&#xff1a; 本文将简要介绍推荐模型的发展历史&#xff0c;现状&#xff0c;和下一步的研究趋势。并重点介绍针对embedding数据的模型训练及优化。主要包含以下几大部分内容&#xff1a; CTR预测模型&#xff08;CTR Models&#xff09;连续值处理&#xff08;Continuou…

OpenAI“草莓项目”最快今年秋季发布!苹果将于9月10号推出首款AI iPhone|AI日报

文章推荐 吴恩达辞任Landing AI CEO&#xff0c;专注AI投资&#xff1f;数学家斯蒂芬预言哲学家引领AI未来&#xff5c;AI日报 与人类产生情感共鸣&#xff1f;数字华夏推出“夏澜”人形机器人&#xff1b;微软Azure AI语音服务推出虚拟人形象&#xff5c;AI日报 今日热点 …

行程问题

某直升机原定以260公里的时速飞往目的地&#xff0c;因任务紧急&#xff0c;飞行时速提高到360公里&#xff0c;结果提前1小时到达&#xff0c;则总的航程是&#xff08; &#xff09;公里。 A 900 B 936【正确答案】 C 1200 D 1296 第一步&#xff0c;本题考察行程问题&#x…

自行车租赁管理系统设计与实现

第三章 系统分析 3.1 系统可行性分析 可行性研究(Feasibility Study)是通过对项目的主要内容和配套条件&#xff0c;如市场需求、资源供应、建设规模、工艺路线、设备选型、环境影响、资金筹措、盈利能力等&#xff0c;从技术、经济、工程等方面进行调查研究和分析比较&…

使用mybatis对学生管理系统的完整功能实现

一、什么是mybatis: MyBatis 是一个优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息&#xff0c;将接口和 Java 的 POJOs(Pla…

大赛题目公布,鸣志电器,对不起了

大家好&#xff0c;我是博主&#xff0c;夏目 即9/2发布组织第一届 电机电磁仿真大赛后&#xff0c;有很多朋友跃跃欲试&#xff0c;但也有不少顾虑。 跃跃欲试的原因是&#xff0c;对于这种新颖的活动&#xff0c;参与其中&#xff0c;也是一种乐趣&#xff0c;一种经验的积…

什么是I2C总线?

1.什么是I2C&#xff1f; 1.1 I2C的由来 在电视机内部电路中&#xff0c;众多功能需要用到许多集成电路IC来实现&#xff0c;包括主控器件微控制器和众多外围设备器件。这些器件相互之间要传递数据信息&#xff0c;那么就需要用导线相互连接&#xff0c;如此众多IC器件的互连&…