1.3.2 软件构建块
我们假设有以下四种基本的软件技术,它们都运行在集群中的普通商用处理器上:
1)Linux为运行容器工作负载提供隔离。
2)Docker容器用于打包软件(功能)。
3)Kubernetes创建容器并使之相互连接,形成一个容器集群。
4)Helm Charts描述相关容器的集合如何相互连接来构建应用。
这些软件技术都是众所周知、无处不在的,所以我们在这里只对其做一个总结。下面为不熟悉它们的读者提供了相关信息链接(包括三个与容器相关的构建块的优秀实践教程)。
Linux是运行在裸机系统上的操作系统。它提供了容器运行时系统用来实现隔离的底层API,包括用于隔离文件系统和网络访问的命名空间(namespace),以及用于限制内存和CPU使用的cgroup。
Docker[8]是一种容器运行时,它利用操作系统隔离API来实例化和运行多个容器实例,每个容器都是由Docker镜像定义的实例。Docker镜像通常使用Dockerfile来构建,它使用一种分层的方法,允许在基础镜像的基础上共享和构建自定义镜像。完成特定任务的最终镜像包含了运行在容器中的软件所需的所有依赖项,从而产生了可跨服务器移植的容器镜像,仅依赖于内核和Docker运行时。我们的云上需要有一个或多个Docker容器的镜像仓库,其中最有名的是https://hub.docker.com/。
Kubernetes[9]是一种容器管理系统。它提供了一个编程接口,用于容器实例的横向扩容缩容、分配服务器资源、设置虚拟网络以互连这些实例,以及开放可供外部客户端访问的服务端口。在后台,Kubernetes监控这些容器的活动,并自动重启运行失败的容器。换句话说,如果要求Kubernetes启动三个微服务X的实例,Kubernetes将尽力保持实现X的容器的三个实例始终正常运行。
Kubernetes还提供了可以用于在启动时配置微服务的机制,包括ConfigMaps、Secrets和Operators。由于这些机制在云管理中起着重要作用,我们将在后续章节更详细地讨论它们。
Helm[10]是一个运行在Kubernetes之上的配置集管理器。它根据运维人员提供的规范(称为Helm Chart)调用Kubernetes的API。现在由一组微服务构建的云应用通常会发布一个Helm Chart,用于定义如何将该应用部署到Kubernetes集群上。可以访问https://artifacthub.io/来查看公开可用的Helm Chart。
本书介绍的云管理软件包含一组Docker镜像以及定义如何在Kubernetes集群中部署它们的Helm Chart。总之,在接下来的章节中,我们将使用20多个这样的开源软件包。我们的目标是展示如何将这些开源构建块组装成一个全面的云管理平台。我们将详细介绍每个工具,以了解所有部分如何组合在一起,从而通过连接所有的点来提供端到端覆盖,另外,还将为那些想要深入挖掘细节的读者提供完整的文档链接。