Docker?Rkt?Lxd?细说K8S容器进行时的又一选项Containerd

2023-10-08 12:50

本文主要是介绍Docker?Rkt?Lxd?细说K8S容器进行时的又一选项Containerd,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Markdown

器运行时是执行容器并在节点上管理容器镜像的软件,目前,最广为人知的容器运行时是Docker,但在生态系统中还有其他容器运行时软件,比如Rkt、Containerd和Lxd。Docker是现在于Kubernetes环境中使用的最常见的容器运行时,今天数人云给大家推荐一个Docker的组件——Containerd,它可能是更好的选择。

本文是由谷歌的软件工程师Lantao Liu和IBM的开源开发者Mike Brown基于自身相关实践,共同编写。

Kubernetes 1.5引入了一个名为容器运行时接口(CRI)的内部插件API,以方便地访问不同的容器运行时,CRI允许Kubernetes使用各种容器运行时,而不需要重新编译。从理论上说,Kubernetes可以使用任何实现CRI的容器运行时管理容器和容器镜像。

在过去的6个月中,来自Google、Docker、IBM、中兴和ZJU的工程师们一直在努力为CRI For Containerd,这个项目被称为cri-containerd,用户可以使用容器作为底层运行时运行Kubernetes集群,并且无需安装Docker。

Containerd

Containerd是一个兼容OCI的核心容器运行时,它被设计为嵌入到更大的系统当中,提供了在一个节点上执行容器和管理镜像的最小功能集,它是由Docker公司发起,并于2017年3月加入了CNCF,Docker引擎本身是建立在早期版本的容器之上,并且很快将更新到最新版本。

与Docker相比,Containerd的规模要小得多,提供了Golang客户端API,而且更专注于可嵌入,较小范围会导致一个更小的代码库,随着时间的推移,其更容器维护以及匹配Kubernetes的需求,如下图所示:

Markdown

Markdown

综上所述,从技术的角度来看,Containerd是Kubernetes的容器进行时比较好的选择。

Cri-Containerd

Cri-Containerd是对于容器的一个实现,它在与Kubelet和 Containerd相同的节点上运行,在Kuberntes和Containerd之间的分层中,Cri-Containerd处理来自Kubelet的所有国际服务请求,并使用Containerd管理容器和容器镜像,Cri-Containerd管理这些服务请求,在一定程度上是通过形成Containerd服务请求,同时添加足够的附加功能来去支持CRI需求。

Markdown

与当前的Docker CRI实现(Dockershim)相比,Cri-Containerd消除了栈中的额外跳转,使堆栈更加稳定和高效。

体系结构

Markdown

可以通过下面这个例子来演示当Kubele创建一个单一容器的时候,如何使用Cri-Containerd。

  • Kubelet通过国际运行时服务API调用了Cri-Containerd,用以创建一个Pod;

  • Cri-Containerd使用Containerd创建和启动一个特殊的暂停容器(沙箱容器),并将该容器放在Pod的Cgroups和名称空间中;

  • Containerd使用CNI配置了Pod的网络名称空间;

  • Kubelet随后通过国际服务API调用了“容器”,以拉出应用程序的容器的镜像;

  • 如果镜像不存在于节点,则Cri-Containerd将进一步使用Containerd来拉出镜像;

  • 然后,Kubelet通过“CRI”服务API调了“Cri-Containerd”通过拉取容器的镜像来创建和启动应用程序容器;

  • Cri-Containerd最终调用Containerd来创建应用程序容器,将其放入Pod的Cgroups和命名空间中,然后启动该容器的新应用程序容器。

在这些步骤之后,将创建并运行一个Pod及其相应的应用程序容器。

现阶段状态

Cri-Containerd V1.0.0-alpha.0是在2017年9月25日发布的。

其功能完备,所有的Kubernetes的特性都得到了支持。

所有的CRI validation test(CRI validation test是一种测试框架,用于验证是否符合Kubernetes的所有要求。地址:https://github.com/kubernetes...)

所有的 Node e2e Test都已通过(用于测试Kubernetes节点级功能的测试框架如Managing Pods、Mounting Volumes等,地址:https://github.com/kubernetes...)。

若想了解更多关于V1.0-Alpha的相关内容,请前往:https://github.com/kubernetes...

延伸阅读

对于一个多节点集群安装程序,并使用能应用和Kubeadm启动步骤请参见:https://github.com/kubernetes...

若想在Google云端从头创建一个集群,请参见:https://github.com/kelseyhigh...

对于一个自发布Tarball的自定义安装,请参见:https://github.com/kubernetes...

对于在本地VM上安装LinuxKit,请参见:https://github.com/linuxkit/l...

下一阶段

Containerd承诺,在下一阶段将主要改进稳定性和可用性方面的问题:

稳定性:

在Kubernetes的测试基础设施上建立一套完整的Kubernetes集成测试,包括Ubuntu、COS(容器化的OS 地址:https://cloud.google.com/cont...)等等。

积极解决用户报告的任何测试失败和其他问题。

可用性:

提高Crictl(https://github.com/kubernetes...)的用户体验,Crictl是所有的CRI容器运行时的可移植命令行工具,这里的目标是使其易于用于调试和开发场景。

集成Kube-up.sh(https://kubernetes.io/docs/ge...)帮助用户使用Cri-Containerd来提高Kubernetes集群的生产质量。

改进文档。

预计在2017年底发布V1.0-Beta。

提供建议

Cri-Containerd是一个Kubernetes的孵化器项目,地址:ttps://github.com/kubernetes-incubator/cri-containerd。欢迎提供任何具有建设性的意见和建议,具体的使用入门指南请参见:https://github.com/kubernetes...

社区

Cri-Containerd是由Kubernetes Signode社区开发和维护的,如有相关的建议,可以加入社区:

Sig-Node社区网站:https://github.com/kubernetes...

Slack:Kubernetes(kubernet.slack.com)的sig-节点通道:https://kubernetes.slack.com/

原文作者:Kubernetes
原文链接:http://blog.kubernetes.io/201...

这篇关于Docker?Rkt?Lxd?细说K8S容器进行时的又一选项Containerd的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

centos7基于keepalived+nginx部署k8s1.26.0高可用集群

《centos7基于keepalived+nginx部署k8s1.26.0高可用集群》Kubernetes是一个开源的容器编排平台,用于自动化地部署、扩展和管理容器化应用程序,在生产环境中,为了确保集... 目录一、初始化(所有节点都执行)二、安装containerd(所有节点都执行)三、安装docker-

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

python-nmap实现python利用nmap进行扫描分析

《python-nmap实现python利用nmap进行扫描分析》Nmap是一个非常用的网络/端口扫描工具,如果想将nmap集成进你的工具里,可以使用python-nmap这个python库,它提供了... 目录前言python-nmap的基本使用PortScanner扫描PortScannerAsync异

如何用Docker运行Django项目

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

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测