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

本文主要是介绍【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),目前已经成为容器管理领域的标准。


四、容器运行时的选择
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 资源使用情况

这篇关于【K8s】专题十三:Kubernetes 容器运行时之 Docker 与 Containerd 详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1132596

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

什么是Kubernetes PodSecurityPolicy?

@TOC 💖The Begin💖点点关注,收藏不迷路💖 1、什么是PodSecurityPolicy? PodSecurityPolicy(PSP)是Kubernetes中的一个安全特性,用于在Pod创建前进行安全策略检查,限制Pod的资源使用、运行权限等,提升集群安全性。 2、为什么需要它? 默认情况下,Kubernetes允许用户自由创建Pod,可能带来安全风险。

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF