01 K8S 之容器与容器编排系统
Docker 容器技术有 3 个核心概念:容器、镜像和镜像仓库(DockerRegistry)。如果把容器类比为动态的、有生命周期的进程,则镜像就像是静态的可执行程序及其运行环境的打包文件,而镜像仓库则可想象成应用程序分发仓库,事先存储了制作好的各类镜像文件。
运行 Docker 守护进程(daemon)的主机称为 Docker 主机,它提供了容器引擎并负责管理本地容器的生命周期,而容器的创建则要基于本地存储的 Docker 镜像进行,当本地缺失所需的镜像时,由守护进程负责到 Docker Registry 获取。Docker 命令行客户端(名为 docker)通过 Docker 守护进程提供的 API 与其交互,用于容器和镜像等的对象管理操作。
同一 Docker 主机上的多个容器可以共享同一基础镜像,但各有自己的数据状态。Docker 使用 aufs、devicemapper、overlay2 等存储驱动程序来管理镜像层和可写容器层的内容,尽管每种存储驱动程序实现的管理方式不尽相同,但它们都使用可堆叠的镜像层和写时复制(CoW)策略。
拥有独立网络名称空间的各容器应用间通信将依赖于名称空间中可使用设备及相关的 IP 地址、路由和 iptables 规则等网络配置。Linux 内核支持多种类型的虚拟网络设备,例如 Veth、Bridge、802.q VLAN device 和 TAP 等,并支持按需创建虚拟网络设备并组合出多样化的功能和网络拓扑。Docker 借助虚拟网络设备、网络驱动、IPAM(IP 地址分配)、路由和 iptables 等实现了桥接模式、主机模式、容器模式和无网络等几种单主机网络模型。
OCI(Open Container Initiative,开放工业标准)的容器运行时规范设定的标准定义了容器运行状态的描述,以及运行时需要提供的容器管理功能,例如创建、删除和查看等操作。容器运行时规范不受上层结构绑定,不受限于任何特定操作系统、硬件、CPU 架构或公有云等,从而允许任何人遵循该标准开发应用容器技术。
containerd 是一个守护进程,它几乎囊括了容器运行时所需要的容器创建、启动、停止、中止、信号处理和删除,以及镜像管理(镜像和元信息等)等所有功能,并通过 gRPC 向上层调用者公开其 API,可被兼容的任何上层系统调用。
ontainerd 只是一个高级别的容器运行时,并不负责具体的容器管理功能,它还需要向下调用类似 runC 一类的低级别容器运行时实现此类任务。containerd 又为其自身和低级别的运行时(默认为 runC)之间添加了一个名为 containerd-shim 的中间层,以支持多种不同的 OCI 运行时,并能够将容器运行为无守护进程模式。
容器编排是指自动化容器应用的部署、管理、扩展和联网的一系列管控操作,能够控制和自动化许多任务,包括调度和部署容器、在容器之间分配资源、扩缩容器应用规模、在主机不可用或资源不足时将容器从一台主机迁移到其他主机、负载均衡以及监视容器和主机的运行状况等。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/30d69ade94f8fbb386261dac5】。文章转载请联系作者。
评论