OpenStack 后端

命令 teuthology-openstackteuthology-suite 的一个包装器,它使用 OpenStack 虚拟机透明地创建 teuthology 集群。

先决条件

一个拥有 nova 和 cinder API 访问权限的 OpenStack 租户。如果 cinder API 不可用,某些作业将无法运行,因为它们期望每个实例都附加卷。

在 OVH 上设置 OpenStack

每个实例默认都有一个公共 IP。

设置

  • 获取并配置 teuthology

    $ git clone http://github.com/ceph/teuthology
    $ cd teuthology ; ./bootstrap install
    $ source virtualenv/bin/activate
    
  • 设置 teuthology 节点

    $ teuthology-openstack --key-filename myself.pem --key-name myself --setup
    

获取 OpenStack 凭证并测试它

  • 按照 OpenStack API 快速入门进行操作

  • source $HOME/openrc.sh

  • 验证 OpenStack 客户端是否正常工作

    $ nova list
    +----+------------+--------+------------+-------------+-------------------------+
    | ID | Name       | Status | Task State | Power State | Networks                |
    +----+------------+--------+------------+-------------+-------------------------+
    +----+------------+--------+------------+-------------+-------------------------+
    
  • 使用以下命令创建无密码 ssh 公钥

    $ openstack keypair create myself > myself.pem
    +-------------+-------------------------------------------------+
    | Field       | Value                                           |
    +-------------+-------------------------------------------------+
    | fingerprint | e0:a3:ab:5f:01:54:5c:1d:19:40:d9:62:b4:b3:a1:0b |
    | name        | myself                                          |
    | user_id     | 5cf9fa21b2e9406b9c4108c42aec6262                |
    +-------------+-------------------------------------------------+
    $ chmod 600 myself.pem
    

用法

  • 运行 dummy 套件。它没有实际用途,但能显示一切按预期工作。请注意,首次运行时可能需要很长时间(从几分钟到半小时左右),因为它需要下载并上传一个云镜像到 OpenStack 提供商。

    $ teuthology-openstack --key-filename myself.pem --key-name myself --suite dummy
    Job scheduled with name ubuntu-2015-07-24_09:03:29-dummy-main---basic-openstack and ID 1
    2015-07-24 09:03:30,520.520 INFO:teuthology.suite:ceph sha1: dedda6245ce8db8828fdf2d1a2bfe6163f1216a1
    2015-07-24 09:03:31,620.620 INFO:teuthology.suite:ceph version: v9.0.2-829.gdedda62
    2015-07-24 09:03:31,620.620 INFO:teuthology.suite:teuthology branch: main
    2015-07-24 09:03:32,196.196 INFO:teuthology.suite:ceph-qa-suite branch: main
    2015-07-24 09:03:32,197.197 INFO:teuthology.repo_utils:Fetching from upstream into /home/ubuntu/src/ceph-qa-suite_main
    2015-07-24 09:03:33,096.096 INFO:teuthology.repo_utils:Resetting repo at /home/ubuntu/src/ceph-qa-suite_main to branch main
    2015-07-24 09:03:33,157.157 INFO:teuthology.suite:Suite dummy in /home/ubuntu/src/ceph-qa-suite_main/suites/dummy generated 1 jobs (not yet filtered)
    2015-07-24 09:03:33,158.158 INFO:teuthology.suite:Scheduling dummy/{all/nop.yaml}
    2015-07-24 09:03:34,045.045 INFO:teuthology.suite:Suite dummy in /home/ubuntu/src/ceph-qa-suite_main/suites/dummy scheduled 1 jobs.
    2015-07-24 09:03:34,046.046 INFO:teuthology.suite:Suite dummy in /home/ubuntu/src/ceph-qa-suite_main/suites/dummy -- 0 jobs were filtered out.
    
    2015-07-24 11:03:34,104.104 INFO:teuthology.openstack:
    web interface: http://167.114.242.13:8081/
    ssh access   : ssh ubuntu@167.114.242.13 # logs in /usr/share/nginx/html
    
  • 访问 Web 界面(URL 显示在 teuthology-openstack 输出的末尾)来监控套件的进度。

  • 运行套件的虚拟机将保留用于取证分析目的。要销毁它,运行以下命令:

    $ teuthology-openstack --key-filename myself.pem --key-name myself --teardown
    
  • 可以使用 --upload 标志将测试结果上传到可公开访问的位置

    $ teuthology-openstack --key-filename myself.pem --key-name myself \
                           --suite dummy --upload
    

故障排除

Debian Jessie 用户可能会遇到以下错误

NameError: name 'PROTOCOL_SSLv3' is not defined

有报告称 此变通方法有效,即在 ssl.py 中将 PROTOCOL_SSLv3 替换为 PROTOCOL_SSLv23

运行 OpenStack 后端集成测试

运行集成测试的最简单方法是首先运行一个 dummy 套件

$ teuthology-openstack --key-name myself --suite dummy
...
ssh access   : ssh ubuntu@167.114.242.13

这将创建一个适用于集成测试的虚拟机。使用 teuthology-openstack 命令末尾显示的 ssh 访问登录,并运行以下命令:

$ pkill -f teuthology-worker
$ cd teuthology ; pip install "tox>=1.9"
$ tox -v -e openstack-integration
integration/openstack-integration.py::TestSuite::test_suite_noop PASSED
...
========= 9 passed in 2545.51 seconds ========
$ tox -v -e openstack
integration/test_openstack.py::TestTeuthologyOpenStack::test_create PASSED
...
========= 1 passed in 204.35 seconds =========

定义实例规格和卷

OpenStack 后端创建的每个目标(即 OpenStack 术语中的虚拟机或实例)都完全相同。默认情况下,它们至少有 8GB RAM、20GB 磁盘、1 个 CPU,没有附加磁盘。这等同于在 ~/.teuthology.yaml 文件中包含以下内容:

openstack:
  ...
  machine:
    disk: 20 # GB
    ram: 8000 # MB
    cpus: 1
  volumes:
    count: 0
    size: 1 # GB

如果作业需要更多 RAM 或磁盘等,可以在现有方面(teuthology 术语中的 yaml 文件)中包含以下内容:

openstack:
  - machine:
      disk: 100 # GB
    volumes:
      count: 4
      size: 10 # GB

Teuthology 将此解释为最低要求,在 ~/.teuthology.yaml 文件中找到的默认值之上,作业将获得至少 100GB 根磁盘、8GB RAM、1 个 CPU 和四个 10GB 附加卷的实例。最高值优先:如果作业声称需要 4GB RAM 而默认值为 8GB RAM,则所有目标都将拥有 8GB RAM。

注意 machine 键之前的短划线:openstack 元素是一个包含一个值的数组。如果缺少短划线,它就是一个字典。这很重要,因为每个作业可以有多个条目,例如:

openstack:
  - machine:
      disk: 40 # GB
      ram: 8000 # MB

openstack:
  - machine:
      ram: 32000 # MB

openstack:
  - volumes: # attached to each instance
      count: 3
      size: 200 # GB

当一个作业由这些组成时,teuthology 会将它们聚合为:

openstack:
  - machine:
      disk: 40 # GB
      ram: 8000 # MB
  - machine:
      ram: 32000 # MB
  - volumes: # attached to each instance
      count: 3
      size: 200 # GB

即,所有条目都以与 tasks 相同的方式分组在一个列表中。资源要求是每个元素中找到的资源(包括默认值)的最大值。在上面的示例中,它等同于:

openstack:
  machine:
    disk: 40 # GB
    ram: 32000 # MB
  volumes: # attached to each instance
    count: 3
    size: 200 # GB