如何在云计算基础架构平台中创建云主机
188
2023-10-25
【摘要】 本书摘自《基于Kubernetes的容器云平台实战》一书中第1章,第4节,由陆平、左奇、付光和张晗等编著。
1.4 Docker 架构及原理
1.4.1 Docker 架构
在解释什么是Docker 的时候,已经提到当前版本的Docker引擎实际上由Dockerd、Containerd和 RunC 等组件构成。其中, Dockerd 的功能已经从单纯的容器运行时管理 向容器编排管理和集群管理的方向发展,本节主要关注的容器和镜像管理功能将逐渐由 Containerd 和符合OCI 标准的容器运行时,比如RunC 来负责。如图1-3所示逻辑架构主要 是以Linux 系统中的实现模式为例简单表示了这几个组件的交互关系,实际上目前 Docker 引擎已经可以支持MacOS、Windows 和 Linux 三种平台。
首先, Dockerd 是一个守护进程,它可以通过TCP 端口以及UNIX Domain Socket 两 种途径接收客户端的HTTP 请求。这些请求以Restful的模式来定义,被作为Docker 平台 的API 来使用。随着Docker 平台版本的演进,这个API 的版本也在不断升级,但还是保持 了兼容性。由于Docker 平台不仅能够管理单一宿主机上的容器和镜像,还能够实现容器集 群的编排管理,因此这个API 中也包含了很多超出容器和镜像管理的部分。当管理员在命 令行上执行 docker pull、run等命令时,实际上是调用了这些API, 并且管理员既可以向本 机的Dockerd 发送命令,也可以向运行在其他主机上的 Dockerd 发送命令。这些交互过程 既可以是基于HTTP 的,也可以是基于HTTPS 的。当然,对于像 Kubernetes 这样的应用来 说,刚开始的时候同样是通过这种API 来完成容器的创建和启停操作的。
由于这个API 中包含了很多超出镜像和容器管理的功能,并不是专门为了单一主机上 的容器管理而设计,因此在实际使用过程中逐渐暴露出了很多问题。无论是Kubernetes还 是Docker 容器管理平台自身,都希望能够有一个高效一致的容器管理API, 这样既能减少 Docker管理平台自身演进对它的影响,也能够逐步满足诸如高性能、适配不同容器运行时、 支持多租户等更多需求,而Containerd就可以被看成是由这种需求催生出的产物。
Containerd对外提供 gRPC 形式的API, 并且API 定义中不再包含与集群、编排等相关 的功能,但是它也不是简单地将既有的 Docker API照搬过来,而是对已有的镜像和容器管 理功能进行了更进一步的抽象,细分出内容、快照、差异、镜像、容器、任务等多个更细 粒度的服务,并且还为监控管理和多租户实现设计了接口,方便外部应用利用这套 API 来实现高效和定制的容器管理功能。 Containerd在实现这些服务的时候使用了插件机制,各 个内部组件之间通过插件机制松散耦合,功能实现非常灵活,同时也为用户定制以实现 专用的管理功能留下了较大空间。目前, Kubernetes所需的容器和镜像管理功能就可以由 Containerd来提供,但不是通过Containerd标准的API 来实现,而是由一个称为CRI 的模 块将Kubernetes项目中定义好的API 通 过gRPC 接口形式包装后提供的,而这个模块在 Containerd中也是以插件形式来实现的。该插件在功能实现时,不仅依靠了Containerd中 已有的其他插件,并且以本地调用而不是远程RPC 访问的方式完成,体现了该项目插件机 制的灵活性。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~