首页 > 其他分享 >Kubernetes 为何弃用 Docker?

Kubernetes 为何弃用 Docker?

时间:2024-12-30 17:30:57浏览次数:5  
标签:容器 弃用 Kubernetes -- containerd Docker CRI

一、什么是容器运行时?

容器运行时(Container Runtime) 是一种负责在操作系统层面管理和运行容器的软件工具或组件。其主要任务包括:

  1. 创建和启动容器:确保容器的生命周期管理。
  2. 文件系统管理:为容器提供隔离的文件系统支持。
  3. 资源限制:管理 CPU、内存等资源的使用。
  4. 网络配置:为容器设置网络接口和隔离。
  5. 隔离保障:确保容器之间及容器与宿主机之间的隔离性。

常见的容器运行时有 Dockercontainerd


二、什么是 containerd?

containerd 是由 Docker 公司于 2016 年从 Docker 中剥离出来的轻量级容器运行时,成为独立的开源项目。相比于 Docker,containerd 更加纯粹,专注于核心功能,并具有以下特点:

  1. 更小的资源占用。
  2. 更快的启动速度。
  3. 更好的性能表现。

主要功能

  • 管理容器生命周期:从创建到销毁的完整管理。
  • 镜像管理:支持镜像的拉取、推送和存储。
  • 存储管理:管理镜像和容器数据的存储。
  • 运行容器:通过调用 runC 与底层操作系统交互运行容器。
  • 网络管理:管理容器网络接口。

三、Kubernetes 是如何管理容器的?

Kubernetes 通过 容器运行时接口 (CRI) 操作容器运行时,而容器运行时基于 OCI(Open Container Initiative) 标准完成容器的运行、创建和销毁。

  1. CRI(Container Runtime Interface)

    • Kubernetes 与容器运行时之间的通信协议。
    • 通过 gRPC 接收 Kubernetes 的请求,并根据 OCI 规范创建容器配置文件。
  2. OCI(Open Container Initiative)

    • 提供开放的容器格式和运行时标准,促进不同运行时之间的兼容性。

Kubernetes 在引入 CRI 时,由于 Docker 的运行方式与 CRI 不兼容,提出了一个过渡方案:Dockershim


四、什么是 Dockershim?

Dockershim 是 Kubernetes 中的适配器组件,用于填补 Kubernetes 的 CRI 与 Docker Engine 之间的兼容空白。

  • 调用流程
    Kubernetes 通过以下调用链操作容器:

    Kubernetes --> CRI --> Dockershim --> Docker Daemon (dockerd) --> containerd

    在这个过程中,Dockershim 负责将 CRI 的请求转发给 Docker Daemon,而 Docker Daemon 再调用 containerd 执行具体的容器管理任务。

  • 存在的问题

    1. 增加了调用链的复杂性,带来性能损耗和资源占用。
    2. Docker 的多余功能(如网络和存储卷管理)增加了潜在的安全隐患。
    3. 给 Kubernetes 的维护带来额外负担,违背了开源项目通用化的理念。

五、为什么 Kubernetes 弃用 Docker 而选择 containerd?

  1. 调用链简化

    • 使用 Docker 的调用链: Kubernetes --> CRI --> Dockershim --> Docker Daemon --> containerd
    • 使用 containerd 的调用链: Kubernetes --> CRI --> containerd

    通过去掉 Dockershim 和 Docker Daemon,简化了调用链,使性能提升,资源占用更小,同时更加稳定。

  2. 性能优化

    • 根据 Kubernetes 1.10 集成 containerd1.1 的测试数据:
      • 容器启动延迟降低约 20%。
      • CPU 使用率降低 68%。
      • 内存使用率降低 12%。
  3. 安全性提升

    • Docker 提供了 Kubernetes 并不需要的许多功能(如网络和存储卷),这些功能增加了复杂性和潜在安全风险。
    • containerd 更加专注核心功能,更符合 Kubernetes 的需求。

六、Dockershim 的移除和替代方案

  1. 移除 Dockershim

    • Kubernetes 从 v1.20 开始宣布弃用 Dockershim,并在 v1.24 中完全移除。
  2. 替代方案

    • 使用 containerd 或 CRI-O:完全兼容 CRI 的运行时,是更优的选择。
    • cri-dockerd:由 Docker 和 Mirantis 社区维护的工具,作为 Kubernetes 和 Docker 的桥梁,允许继续使用 Docker。

七、总结

Kubernetes 弃用 Docker 是为了提升性能、优化资源利用并减少复杂性,而 containerd 作为更符合 Kubernetes 架构需求的容器运行时,已成为主流选择。对于需要继续使用 Docker 的场景,cri-dockerd 提供了过渡解决方案,保障用户平稳过渡到新架构。

标签:容器,弃用,Kubernetes,--,containerd,Docker,CRI
From: https://www.cnblogs.com/Leonardo-li/p/18641802

相关文章

  • 云原生周刊:Docker 的替代方案
    开源项目推荐DitoDito是一个用Go语言编写的高级Layer7反向代理服务器,提供灵活的中间件支持、后端连接的自定义证书处理、动态配置重载,以及与Redis的分布式缓存和速率限制功能。其主要特性包括高效处理HTTP和HTTPS请求、支持WebSocket代理、动态配置热重载、分布式......
  • Docker之Swarm集群管理
    Swarm简介1、Swarm是一个集群化任务编排工具,使用声明式的配置,配置文件接近docker-compose2、Swarm是Docker引擎内置(原生)的集群管理和编排工具,DockerSwarm是Docker官方三剑客项目之一(但现在用的不是特别多了)Dockerswarm的特点:1、集群化任务编排工具2、声明式配置方式......
  • docker自学入门教程
    目录1docker的安装1.1卸载旧版本docker1.2下载相关依赖1.3配置docker的安装源地址1.4安装docker1.5设置开机启动1.6简单命令检验是否安装成功1.7配置镜像加速器(官网属于国外网站,下载镜像会比较慢,推荐阿里云)1.8docker官网的镜像仓库地址2docker基......
  • Docker与K8S的区别
    目录 1定义角度2虚拟化角度虚拟化技术的发展过程VirtualMachinesVS.Docker3部署角度4其他角度4.1系统角度4.2功能角度4.3各自优势X参考文献回到顶部(BacktoTop)1定义角度Docker是一种开放源码的应用容器引擎,允许开发人员将其应用和依赖......
  • Docker镜像优化 (转)
    Docker镜像优化 1、概述Docker作为一款广受欢迎的容器化技术,为开发者提供了极大的便利。它能够将应用程序以及其全部的依赖项整合并打包,形成一个标准化的独立单元——镜像。对Docker镜像进行优化意义非凡,一方面可以显著降低镜像的存储空间占用,进而大幅提升其......
  • Docker compose安装
    1.通过以下命令自动下载并安装适应系统版本的Compose:到:https://github.com/docker/compose/releases/查找最新版release,替换路径的1.10.0curl-L"https://github.com/docker/compose/releases/download/1.10.0/docker-compose-$(uname-s)-$(uname-m)"-o/usr/local/bin/......
  • docker镜像篇
    Dokcer镜像Docker镜像概念镜像:是一种轻量级、可执行的独立软件包,它包含运行在某个软件所需的所有内容,我们把应用程序和配置以来打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件......
  • 【亲手实践】本地multipass安装kubernetes,再也不怕环境被铲
    一、安装multipass 1.安装multipaas软件版本brewinstallmultipass 2.创建三个虚拟机master(192.168.64.6)、node1(192.168.64.14)、node2(192.168.64.15),2Gcpu+2G内存+40G硬盘,Qemu+桥连模式   $ multipassfind查找可用ubuntu版本,这里选择22.04这个版本   $ m......
  • Kubernetes(v1.29)学习笔记
    什么是KubernetesK8s是Kubernetes的简称,是一个开源的容器编排系统,用于自动部署、扩展和管理容器化应用程序。Kubernetes源于希腊语,意为“舵手”或“飞行员”,其主要功能包括服务发现与负载均衡、存储编排、Secret和配置管理、批量执行、水平扩缩、自动化上线和回滚、自动装箱......
  • Docker(4.36)学习笔记
    1.什么是DockerDocker是基于Go语言实现的开源容器引擎,诞生于2013年年初,用于将应用程序及其依赖项打包为容器,以便在云或本地环境中自动部署和运行。Docker通过操作系统层面的虚拟化技术,将软件与其依赖项隔离,确保应用程序能够在不同的环境中一致地运行。Docker的特点容器化:D......