OpenStack kietna

Sử dụng Rally để Benchmark OpenStack

Sử dụng Rally để Benchmark OpenStack

Sử dụng Rally để Benchmark OpenStack

1. Giới thiệu

  • Rally là một công cụ kiểm thử để trả lời câu hỏi: OpenStack hoạt động thế nào ở mức tải đó
  • Rally tự động và nhất thể hóa việc triển khai OpenStack Multinodes., xác minh & kiểm thử
  • Có thể sử dụng như một công cụ cơ bản của hệ thống CI/CD cho OpenStack

2. Các trường hợp sử dụng

  • Tự động việc đo lường cho các trường hợp như kiểm tra xem việc thay đổi code gần đây ảnh hưởng như thế nào tới hiệu năng
  • Phát hiện các vấn đề liên quan tới việc mở rộng & hiệu năng
  • Tìm hiểu về các cách triển khai khác nhau sẽ ảnh hưởng như thế nào tới hiệu năng hệ thống
  • Tự động hóa việc tìm kiếm phần cứng phù hợp nhất cho OpenStack Cloud
  • Tự động hóa việc tạo ra các công việc như giả lập lưu lượng người dùng thông thường

3. Kiến trúc

  • Rally như một dịch vụ: Rally chạy như một tập hợp các daemons có thể thể hiện ra một WebUI, do đó RaaS sử dụng bởi cả một team
  • Rally như một ứng dụng: Rally chạy như một app CLI nhẹ mà không cần daemons, để dễ dàng sử dụng và phát triển

Untitled

  • 3 thành phần cơ bản của Rally core
    • Deploy: Chứa thông tin về cách bạn triển khai OpenStack
    • Verify: Cung cấp unittest dựa trên các framework test về tính năng. để cung cấp công cụ lưu trữ kết quả và báo cáo
    • Task: Framework sử dụng để viết các plugins và kết hợp chúng trong các test case phức tạp sử dụng YAML. Hỗ trợ nhiều thể loại test như functional, concurrency, regression, load, scale, capacity and even chaos testing
  • Thuật toán kiểm thử OpenStack khi Scale

Untitled

4. Triển khai Rally

4.0. Cài đặt

  • Sử dụng script cài đặt ở đây
git clone https://github.com/openstack/rally.git
pip install -r requirements.txt
python setup.py install
pip install rally-openstack # Cai dat cac plugin lien quan toi OpenStack
  • Nếu thực thi script với user thường
    • Rally sẽ tạo một môi trường ảo tại ~/rally/ và cài Rally vào đó
    • Rally sử dụng sqlite làm database backend
  • Nếu thực thi script với user root
    • Rally sẽ cài trên phạm vi toàn hệ thống
  • Rally yêu cầu Python Version 2.7 hoặc 3.4

4.1. Thiết lập môi trường và chạy task mẫu

  • Download file OpenRC từ Horizon Dashboard
  • Khởi tạo Database cho lần khởi chạy đầu tiên
rally db create
rally deployment create --fromenv --name=existing

Untitled

  • Khởi chạy thử task mẫu

Untitled

Untitled

Untitled

4.2. Rally input task format

4.2.1. Cú pháp cơ bản

  • Cho phép chạy nhiều test case trong một task đơn lẻ.
{
    "<ScenarioName1>": [<config>, <config2>, ...]
    "<ScenarioName2>": [<config>, ...]
}
  • là một kiểu dữ liệu dictionary
{
    "args": { <scenario-specific arguments> },
    "runner": { <type of the runner and its specific parameters> },
    "context": { <contexts needed for this scenario> },
    "sla": { <different SLA configs> }
}

4.2.2. Nhiều subtasks trong một task đơn

  • Ví dụ cho 2 kịch bản NovaServers.boot_and_delete_server và KeystoneBasic.create_delete_user sẽ được thực hiện kế tiếp
{
    "NovaServers.boot_and_delete_server": [
        {
            "args": {
                "flavor": {
                    "name": "m1.tiny"
                },
                "image": {
                    "name": "^cirros.*-disk$"
                },
                "force_delete": false
            },
            "runner": {
                "type": "constant",
                "times": 10,
                "concurrency": 2
            },
            "context": {
                "users": {
                    "tenants": 3,
                    "users_per_tenant": 2
                }
            }
        }
    ],
    "KeystoneBasic.create_delete_user": [
        {
            "args": {},
            "runner": {
                "type": "constant",
                "times": 10,
                "concurrency": 3
            }
        }
    ]
}
  • Khởi chạy như bình thường
rally task start multiple-scenarios.json
  • Output xuất ra 2 test nối tiếp
...
+--------------------+-----------+-----------+-----------+---------------+---------------+---------+-------+
| action             | min (sec) | avg (sec) | max (sec) | 90 percentile | 95 percentile | success | count |
+--------------------+-----------+-----------+-----------+---------------+---------------+---------+-------+
| nova.boot_server   | 8.06      | 11.354    | 18.594    | 18.54         | 18.567        | 100.0%  | 10    |
| nova.delete_server | 4.364     | 5.054     | 6.837     | 6.805         | 6.821         | 100.0%  | 10    |
| total              | 12.572    | 16.408    | 25.396    | 25.374        | 25.385        | 100.0%  | 10    |
+--------------------+-----------+-----------+-----------+---------------+---------------+---------+-------+
Load duration: 84.1959171295
Full duration: 102.033041
--------------------------------------------------------------------------------

...

+----------------------+-----------+-----------+-----------+---------------+---------------+---------+-------+
| action               | min (sec) | avg (sec) | max (sec) | 90 percentile | 95 percentile | success | count |
+----------------------+-----------+-----------+-----------+---------------+---------------+---------+-------+
| keystone.create_user | 0.676     | 0.875     | 1.03      | 1.02          | 1.025         | 100.0%  | 10    |
| keystone.delete_user | 0.407     | 0.647     | 0.84      | 0.739         | 0.79          | 100.0%  | 10    |
| total                | 1.082     | 1.522     | 1.757     | 1.724         | 1.741         | 100.0%  | 10    |
+----------------------+-----------+-----------+-----------+---------------+---------------+---------+-------+
Load duration: 5.72119688988
Full duration: 10.0808410645

...

4.2.3. Đa cấu hình trong một kịch bản

  • Chẳng hạn chúng ta muốn test nhiều flavors trong một kịch bản
{
    "NovaServers.boot_and_delete_server": [
        {
            "args": {
                "flavor": {
                    "name": "m1.tiny"
                },
                "image": {
                    "name": "^cirros.*-disk$"
                },
                "force_delete": false
            },
            "runner": {...},
            "context": {...}
        },
        {
            "args": {
                "flavor": {
                    "name": "m1.small"
                },
                "image": {
                    "name": "^cirros.*-disk$"
                },
                "force_delete": false
            },
            "runner": {...},
            "context": {...}
        }
    ]
}
  • Khởi chạy Task
...
+--------------------+-----------+-----------+-----------+---------------+---------------+---------+-------+
| action             | min (sec) | avg (sec) | max (sec) | 90 percentile | 95 percentile | success | count |
+--------------------+-----------+-----------+-----------+---------------+---------------+---------+-------+
| nova.boot_server   | 7.896     | 9.433     | 13.14     | 11.329        | 12.234        | 100.0%  | 10    |
| nova.delete_server | 4.435     | 4.898     | 6.975     | 5.144         | 6.059         | 100.0%  | 10    |
| total              | 12.404    | 14.331    | 17.979    | 16.72         | 17.349        | 100.0%  | 10    |
+--------------------+-----------+-----------+-----------+---------------+---------------+---------+-------+
Load duration: 73.2339417934
Full duration: 91.1692159176
--------------------------------------------------------------------------------

...

+--------------------+-----------+-----------+-----------+---------------+---------------+---------+-------+
| action             | min (sec) | avg (sec) | max (sec) | r90 percentile | 95 percentile | success | count |
+--------------------+-----------+-----------+-----------+---------------+---------------+---------+-------+
| nova.boot_server   | 8.207     | 8.91      | 9.823     | 9.692         | 9.758         | 100.0%  | 10    |
| nova.delete_server | 4.405     | 4.767     | 6.477     | 4.904         | 5.691         | 100.0%  | 10    |
| total              | 12.735    | 13.677    | 16.301    | 14.596        | 15.449        | 100.0%  | 10    |
+--------------------+-----------+-----------+-----------+---------------+---------------+---------+-------+
Load duration: 71.029528141
Full duration: 88.0259010792
...

4.3. Khởi chạy các Task với người dùng chỉ có quyền đọc

4.3.1. Lí do

  • Có 2 lí do quan trọng trong môi trường production rằng tại sao chúng ta nên sử dụng một số user có sẵn để kiểm thử OpenStack Cloud
    • Keystones backend chỉ đọc: Tạo một users tạm khi chạy các kịch bản Rally sẽ bất khả thi khi chúng ta sử dụng Keystone backends chỉ có quyền đọc như LDAP và AD
    • An toàn: Rally có thể chạy từ một nhóm users được cách ly, nếu có sai sót xảy ra sẽ không ảnh hưởng tới các users hiện tại

4.3.2. Đăng kí deployment với user hiện tại

  • Tạo một file existing_users.json
{
     "openstack": {
         "auth_url": "http://example.net:5000/v2.0/",
         "region_name": "RegionOne",
         "endpoint_type": "public",
         "admin": {
             "username": "admin",
             "password": "pa55word",
             "tenant_name": "demo"
         },
         "users": [
             {
                 "username": "b1",
                 "password": "1234",
                 "tenant_name": "testing"
             },
             {
                 "username": "b2",
                 "password": "1234",
                 "tenant_name": "testing"
             }
         ]
     }
}
  • Trong file cấu hình có các thông tin cơ bản region name, auth url, thông tin login admin, và thông tin của các users sẵn có trong hệ thống
  • Áp dụng cấu hình này bằng lệnh
rally deployment create --file existing_users --name our_cloud

4.3.3. Chạy tasks với user sẵn có

  • Cần bỏ phần users ra khỏi context
  • Chẳng hạn như tasks dưới đây
{
    "NovaServers.boot_and_delete_server": [
        {
            "args": {
                "flavor": {
                    "name": "m1.tiny"
                },
                "image": {
                    "name": "^cirros.*-disk$"
                },
                "force_delete": false
            },
            "runner": {
                "type": "constant",
                "times": 10,
                "concurrency": 2
            },
            "context": {}
        }
    ]
}
  • Khởi chạy Task, rally sẽ sử dụng user hiện tại thay vì tạo ra một user tạm thời
rally task start samples/tasks/scenarios/nova/boot-and-delete.json

4.4. Thêm tiêu chí thành công (SLA) cho các subtasks

4.4.1. Tiêu chí thành công

  • Để cấu hình SLA, thêm mục sla vào phần cấu hình của subtasks tương ứng, mỗi tiêu chí bao gồm key tương ứng với giá trị mong muốn, có thể kế hợp nhiều tiêu chí
{
    "NovaServers.boot_and_delete_server": [
        {
            "args": {
                ...
            },
            "runner": {
                ...
            },
            "context": {
                ...
            },
            "sla": {
                "max_seconds_per_iteration": 10,
                "failure_rate": {
                    "max": 25
                }
            }
        }
    ]
}

4.4.2. Kiểm tra SLA

  • Thử kịch bản giả định sau
{
    "Dummy.dummy": [
        {
            "args": {},
            "runner": {
                "type": "constant",
                "times": 5,
                "concurrency": 2
            },
            "context": {
                "users": {
                    "tenants": 3,
                    "users_per_tenant": 2
                }
            },
            "sla": {
                "failure_rate": {"max": 0.0}
            }
        }
    ],
    "Dummy.dummy_exception": [
        {
            "args": {},
            "runner": {
                "type": "constant",
                "times": 5,
                "concurrency": 2
            },
            "context": {
                "users": {
                    "tenants": 3,
                    "users_per_tenant": 2
                }
            },
            "sla": {
                "failure_rate": {"max": 0.0}
            }
        }
    ]
}
  • Tiến hành khởi chạy tasks
rally task start test-sla.json
  • Kiểm tra tỉ lệ SLA
rally task sla_check
+-----------------------+-----+--------------+--------+-------------------------------------------------------------------------------------------------------+
| subtask               | pos | criterion    | status | detail                                                                                                |
+-----------------------+-----+--------------+--------+-------------------------------------------------------------------------------------------------------+
| Dummy.dummy           | 0   | failure_rate | PASS   | Maximum failure rate percent 0.0% failures, minimum failure rate percent 0% failures, actually 0.0%   |
| Dummy.dummy_exception | 0   | failure_rate | FAIL   | Maximum failure rate percent 0.0% failures, minimum failure rate percent 0% failures, actually 100.0% |
+-----------------------+-----+--------------+--------+-------------------------------------------------------------------------------------------------------+

4.5. Rally task templates

4.5.1. Cú pháp cơ bản

  • Rally hỗ trợ cú pháp template dựa trên Jinja2. Ví dụ một file task.yaml chạy một chuỗi các kịch bản Nova
---
  NovaServers.boot_and_delete_server:
    -
      args:
        flavor:
            name: "m1.tiny"
        image:
            name: "^cirros.*-disk$"
      runner:
        type: "constant"
        times: 2
        concurrency: 1
      context:
        users:
          tenants: 1
          users_per_tenant: 1

  NovaServers.resize_server:
    -
      args:
        flavor:
            name: "m1.tiny"
        image:
            name: "^cirros.*-disk$"
        to_flavor:
            name: "m1.small"
      runner:
        type: "constant"
        times: 3
        concurrency: 1
      context:
        users:
          tenants: 1
          users_per_tenant: 1
  • Trong kịch bản trên image “^cirros.-disk$”* được đưa vào scenario như một tham số. Trong trường hợp các bạn muốn chạy với nhiều loại image khác nhau, các bạn có thể đưa tên image thành một biến của template
---
  NovaServers.boot_and_delete_server:
    -
      args:
        flavor:
            name: "m1.tiny"
        image:
            name: {{image_name}}
      runner:
        type: "constant"
        times: 2
        concurrency: 1
      context:
        users:
          tenants: 1
          users_per_tenant: 1

  NovaServers.resize_server:
    -
      args:
        flavor:
            name: "m1.tiny"
        image:
            name: {{image_name}}
        to_flavor:
            name: "m1.small"
      runner:
        type: "constant"
        times: 3
        concurrency: 1
      context:
        users:
          tenants: 1
          users_per_tenant: 1
  • Sau đó chúng ta có thể đưa biến image_name khi khởi chạy tasks, có nhiều cách để làm việc đó

    • Đưa giá trị tham số thẳng vào câu lệnh
    rally task start task.yaml --task-args '{"image_name": "^cirros.*-disk$"}'
    rally task start task.yaml --task-args 'image_name: "^cirros.*-disk$"'
    • Tạo file (JSON/YAML) chứa tham số
{
    "image_name": "^cirros.*-disk$"
}
---
  image_name: "^cirros.*-disk$"

4.5.2. Sử dụng giá trị mặc định

Chúng ta có thể đặt giá trị mặc định bằng câu lệnh set ở đầu file

{% set image_name = image_name or "^cirros.*-disk$" %}

4.5.3. Templates nâng cao

Với các tính năng có sẵn, chúng ta có thể sử dụng các tính năng nâng cao, c

Chẳng hạn như task dưới sẽ tạo các user mới với tính tăng liên tục

---
  KeystoneBasic.create_user:
  {% for i in range(2, 11, 2) %}
    -
      args: {}
      runner:
        type: "constant"
        times: 10
        concurrency: {{i}}
      sla:
        failure_rate:
          max: 0
  {% endfor %}

4.6. Ngăn chặn việc tạo tải khi điều kiện thành công không được đáp ứng

  • Việc kiểm thử môi trường pre-production và production của OpenStack không phải là một tác vụ nhẹ nhàng
  • Vừa phải đạt tới giới hạn của OpenStack, vừa không khiến hệ thống gặp nguy hiểm
  • Rally có thể tạo ra tải rất lớn, nhưng không biết cách dừng lại trước khi quá muộn
  • Tính năng stop on SLA failure giúp mọi thứ có thể vận hành tốt hơn
  • Ví dụ tasks Authenticate keystone dưới đây
---
  Authenticate.keystone:
  -
    runner:
      type: "rps"
      times: 6000
      rps: 50
    context:
      users:
        tenants: 5
        users_per_tenant: 10
    sla:
      max_avg_duration: 5
  • Tasks trên có nghĩa là tạo 5 tenants, mỗi tenants 10 users trong đó, sau đó thử xác thực tới Keystone 6000 lần bằng cách mỗi giây gửi 50 yêu cầu xác thực. Mỗi request xác thực mới được tạo sau 20ms. Mỗi lần thực hiện xác thực từ một user được Rally tạo ra trước đó, tasks đạt yêu cầu khi mà thời gian xác thực ít hơn 5 giây
  • Test có thể nguy hiểm vì có thể DDoS KeyStone.
  • Chúng ta nên khởi chạy Task với tham số dừng khi SLA fail
rally task start --abort-on-sla-failure auth.yaml
  • Kết quả thu được, chúng ta có thể thấy
    • Thời gian trung bình là 8.58s > 5s
    • Rally chỉ thực hiện 2495 thay vì 6000 requests
+--------+-----------+-----------+-----------+---------------+---------------+---------+-------+
| action | min (sec) | avg (sec) | max (sec) | 90 percentile | 95 percentile | success | count |
+--------+-----------+-----------+-----------+---------------+---------------+---------+-------+
| total  | 0.108     | 8.58      | 65.97     | 19.782        | 26.125        | 100.0%  | 2495  |
+--------+-----------+-----------+-----------+---------------+---------------+---------+-------+
  • Khi xem xét kết quả HTML

Untitled

  • Có thể thấy trước khi ngừng test, thời gian của một yêu cầu xác thực đã đạt ngưỡng 65 giây
  • Rally dừng tải ngay trước khi hệ thống gặp vấn đề.
  • Chúng ta sẽ thử chạy một kịch bản khác với điều kiện thành công tốt hơn
---
  Authenticate.keystone:
  -
    runner:
      type: "rps"
      times: 6000
      rps: 50
    context:
      users:
        tenants: 5
        users_per_tenant: 10
    sla:
      max_avg_duration: 5
      max_seconds_per_iteration: 10
      failure_rate:
        max: 0
  • Task sẽ thành công bởi nó có 3 điều kiện sau
    • Thời gian yêu cầu trung bình không quá 5 giây
    • Thời gian lớn nhất của một yêu cầu nhỏ hơn 10 giây
    • Không có yêu cầu nào thất bại

4.7. Làm việc

  • Đăng kí 2 Cloud với Rally

    • Cloud1 có thông tin đúng
    $ . openrc admin admin  # openrc with correct credentials
    $ rally deployment create --fromenv --name=cloud-1
    +--------------------------------------+----------------------------+------------+------------------+--------+
    | uuid                                 | created_at                 | name       | status           | active |
    +--------------------------------------+----------------------------+------------+------------------+--------+
    | 4251b491-73b2-422a-aecb-695a94165b5e | 2015-01-18 00:11:14.757203 | cloud-1    | deploy->finished |        |
    +--------------------------------------+----------------------------+------------+------------------+--------+
    Using deployment: 4251b491-73b2-422a-aecb-695a94165b5e
    ~/.rally/openrc was updated
    • Cloud2 có thông tin sai
    $ . bad_openrc admin admin  # openrc with wrong credentials
    $ rally deployment create --fromenv --name=cloud-2
    +--------------------------------------+----------------------------+------------+------------------+--------+
    | uuid                                 | created_at                 | name       | status           | active |
    +--------------------------------------+----------------------------+------------+------------------+--------+
    | 658b9bae-1f9c-4036-9400-9e71e88864fc | 2015-01-18 00:38:26.127171 | cloud-2    | deploy->finished |        |
    +--------------------------------------+----------------------------+------------+------------------+--------+
    Using deployment: 658b9bae-1f9c-4036-9400-9e71e88864fc
    ~/.rally/openrc was updated
  • Khi list sẽ thấy có 2 deployment

$ rally deployment list
+--------------------------------------+----------------------------+------------+------------------+--------+
| uuid                                 | created_at                 | name       | status           | active |
+--------------------------------------+----------------------------+------------+------------------+--------+
| 4251b491-73b2-422a-aecb-695a94165b5e | 2015-01-05 00:11:14.757203 | cloud-1    | deploy->finished |        |
| 658b9bae-1f9c-4036-9400-9e71e88864fc | 2015-01-05 00:40:58.451435 | cloud-2    | deploy->finished | *      |
+--------------------------------------+----------------------------+------------+------------------+--------+
  • Chạy thử câu lệnh deployment check sẽ gặp lỗi
$ rally deployment check
Authentication Issues: wrong keystone credentials specified in your endpoint properties. (HTTP 401).
  • Nếu check riêng cloud-1 thì được
$ rally deployment check --deployment=cloud-1
keystone endpoints are valid and following services are available:
+----------+----------------+-----------+
| services | type           | status    |
+----------+----------------+-----------+
| cinder   | volume         | Available |
| cinderv2 | volumev2       | Available |
| ec2      | ec2            | Available |
| glance   | image          | Available |
| heat     | orchestration  | Available |
| heat-cfn | cloudformation | Available |
| keystone | identity       | Available |
| nova     | compute        | Available |
| novav21  | computev21     | Available |
| s3       | s3             | Available |
+----------+----------------+-----------+
  • Chuyển sang sử dụng deployment Cloud1
$ rally deployment use cloud-1
Using deployment: 658b9bae-1f9c-4036-9400-9e71e88864fc
~/.rally/openrc was updated
...
  • Check lại deployment
$ rally deployment check
keystone endpoints are valid and following services are available:
+----------+----------------+-----------+
| services | type           | status    |
+----------+----------------+-----------+
| cinder   | volume         | Available |
| cinderv2 | volumev2       | Available |
| ec2      | ec2            | Available |
| glance   | image          | Available |
| heat     | orchestration  | Available |
| heat-cfn | cloudformation | Available |
| keystone | identity       | Available |
| nova     | compute        | Available |
| novav21  | computev21     | Available |
| s3       | s3             | Available |
+----------+----------------+-----------+

4.8 Các plugins trong Rally

4.8.1. rally plugin show

  • Câu lệnh show cho phép tìm hiểu về plugin của rally
$ rally plugin show create_meter_and_get_stats

--------------------------------------------------------------------------------
Create a meter and fetch its statistics.
--------------------------------------------------------------------------------

NAME
    CeilometerStats.create_meter_and_get_stats
PLATFORM
    openstack
MODULE
    rally.plugins.openstack.scenarios.ceilometer.stats
DESCRIPTION
    Meter is first created and then statistics is fetched for the same
    using GET /v2/meters/(meter_name)/statistics.
PARAMETERS
+--------+-----------------------------------------------+
| name   | description                                   |
+--------+-----------------------------------------------+
| kwargs | contains optional arguments to create a meter |
+--------+-----------------------------------------------+
  • Trong trường hợp có nhiều plugin được tìm tháy
$ rally plugin show NovaKeypair

Multiple plugins found:
+-------------+-------------------------------------------------+-----------+-------------------------------------------------------+
| Plugin base | Name                                            | Platform  | Title                                                 |
+-------------+-------------------------------------------------+-----------+-------------------------------------------------------+
| Scenario    | NovaKeypair.boot_and_delete_server_with_keypair | openstack | Boot and delete server with keypair.                  |
| Scenario    | NovaKeypair.create_and_delete_keypair           | openstack | Create a keypair with random name and delete keypair. |
| Scenario    | NovaKeypair.create_and_get_keypair              | openstack | Create a keypair and get the keypair details.         |
| Scenario    | NovaKeypair.create_and_list_keypairs            | openstack | Create a keypair with random name and list keypairs.  |
+-------------+-------------------------------------------------+-----------+-------------------------------------------------------+

4.8.2. rally plugin list

  • Câu lệnh được sử dụng để list các plugins bằng tên

4.9. Xác minh cloud sử dụng bộ xác minh Tempest

  • Rally có một thành phần xác minh để làm việc với Tempest framework (The OpenStack Integration Test Suite).
  • Rally cung cấp một interface đơn giản để cài và cấu hình Tempest, chạy test và build một báo cáo với kết quả.
  • Hiện tại bộ phận xác minh của Rally cho phép chúng ta làm việc không chỉ với Tempest mà còn với bất cứ công cụ hay test frameworks nào.

4.9.1. Tạo/xóa bộ xác minh Tempest

rally verify create-verifier --type tempest --name tempest-verifier
2017-01-18 14:43:20.807 5125 INFO rally.api [-] Creating verifier 'tempest-verifier'.
2017-01-18 14:43:21.203 5125 INFO rally.verification.manager [-] Cloning verifier repo from https://git.openstack.org/openstack/tempest.
2017-01-18 14:43:32.458 5125 INFO rally.verification.manager [-] Creating virtual environment. It may take a few minutes.
2017-01-18 14:43:49.786 5125 INFO rally.api [-] Verifier 'tempest-verifier' (UUID=cde1b03d-d1eb-47f2-a997-3fd21b1d8810) has been successfully created!
Using verifier 'tempest-verifier' (UUID=cde1b03d-d1eb-47f2-a997-3fd21b1d8810) as the default verifier for the future operations.
  • Câu lệnh clone Tempest từ repo; **https://git.openstack.org/openstack/tempest** repo và cài đặt trong một môi trường Python ảo của deployment hiện tại làm mặc định. Tất cả thông tin của bộ xác minh được lưu trong một cơ sở dữ liệu
  • Cho phép thiết lập các phiên bản khác nhau và chuyển đổi giữa chúng
  • Các tham số liên qua
    • —source: Chỉ định một kho git repo
    • —version: Chỉ định commit ID hoặc tag
    • —system-wide: Thực hiện cài đặt Tempest trên toàn hệ thống
    • —force: Xóa verifier và các verification
    • —deployment-id: Chỉ loại bỏ các data của riêng deployment đó như file config

4.9.2. Cấu hình bộ xác minh Tempest

  • Sử dụng câu lệnh sau để cấu hình bộ xác minh Tempest cho deployment hiện tại
rally verify configure-verifier
  • Sử dụng tham số —deployment-id để cấu hình bộ xác minh được đăng kí trong Rally
rally verify configure-verifier --deployment-id <UUID or name of a deployment>
  • Sử dụng tham số —reconfigure để cấu hình lại
rally verify configure-verifier --reconfigure
  • Có thể dùng tham số —extend để mở rộng cấu hình mặc định
rally verify configure-verifier --extend extra_options.conf
rally verify configure-verifier --extend '{section-1: {option: value}, section-2: {option: value}}'
  • Tham số —show dùng để xem file cấu hình được tạo ra
rally verify configure-verifier --show

4.9.3. Bắt đầu xác minh

rally verify start

Mặc định việc xác minh sẽ chạy trên toàn bộ các công cụ trong bộ Tempest cho deployment hiện tại. Nếu muốn chỉ định một verifier hoặc một deployment nào đó, có thể sử dụng

rally verify start --id <UUID or name of a verifier> --deployment-id <UUID or name of a deployment>

Sử dụng tham số —pattern để chạy một phần trong bộ tests của Tempest

rally verify start --pattern set=compute
rally verify start --pattern tempest.api.compute.admin.test_flavors.FlavorsAdminTestJSON
rally verify start --pattern tempest.api.compute.admin.test_flavors.FlavorsAdminTestJSON.test_create_flavor_using_string_ram

Có thể dùng tham số –skip-list để bỏ qua một số test

Để chạy lại dùng tham số —rerun

rally verify rerun --uuid cbf5e604-6bc9-47cd-9c8c-5e4c9e9545a0

Để chỉ chạy lại những tests bị failed sử dụng tham số —failed

rally verify rerun --uuid <UUID of a verification> --failed

4.10. Lập hồ sơ nội bộ OpenStack

  • Tập hợp tận dụng OSprofiler để tạo dấu vết của các lệnh gọi nội bộ OpenStack xảy ra trong quá trình chạy kịch bản. Việc tích hợp OSProfiler trong Rally có thể giúp giải quyết các vấn đề tương tranh của OpenStack

4.10.1. Workflow

  • Việc kích hoạt lập hồ sơ được dựa trên một đoạn mã bí mật được chia sẻ giữa Rally và các dịch vụ của OpenStack (HMAC Key)
  • GIải sử OpenStack được cấu hình để kích hoạt OSprofiler và đoạn mã HMAC key bí mật là SECRET_KEY
  • Key được lưu cùng với các thông tin xác thực của deployment
  • Sau khi Rally được hướng dẫn về khóa HMAC, một dấu vết mới có thể được khởi tạo cho mỗi lần lặp lại khối lượng công việc. Sau đó, Rally sẽ lưu trữ trong báo cáo của mình id theo dõi hồ sơ. Id này cuối cùng có thể được sử dụng để truy vấn OSprofiler để có được dấu vết đầy đủ của lần lặp.

4.10.2. Đăng kí HMAC Key

  • Có thể lưu trong biến môi trường OSPROFILER_HMAC_KEY
  • Hoặc lưu trữ trong file
{
  "openstack": {
    [...]
    "profiler_hmac_key": "SECRET_KEY"
  }
}

4.10.3. Thu thập bản theo dõi đầy đủ

  • Có thể dưới dạng JSON hoặc HTML
osprofiler trace show --html --out trace.html 941338f6-3d39-4f80-9dba-395d9dbd16bb

Share this article

Related Posts