Kubernetes进阶自学系列 | 容器与容器编排系统

书籍来源:《Kubernetes进阶实战(第2版)》

一边学习一边整理读书笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:Kubernetes进阶自学系列 | 汇总_COCOgsta的博客-CSDN博客


1.1.1 Docker容器技术

Docker容器技术有3个核心概念:容器、镜像和镜像仓库。如果把容器类比为动态的、有生命周期的进程,则镜像就像是静态的可执行程序及其运行环境的打包文件,而镜像仓库则可想象成应用程序分发仓库,事先存储了制作好的各类镜像文件。

运行Docker守护进程(daemon)的主机称为Docker主机,它提供了容器引擎并负责管理本地容器的生命周期,而容器的创建则要基于本地存储的Docker镜像进行,当本地缺失所需的镜像时,由守护进程负责到Docker Registry获取。Docker各组件间的逻辑架构及交互关系如图1-1所示。

同一Docker主机上的多个容器可以共享同一基础镜像,但各有自己的数据状态。

Docker支持使用存储卷技术将数据存储在宿主机可达的存储空间上以实现跨容器生命周期的数据持久性,也支持使用卷驱动器将数据直接存储在远程系统上,如图1-2所示。

各容器应用间通信将依赖于名称空间中可使用设备及相关的IP地址、路由和iptables规则等网络配置。Docker借助虚拟网络设备、网络驱动、IPAM(IP地址分配)、路由和iptables等实现了桥接模式、主机模式、容器模式和无网络等几种单主机网络模型。图1-3显示了Docker默认的桥接网络拓扑。

对于跨主机的容器间互联互通需求,Docker默认通过端口映射(DNAT)进行。然而,生产环境中封包(Overlay Network)和路由(routing network)是常见的跨主机容器间通信的解决方案。

1.1.2 OCI与容器运行时

OCI的容器运行时规范设定的标准定义了容器运行状态的描述,以及运行时需要提供的容器管理功能,例如创建、删除和查看等操作。

为了兼容OCI规范,Docker项目自身也做了架构调整,自1.11.0版本起,Docker引擎由一个单一组件拆分成了Docker Engine(docker-daemon)、containerd、containerd-shim和runC等4个独立的项目,并把containerd捐赠给了CNCF。

containerd是一个守护进程,它几乎囊括了容器运行时所需要的容器创建、启动、停止、中止、信号处理和删除,以及镜像管理(镜像和元信息等)等所有功能,并通过gRPC向上层调用者公开其API,可被兼容的任何上层系统调用。

然而,containerd不负责具体的容器管理功能,它还需要向下调用类似runC一类的低级别容器运行时。每启动一个容器,containerd都会创建一个新的containerd-shim进程来启动一个runC进程,并能够在容器启动后结束该runC进程。Docker项目组件架构与运行容器的方式如图1-4所示。

近年来,出于各种设计目标的容器运行时项目越来越多,较主流的有CRI-O、Podman和Kata Containers等。CRI-O是一款类似于containerd的高级运行时,在底层同样需要调用低级运行时负责具体的容器管理任务,支持与OCI兼容的运行时(目前使用runC)。

由Red Hat主要推动和维护的Podman项目则是另一款兼容OCI规范的高级容器运行时,它起初是CRI-O项目的一部分,后来单独分离成为libpod项目,Podman是相关的命令行管理工具。

因隔离性差、内核版本绑定以及不支持异构的硬件平台等原因为人诟病。基于虚拟化或者独立内核的安全容器项目悄然兴起,Kata Containers就是代表之一。Kata Containers在专用的精简内核中运行容器,提供网络、I/O和内存的隔离,并可以通过虚拟化VT扩展进行硬件强制隔离,如图1-5所示。

1.1.3 为什么需要容器编排系统

Docker本身非常适合管理单个容器,若运行的是构建于有限几个或十几个容器上的应用程序,则可以仅在Docker引擎上自主运行,部署和管理这些容器并不会遇到太大的困难。然而,对于包含成百上千个容器的企业级应用程序来说,这种管理将变得极其复杂,甚至无法实现。

容器编排是指自动化容器应用的部署、管理、扩展和联网的一系列管控操作,能够控制和自动化许多任务,包括调度和部署容器、在容器之间分配资源、扩缩容器应用规模、在主机不可用或资源不足时将容器从一台主机迁移到其他主机、负载均衡以及监视容器和主机的运行状况等。

容器编排系统用于完成容器编排相关的任务。以Kubernetes、Mesos和Docker Swarm等为代表的这类工具通常需要用户在YAML或JSON格式的配置清单中描述。确定调度目标后,编排工具将根据预定规范管理容器的生命周期。

Kubernetes、Mesos和Docker Swarm一度作为竞争对手在容器编排领域三分天下,但Kubernetes已经成为容器编排领域事实上的标准。

作者:热爱编程的通信人
链接:https://juejin.cn/post/7226599137641316413/
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/130406265