测试场景

场景是描述 Ceph 部署和配置的不同环境。场景也是隔离的,并且除了任何 ceph-ansible 配置之外,还定义了所需的机器。

场景文件

场景在 vagrant_variables.yml 文件中描述,当启动环境时,Vagrant 会使用该文件。

此 yaml 文件加载到 Vagrantfile 中,以便这些设置可用于启动 box 并在运行时将一些配置传递给 ansible。

注意

场景的基本布局在 布局和惯例 中有所介绍。只需要少数几个必需文件,这是最基本的布局。

只需要少数几个必需文件,这些部分将介绍必需(最基本)的文件。或者,可以添加其他 ceph-ansible 文件来自定义场景部署的行为。

vagrant_variables.yml

vagrant_variables.yml 文件中有几个易于理解的部分(大部分是单行设置)。

  • docker: (bool) 指示场景是否将部署 Docker 守护程序

  • VMS: (int) 这些整数值只是所需机器数量的计数。列出了每种支持的类型,默认为 0

    mon_vms: 0
    osd_vms: 0
    mds_vms: 0
    rgw_vms: 0
    nfs_vms: 0
    rbd_mirror_vms: 0
    client_vms: 0
    mgr_vms: 0
    

    对于需要 1 个 MON 和 1 个 OSD 的部署,列表如下所示

    mon_vms: 1
    osd_vms: 1
    
  • CEPH SOURCE: (string) 指示需要 dev 版本还是 stable 版本。 stable 版本将使用 Ceph 的最新稳定版本, dev 将使用 shaman (http://shaman.ceph.com)

  • SUBNETS: 这些用于配置将要启动的每个服务器的网络可用性,以及用作 ceph-ansible(最终是 Ceph)的配置。 必需 的两个值

    public_subnet: 192.168.13
    cluster_subnet: 192.168.14
    
  • MEMORY: 每个服务器的内存要求(以兆字节为单位),例如 memory: 512

  • interfaces: 一些 vagrant box(和 linux 发行版)设置了特定的接口。对于早于 Xenial 的 Ubuntu 版本,通常有 eth1,对于 CentOS 和一些 Xenial box,使用 enp0s8但是 公共 Vagrant box 将所有 box 的接口标准化为 eth1,从而更容易在以后使用 Ansible 配置它们。

警告

除非绝对确定 box 需要,否则不要将接口从 eth1 更改。某些依赖该命名方式的测试将会失败。

  • disks: 将为每台机器创建的磁盘,对于大多数环境, /dev/sd* 风格的磁盘将起作用,例如: [ '/dev/sda', '/dev/sdb' ]

  • vagrant_box: 我们发布了自己的 box 来规范我们测试的内容。这些 box 发布在 Atlas (https://atlas.hashicorp.com/ceph/) 中。当前有效的值是: ceph/ubuntu-xenialceph/centos7

以下内容通常不会更改/启用用于测试,因为它们没有影响,但在此处记录下来以供一般了解,以防需要

  • ssh_private_key_path: 用于连接到这些 box 的 id_rsa(或其他私有 SSH 密钥)的路径。

  • vagrant_sync_dir: 应该从主机“同步”(在新服务器上可用)的内容。

  • vagrant_disable_synced_folder: (bool) 禁用后,它会使启动机器更快,因为不需要同步文件。

  • os_tuning_params: 这些作为“系统调优”的变量传递给 ceph-ansible。这些不应更改。

Vagrantfile

Vagrantfile 不应需要更改,并且它被软链接回项目根目录中存在的 Vagrantfile。它以这种方式链接,以便 vagrant 环境可以隔离到给定的场景。

hosts

hosts 文件应包含场景所需的主机。这看起来有点重复,因为机器已经在 vagrant_variables.yml 中定义了,但它允许对主机进行细粒度更改(例如,在监视器之间定义不同的 public_network 值),这有助于捕获 ceph-ansible 配置中的问题。例如

[mons]
mon0 public_network=192.168.1.0/24
mon1 public_network=192.168.2.0/24
mon2 public_network=192.168.3.0/24

group_vars

此目录包含将影响 ceph-ansible 部署的任何配置更改,就像从项目根目录执行 ansible 一样。

始终需要定义的文件是 all,其中(再次)需要定义某些值,例如 public_networkcluster_network,以及 ceph-ansible 支持的任何自定义项。

场景连接

场景只是为了提供用于测试的 Ceph 环境,但它们确实需要定义在 tox.ini 中,以便它们可用于测试框架。要查看可用场景列表,以下命令(从项目根目录运行)将列出它们,为简洁起见进行了缩短

$ tox -l
...
luminous-ansible2.4-centos7_cluster
...

这些场景由不同的变量组成,在上面的命令中有 3 个

  • jewel: 要测试的 Ceph 版本

  • ansible2.4: 要安装的 Ansible 版本

  • centos7_cluster: 场景名称

最后一个在场景的连接中很重要。它是一个变量,将定义场景所在的路径。例如, centos7_clusterchangedir 部分如下所示

centos7_cluster: {toxinidir}/tests/functional/centos/7/cluster

实际测试是针对特定守护程序类型、所有守护程序类型和特定用例(例如 journal 搭配)编写的,它们也有自己的惯例,在 惯例测试文件 中有详细解释。

只要测试场景定义了 OSD 和 MON,OSD 测试和 MON 测试就会运行。

惯例

环境配置

Ansible 配置