MySQL是如何做容器测试的?

传统的基础设施管理是一项手动任务,由系统管理员管理静态服务器。现代云平台的自动化能力改变了这种工作方式:基础设施通常被描述为“代码”,基础设施管理系统会对基础设施自动做出变更。因此,基础设施的变得更加动态,周转时间也要短得多。

基础设施测试框架通常被用于验证机器镜像的状态(Amazon Machine Images、Google Compute Images或Oracle OCI Images)。随着容器基础设施的出现,容器基础设施的测试变得与机器镜像的测试一样重要。

MySQL,我们有很多基础设施,我们越来越多地使用容器来代替真实(虚拟)机器。此外,越来越多的核心基础设施运行在Oracle的云基础设施(OCI)上。这要求我们实现多个级别的自动化,并且可以利用基础设施测试来验证我们的服务器(或虚拟机、容器)的状态。基础设施测试还用于验证我们发布的一些工件的状态。

在这篇博文中,我们将重点介绍如何使用自动化基础设施测试来验证MySQL Server Docker镜像。我们将比较三个可用于进行容器测试的框架,并给出示例代码。

自动化基础设施测试

基础设施测试用于测试基础设施的状态:Apache服务器是否在监听80端口?是否正确配置了DNS服务器,这些设置是否正确反映在resolv.conf文件中?要安装的二进制文件是否都已经存在于机器镜像中?

这类测试可以作为bash脚本的一部分,因此通常被用于配置任务,或者在(手动)创建实例后进行手动验证。自动化基础设施测试更进一步,它假设需要对很多基础设施和脚本的正确性做出验证,以及动态的现代云环境有很多东西需要通过手动的方式处理。

基础设施测试工具通常与Ansible、Puppet或Chef等配置工具结合使用。配置工具在机器上安装软件,测试框架则确保它们能够正常运行。然后,任何东西都可以通过代码来表示,并使用工具进行自动化。

我们的重点是测试Docker镜像,对我们来说,这些工作有点偏向底层。由于我们所有的Docker镜像主要是由经过测试并发布的yum软件包层组成,这些层位于非常可靠的OS层之上,我们主要想要验证软件包的版本是否正确,以及这些二进制文件的功能是否正常。在镜像构建期间,可能会发生网络故障,出现软件包安装不完整的情况,我们想要通过自动化测试来捕捉它们。

在评估测试工具时,需要考虑到以下两个方面的问题:

配置语言,即想要测试的内容(可用包、必要的文件等)

测试执行,即如何运行测试(local/ssh/container)

对于以下的工具,我们将关注这两个方面的问题。这个领域最常见的工具包括:

InSpec/Serverspec

Goss

Container Structure Test

接下来,我们将逐个简要介绍它们。

InSpec

InSpec基于RSpec(Ruby)测试框架,并借鉴了Serverspec(也是基于RSpec构建,并被广泛采用)的经验。它是Chef生态系统的一部分,用于配置和测试基础设施。它的配置保存在一个ruby文件中。

可以通过resources指定多种配置语言

通过targets(local/ssh/docker)来测试执行

Goss

Goss是Serverspec的一个快速而简单的替代品,是使用Go语言开发的一个服务器测试和验证框架。它的配置保存在一个yaml文件中,这个文件可以很方便地从当前系统状态生成。

支持多种配置语言

支持在本地和Docker容器中执行测试(通过dgoss脚本)

Container Structure Test

Container Structure Test是一个用于验证容器镜像结构的框架。与Goss一样,它也是用Go语言编写,并使用了yaml配置文件。该项目于今年早些时候发布,它的应用范围相对较窄(只支持容器),但它提供了足够的功能来测试镜像。

支持的配置语言较少

测试执行仅限于本地容器

示例:MySQL Server Images

接下来,我们将演示如何安装所需工具,解释各个配置文件,并在本地运行测试。我们针对最新的MySQL Server容器(latest或8.0标签)运行测试。为了方便起见,我们跳过构建步骤,从公共注册表下载容器并在本地运行测试。在我们的构建管道中,我们首先构建容器,运行测试,在运行成功之后才会推送到公共注册表。可以通过输入以下命令来获取最新版本的mysql-server镜像:

docker pull mysql/mysql-server

总的来说,我们想测试两个东西:

容器是否存在主机上,并包含正确的元数据

容器是否包含所有的包和二进制文件

先决条件

除了可用的Docker环境之外,运行该示例还需要在本地安装InSpec、Goss和Container Structure Test。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/bc3fd0528ddb27d2ffa347692e617c55.html