博客
关于我
MySQL是如何做容器测试的?
阅读量:790 次
发布时间:2023-02-12

本文共 3656 字,大约阅读时间需要 12 分钟。

基础设施测试框架的重要性

传统的基础设施管理以手动任务为主,由系统管理员操作静态服务器。然而,现代云平台的自动化能力正在改变这一工作方式:基础设施被描述为“代码”,自动化管理系统能够对基础设施进行动态变更。这种趋势使得基础设施更加动态,周转时间也大大缩短。

在基础设施测试方面,测试框架不仅用于验证机器镜像的状态(如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镜像的目标主要是验证软件包的版本是否正确,以及这些二进制文件的功能是否正常。镜像构建期间可能会遇到网络故障,导致软件包安装不完整,因此我们需要通过自动化测试来捕捉这些问题。

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

  • 配置语言:我们想要测试的内容(如可用包、必要的文件等)
  • 测试执行:如何运行测试(local/ssh/container)
  • 测试工具对比

    我们将关注以下三个工具:

  • InSpec/Serverspec
  • Goss
  • Container Structure Test
  • InSpec

    InSpec基于RSpec(Ruby)测试框架,借鉴了Serverspec的经验,是Chef生态系统的一部分,用于配置和测试基础设施。配置保存在一个ruby文件中,支持多种配置语言,通过targets(local/ssh/docker)来测试执行。

    Goss

    Goss是Serverspec的一个快速而简单的替代品,由Go语言开发,是一个服务器测试和验证框架。配置保存在yaml文件中,可以方便地从当前系统状态生成,支持多种配置语言,支持在本地和Docker容器中执行测试(通过dgoss脚本)。

    Container Structure Test

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

    MySQL Server Images测试示例

    先决条件

    运行示例需要在本地安装InSpec、Goss和Container Structure Test。

    安装命令

    在Linux平台上:

    curl -L https://github.com/aelsabbahy/goss/releases/download/v0.3.6/goss-linux-amd64 -o goss && chmod +x gosscurl -L https://raw.githubusercontent.com/aelsabbahy/goss/master/extras/dgoss/dgoss -o dgoss && chmod +x dgosscurl -L https://storage.googleapis.com/container-structure-test/latest/container-structure-test-linux-amd64 -o container-structure-test && chmod +x container-structure-test

    将这些文件添加到系统路径中后,可以通过shell脚本运行测试。

    测试配置

    我们提供了用于测试这三个框架的MySQL Server Docker镜像的示例文件。

    克隆存储库:

    git clone https://github.com/neumayer/mysql-server-image-tests.git

    存储库中包含以下配置文件:

    • mysql-server-inspec.rb
    • goss.yaml
    • mysql-server-container-structure-test.yml

    InSpec测试配置

    control 'container' do  impact 0.5  describe docker_container('mysql-server') do    it { should exist }    it { should be_running }    its('repo') { should eq 'mysql/mysql-server' }    its('ports') { should eq '3306/tcp, 33060/tcp' }    its('command') { should match '/entrypoint.sh mysqld' }  end  control 'server-package' do    impact 0.5    describe package('mysql-community-server-minimal') do      it { should be_installed }      its('version') { should match '8.0.12.*' }    end  end  control 'shell-package' do    impact 0.5    describe package('mysql-shell') do      it { should be_installed }      its('version') { should match '8.0.12.*' }    end  endend

    Goss测试配置

    file: /usr/sbin/mysqld  exists: true  contains: []package: mysql-community-server-minimal  installed: truepackage: mysql-shell  installed: trueport: tcp6:3306  listening: true  ip: []port: tcp6:33060  listening: true  ip: []user: mysql  exists: trueprocess: mysqld  running: true

    Container Structure Test测试配置

    schemaVersion: "2.0.0"metadataTest:  exposedPorts: ["3306"]

    运行测试

    InSpec测试:

    docker run -d --name mysql-server mysql/mysql-serverinspec exec mysql-server-inspec.rb --controls containerinspec exec mysql-server-inspec.rb -t docker://mysql-server --controls server-package

    Goss测试:

    GOSS_SLEEP=10 dgoss run -p 3306:3306 mysql/mysql-server

    Container Structure Test测试:

    container-structure-test run -p 3306:3306 mysql/mysql-server

    总结

    通过以上工具,我们可以对 MySQL Server Docker镜像进行全面测试,确保其在运行时的正确性和可靠性。选择合适的工具取决于您的具体需求和测试场景。

    转载地址:http://nndfk.baihongyu.com/

    你可能感兴趣的文章
    MYSQL搜索引擎
    查看>>
    mysql操作数据表的命令_MySQL数据表操作命令
    查看>>
    mysql操作日志记录查询_如何使用SpringBoot AOP 记录操作日志、异常日志?
    查看>>
    MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?
    查看>>
    mysql支持表情
    查看>>
    MySQL支撑百万级流量高并发的网站部署详解
    查看>>
    MySQL改动rootpassword的多种方法
    查看>>
    mysql数据分组索引_MYSQL之索引配置方法分类
    查看>>
    mysql数据取差,mysql屏蔽主外键关联关系
    查看>>
    MySQL数据和Redis缓存一致性方案详解
    查看>>
    MySQL数据和Redis缓存一致性方案详解
    查看>>
    Mysql数据库 InnoDB存储引擎中Master Thread的执行流程
    查看>>
    MySQL数据库 范式
    查看>>
    Mysql数据库B-Tree索引
    查看>>
    mysql数据库io空闲_mysql数据库磁盘io高的排查
    查看>>
    mysql数据库root密码忘记,查看或修改的解决方法
    查看>>
    MySQL数据库SQL注入靶场sqli通关实战(附靶场安装包)
    查看>>
    MYSQL数据库下载安装(Windows版本)
    查看>>
    MySQL数据库与Informix:能否创建同名表?
    查看>>
    mysql数据库中的数据如何加密呢?mysql8.0自带新特性
    查看>>