diff --git a/README.rst b/README.rst
index 6ff6a235cdec93c4696c2200a6a94d82167a0b05..d89fed10f2204a4feead20fde8a7f3831c070cf4 100644
--- a/README.rst
+++ b/README.rst
@@ -64,7 +64,6 @@ Kolla Ansible deploys containers for the following OpenStack projects:
 - `Neutron <https://docs.openstack.org/neutron/latest/>`__
 - `Nova <https://docs.openstack.org/nova/latest/>`__
 - `Octavia <https://docs.openstack.org/octavia/latest/>`__
-- `Rally <https://docs.openstack.org/rally/latest/>`__
 - `Sahara <https://docs.openstack.org/sahara/latest/>`__
 - `Senlin <https://docs.openstack.org/senlin/latest/>`__
 - `Solum <https://docs.openstack.org/solum/latest/>`__
diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml
index 9a5684433d24c7cbde83166755c89cb0fc08659b..cf0ebd198bb5e155be0feff9b5dc9fef76e63527 100644
--- a/ansible/group_vars/all.yml
+++ b/ansible/group_vars/all.yml
@@ -674,7 +674,6 @@ enable_osprofiler: "no"
 enable_placement: "{{ enable_nova | bool or enable_zun | bool }}"
 enable_prometheus: "no"
 enable_qdrouterd: "{{ 'yes' if om_rpc_transport == 'amqp' else 'no' }}"
-enable_rally: "no"
 enable_redis: "no"
 enable_sahara: "no"
 enable_senlin: "no"
diff --git a/ansible/inventory/all-in-one b/ansible/inventory/all-in-one
index 32d791881c130577a8ce5fbc2fdaeffd09a7ed0a..6fb17046dd7da9268d7371048bd6f72bc91e4395 100644
--- a/ansible/inventory/all-in-one
+++ b/ansible/inventory/all-in-one
@@ -206,9 +206,6 @@ control
 [watcher:children]
 control
 
-[rally:children]
-control
-
 [octavia:children]
 control
 
diff --git a/ansible/inventory/multinode b/ansible/inventory/multinode
index 4a545de2dbbb8f45b5559848945e8f0920e2c4dc..c9aae9b04081c047d34fe9774d89dd40e0234b40 100644
--- a/ansible/inventory/multinode
+++ b/ansible/inventory/multinode
@@ -224,9 +224,6 @@ control
 [watcher:children]
 control
 
-[rally:children]
-control
-
 [octavia:children]
 control
 
diff --git a/ansible/roles/common/defaults/main.yml b/ansible/roles/common/defaults/main.yml
index 0a7cc4eb1370c1b76b27c11672bdd49710a35f6a..9b7c32646ad1b9482ee054baa77d173d73f640a1 100644
--- a/ansible/roles/common/defaults/main.yml
+++ b/ansible/roles/common/defaults/main.yml
@@ -159,8 +159,6 @@ fluentd_input_openstack_services:
     enabled: "{{ enable_nova | bool }}"
   - name: octavia
     enabled: "{{ enable_octavia | bool }}"
-  - name: rally
-    enabled: "{{ enable_rally | bool }}"
   - name: sahara
     enabled: "{{ enable_sahara | bool }}"
   - name: senlin
diff --git a/ansible/roles/common/tasks/config.yml b/ansible/roles/common/tasks/config.yml
index 6333b1eb891cbff62593be552d8a302bff4dd398..b6ba07f8e27853a8cd4f08312c77b0b165d908cd 100644
--- a/ansible/roles/common/tasks/config.yml
+++ b/ansible/roles/common/tasks/config.yml
@@ -209,7 +209,6 @@
       - { name: "octavia", enabled: "{{ enable_octavia | bool }}" }
       - { name: "outward-rabbitmq", enabled: "{{ enable_outward_rabbitmq | bool }}" }
       - { name: "rabbitmq", enabled: "{{ enable_rabbitmq | bool }}" }
-      - { name: "rally", enabled: "{{ enable_rally | bool }}" }
       - { name: "sahara", enabled: "{{ enable_sahara | bool }}" }
       - { name: "senlin", enabled: "{{ enable_senlin | bool }}" }
       - { name: "skydive", enabled: "{{ enable_skydive | bool }}" }
diff --git a/ansible/roles/common/templates/cron-logrotate-rally.conf.j2 b/ansible/roles/common/templates/cron-logrotate-rally.conf.j2
deleted file mode 100644
index 3914c045abdcb4caee63a82ecc5a724a90d8c68e..0000000000000000000000000000000000000000
--- a/ansible/roles/common/templates/cron-logrotate-rally.conf.j2
+++ /dev/null
@@ -1,3 +0,0 @@
-"/var/log/kolla/rally/*.log"
-{
-}
diff --git a/ansible/roles/rally/defaults/main.yml b/ansible/roles/rally/defaults/main.yml
deleted file mode 100644
index 2d3c6058f681610b4ea5fee583d0d0f1fdd8cd2e..0000000000000000000000000000000000000000
--- a/ansible/roles/rally/defaults/main.yml
+++ /dev/null
@@ -1,36 +0,0 @@
----
-project_name: "rally"
-
-rally_services:
-  rally:
-    container_name: "rally"
-    image: "{{ rally_image_full }}"
-    enabled: true
-    group: "rally"
-    volumes: "{{ rally_default_volumes + rally_extra_volumes }}"
-    dimensions: "{{ rally_dimensions }}"
-
-
-########
-# Docker
-########
-rally_install_type: "{{ kolla_install_type }}"
-rally_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ rally_install_type }}-rally"
-rally_tag: "{{ openstack_tag }}"
-rally_image_full: "{{ rally_image }}:{{ rally_tag }}"
-rally_dimensions: "{{ default_container_dimensions }}"
-
-rally_default_volumes:
-  - "{{ node_config_directory }}/rally/:{{ container_config_directory }}/:ro"
-  - "/etc/localtime:/etc/localtime:ro"
-  - "{{ '/etc/timezone:/etc/timezone:ro' if ansible_os_family == 'Debian' else '' }}"
-  - "kolla_logs:/var/log/kolla/"
-
-rally_extra_volumes: "{{ default_extra_volumes }}"
-
-####################
-# Database
-####################
-rally_database_name: "rally"
-rally_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}rally{% endif %}"
-rally_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}"
diff --git a/ansible/roles/rally/handlers/main.yml b/ansible/roles/rally/handlers/main.yml
deleted file mode 100644
index fa7bd4438e154424fdd13817db6e768773ef568d..0000000000000000000000000000000000000000
--- a/ansible/roles/rally/handlers/main.yml
+++ /dev/null
@@ -1,15 +0,0 @@
----
-- name: Restart rally container
-  vars:
-    service_name: "rally"
-    service: "{{ rally_services[service_name] }}"
-  become: true
-  kolla_docker:
-    action: "recreate_or_restart_container"
-    common_options: "{{ docker_common_options }}"
-    name: "{{ service.container_name }}"
-    image: "{{ service.image }}"
-    volumes: "{{ service.volumes|reject('equalto', '')|list }}"
-    dimensions: "{{ service.dimensions }}"
-  when:
-    - kolla_action != "config"
diff --git a/ansible/roles/rally/tasks/bootstrap.yml b/ansible/roles/rally/tasks/bootstrap.yml
deleted file mode 100644
index ce1936d7f91a488a4ede3727362994a60999cfbd..0000000000000000000000000000000000000000
--- a/ansible/roles/rally/tasks/bootstrap.yml
+++ /dev/null
@@ -1,36 +0,0 @@
----
-- name: Creating rally database
-  become: true
-  kolla_toolbox:
-    module_name: mysql_db
-    module_args:
-      login_host: "{{ database_address }}"
-      login_port: "{{ database_port }}"
-      login_user: "{{ database_user }}"
-      login_password: "{{ database_password }}"
-      name: "{{ rally_database_name }}"
-  run_once: True
-  delegate_to: "{{ groups['rally'][0] }}"
-  when:
-    - not use_preconfigured_databases | bool
-
-- name: Creating rally database user and setting permissions
-  become: true
-  kolla_toolbox:
-    module_name: mysql_user
-    module_args:
-      login_host: "{{ database_address }}"
-      login_port: "{{ database_port }}"
-      login_user: "{{ database_user }}"
-      login_password: "{{ database_password }}"
-      name: "{{ rally_database_user }}"
-      password: "{{ rally_database_password }}"
-      host: "%"
-      priv: "{{ rally_database_name }}.*:ALL"
-      append_privs: "yes"
-  run_once: True
-  delegate_to: "{{ groups['rally'][0] }}"
-  when:
-    - not use_preconfigured_databases | bool
-
-- import_tasks: bootstrap_service.yml
diff --git a/ansible/roles/rally/tasks/bootstrap_service.yml b/ansible/roles/rally/tasks/bootstrap_service.yml
deleted file mode 100644
index 86da382c5f9a339fd9f567b5e917afa7bce4cbbc..0000000000000000000000000000000000000000
--- a/ansible/roles/rally/tasks/bootstrap_service.yml
+++ /dev/null
@@ -1,20 +0,0 @@
----
-- name: Running rally bootstrap container
-  vars:
-    rally: "{{ rally_services['rally'] }}"
-  become: true
-  kolla_docker:
-    action: "start_container"
-    common_options: "{{ docker_common_options }}"
-    detach: False
-    environment:
-      KOLLA_BOOTSTRAP:
-      KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
-    image: "{{ rally.image }}"
-    labels:
-      BOOTSTRAP:
-    name: "bootstrap_rally"
-    restart_policy: no
-    volumes: "{{ rally.volumes }}"
-  run_once: True
-  delegate_to: "{{ groups[rally.group][0] }}"
diff --git a/ansible/roles/rally/tasks/check-containers.yml b/ansible/roles/rally/tasks/check-containers.yml
deleted file mode 100644
index d420a409543ecb2019800725299a4eac54a43c01..0000000000000000000000000000000000000000
--- a/ansible/roles/rally/tasks/check-containers.yml
+++ /dev/null
@@ -1,16 +0,0 @@
----
-- name: Check rally containers
-  become: true
-  kolla_docker:
-    action: "compare_container"
-    common_options: "{{ docker_common_options }}"
-    name: "{{ item.value.container_name }}"
-    image: "{{ item.value.image }}"
-    volumes: "{{ item.value.volumes }}"
-    dimensions: "{{ item.value.dimensions }}"
-  when:
-    - inventory_hostname in groups[item.value.group]
-    - item.value.enabled | bool
-  with_dict: "{{ rally_services }}"
-  notify:
-    - "Restart {{ item.key }} container"
diff --git a/ansible/roles/rally/tasks/check.yml b/ansible/roles/rally/tasks/check.yml
deleted file mode 100644
index ed97d539c095cf1413af30cc23dea272095b97dd..0000000000000000000000000000000000000000
--- a/ansible/roles/rally/tasks/check.yml
+++ /dev/null
@@ -1 +0,0 @@
----
diff --git a/ansible/roles/rally/tasks/config.yml b/ansible/roles/rally/tasks/config.yml
deleted file mode 100644
index 31338a4cb59cb7d8ec2848e9d73c67ec07fe528b..0000000000000000000000000000000000000000
--- a/ansible/roles/rally/tasks/config.yml
+++ /dev/null
@@ -1,80 +0,0 @@
----
-- name: Ensuring config directories exist
-  file:
-    path: "{{ node_config_directory }}/{{ item.key }}"
-    state: "directory"
-    owner: "{{ config_owner_user }}"
-    group: "{{ config_owner_group }}"
-    mode: "0770"
-  become: true
-  when:
-    - inventory_hostname in groups[item.value.group]
-    - item.value.enabled | bool
-  with_dict: "{{ rally_services }}"
-
-- name: Check if policies shall be overwritten
-  stat:
-    path: "{{ item }}"
-  delegate_to: localhost
-  run_once: True
-  register: rally_policy
-  with_first_found:
-    - files: "{{ supported_policy_format_list }}"
-      paths:
-        - "{{ node_custom_config }}/rally/"
-      skip: true
-
-- name: Set rally policy file
-  set_fact:
-    rally_policy_file: "{{ rally_policy.results.0.stat.path | basename }}"
-    rally_policy_file_path: "{{ rally_policy.results.0.stat.path }}"
-  when:
-    - rally_policy.results
-
-- include_tasks: copy-certs.yml
-  when:
-    - kolla_copy_ca_into_containers | bool
-
-- name: Copying over config.json files for services
-  template:
-    src: "{{ item.key }}.json.j2"
-    dest: "{{ node_config_directory }}/{{ item.key }}/config.json"
-    mode: "0660"
-  become: true
-  when:
-    - item.value.enabled | bool
-    - inventory_hostname in groups[item.value.group]
-  with_dict: "{{ rally_services }}"
-  notify:
-    - Restart rally container
-
-- name: Copying over rally.conf
-  vars:
-    service_name: "{{ item.key }}"
-  merge_configs:
-    sources:
-      - "{{ role_path }}/templates/rally.conf.j2"
-      - "{{ node_custom_config }}/rally.conf"
-    dest: "{{ node_config_directory }}/{{ item.key }}/{{ item.key }}.conf"
-    mode: "0660"
-  become: true
-  when:
-    - item.value.enabled | bool
-    - inventory_hostname in groups[item.value.group]
-  with_dict: "{{ rally_services }}"
-  notify:
-    - Restart rally container
-
-- name: Copying over existing policy file
-  template:
-    src: "{{ rally_policy_file_path }}"
-    dest: "{{ node_config_directory }}/{{ item.key }}/{{ rally_policy_file }}"
-    mode: "0660"
-  become: true
-  when:
-    - rally_policy_file is defined
-    - inventory_hostname in groups[item.value.group]
-    - item.value.enabled | bool
-  with_dict: "{{ rally_services }}"
-  notify:
-    - Restart rally container
diff --git a/ansible/roles/rally/tasks/copy-certs.yml b/ansible/roles/rally/tasks/copy-certs.yml
deleted file mode 100644
index 6b2f3220a43120206941d9faf24ff07cf3e909d8..0000000000000000000000000000000000000000
--- a/ansible/roles/rally/tasks/copy-certs.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-- name: "Copy certificates and keys for {{ project_name }}"
-  import_role:
-    role: service-cert-copy
-  vars:
-    project_services: "{{ rally_services }}"
diff --git a/ansible/roles/rally/tasks/deploy-containers.yml b/ansible/roles/rally/tasks/deploy-containers.yml
deleted file mode 100644
index eb24ab5c7a7bfaf98f711ffe96f0b76120874b14..0000000000000000000000000000000000000000
--- a/ansible/roles/rally/tasks/deploy-containers.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-- import_tasks: check-containers.yml
diff --git a/ansible/roles/rally/tasks/deploy.yml b/ansible/roles/rally/tasks/deploy.yml
deleted file mode 100644
index d0b36cb78b21c3bc28c3c6958292e44ceda8d634..0000000000000000000000000000000000000000
--- a/ansible/roles/rally/tasks/deploy.yml
+++ /dev/null
@@ -1,9 +0,0 @@
----
-- import_tasks: config.yml
-
-- import_tasks: check-containers.yml
-
-- import_tasks: bootstrap.yml
-
-- name: Flush handlers
-  meta: flush_handlers
diff --git a/ansible/roles/rally/tasks/main.yml b/ansible/roles/rally/tasks/main.yml
deleted file mode 100644
index 24b9a183bad41a5b4e361746190b36bca57e60f5..0000000000000000000000000000000000000000
--- a/ansible/roles/rally/tasks/main.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: Warn about deprecation
-  debug:
-    msg: >
-      rally role is deprecated and will be removed in Xena
-
-- include_tasks: "{{ kolla_action }}.yml"
diff --git a/ansible/roles/rally/tasks/precheck.yml b/ansible/roles/rally/tasks/precheck.yml
deleted file mode 100644
index 0ea49ab7f1c0ffaabed456e383c8b4aef4418b96..0000000000000000000000000000000000000000
--- a/ansible/roles/rally/tasks/precheck.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-- import_role:
-    name: service-precheck
-  vars:
-    service_precheck_services: "{{ rally_services }}"
-    service_name: "{{ project_name }}"
diff --git a/ansible/roles/rally/tasks/pull.yml b/ansible/roles/rally/tasks/pull.yml
deleted file mode 100644
index 381dc8288238d9c68a05e4a9f7dccd656f619978..0000000000000000000000000000000000000000
--- a/ansible/roles/rally/tasks/pull.yml
+++ /dev/null
@@ -1,11 +0,0 @@
----
-- name: Pulling rally image
-  become: true
-  kolla_docker:
-    action: "pull_image"
-    common_options: "{{ docker_common_options }}"
-    image: "{{ item.value.image }}"
-  when:
-    - inventory_hostname in groups[item.value.group]
-    - item.value.enabled | bool
-  with_dict: "{{ rally_services }}"
diff --git a/ansible/roles/rally/tasks/reconfigure.yml b/ansible/roles/rally/tasks/reconfigure.yml
deleted file mode 100644
index 5b10a7e111766fff1f9dd187cdcb8fea97dcadd1..0000000000000000000000000000000000000000
--- a/ansible/roles/rally/tasks/reconfigure.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-- import_tasks: deploy.yml
diff --git a/ansible/roles/rally/tasks/stop.yml b/ansible/roles/rally/tasks/stop.yml
deleted file mode 100644
index ca8ea8080b3529bbdf1f4bd63f1a22117efd89c8..0000000000000000000000000000000000000000
--- a/ansible/roles/rally/tasks/stop.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-- import_role:
-    name: service-stop
-  vars:
-    project_services: "{{ rally_services }}"
-    service_name: "{{ project_name }}"
diff --git a/ansible/roles/rally/tasks/upgrade.yml b/ansible/roles/rally/tasks/upgrade.yml
deleted file mode 100644
index 6ba9f997992dcffee8153fbefd1b385d9ccdc694..0000000000000000000000000000000000000000
--- a/ansible/roles/rally/tasks/upgrade.yml
+++ /dev/null
@@ -1,9 +0,0 @@
----
-- import_tasks: config.yml
-
-- import_tasks: check-containers.yml
-
-- import_tasks: bootstrap_service.yml
-
-- name: Flush handlers
-  meta: flush_handlers
diff --git a/ansible/roles/rally/templates/rally.conf.j2 b/ansible/roles/rally/templates/rally.conf.j2
deleted file mode 100644
index a1a0a7ea1f5bb2bc66e2e499212a7f83e1e0b3c9..0000000000000000000000000000000000000000
--- a/ansible/roles/rally/templates/rally.conf.j2
+++ /dev/null
@@ -1,16 +0,0 @@
-[DEFAULT]
-debug = {{ openstack_logging_debug }}
-log_file = rally.log
-use_stderr = False
-log_dir = /var/log/kolla/rally/
-
-[database]
-connection = mysql+pymysql://{{ rally_database_user }}:{{ rally_database_password }}@{{ rally_database_address }}/{{ rally_database_name }}
-connection_recycle_time = {{ database_connection_recycle_time }}
-max_pool_size = {{ database_max_pool_size }}
-max_retries = -1
-
-{% if rally_policy_file is defined %}
-[oslo_policy]
-policy_file = {{ rally_policy_file }}
-{% endif %}
diff --git a/ansible/roles/rally/templates/rally.json.j2 b/ansible/roles/rally/templates/rally.json.j2
deleted file mode 100644
index a8ba2df6dbc498ea37b9828008bdb34f424e74e4..0000000000000000000000000000000000000000
--- a/ansible/roles/rally/templates/rally.json.j2
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-    "command": "sleep infinity",
-    "config_files":[
-        {
-            "source": "{{ container_config_directory }}/rally.conf",
-            "dest": "/etc/rally/rally.conf",
-            "owner": "rally",
-            "perm": "0600"
-        }{% if rally_policy_file is defined %},
-        {
-            "source": "{{ container_config_directory }}/{{ rally_policy_file }}",
-            "dest": "/etc/rally/{{ rally_policy_file }}",
-            "owner": "rally",
-            "perm": "0600"
-        }{% endif %}
-    ],
-    "permissions": [
-        {
-            "path": "/var/log/kolla/rally",
-            "owner": "rally:rally",
-            "recurse": true
-        }
-    ]
-}
diff --git a/ansible/site.yml b/ansible/site.yml
index 4aa26e80837e5640d568a7d13c04199c37f7e5d3..966501030273c193b0b8e2a6b6709e2deca85d5a 100644
--- a/ansible/site.yml
+++ b/ansible/site.yml
@@ -64,7 +64,6 @@
         - enable_prometheus_{{ enable_prometheus | bool }}
         - enable_qdrouterd_{{ enable_qdrouterd | bool }}
         - enable_rabbitmq_{{ enable_rabbitmq | bool }}
-        - enable_rally_{{ enable_rally | bool }}
         - enable_redis_{{ enable_redis | bool }}
         - enable_sahara_{{ enable_sahara | bool }}
         - enable_senlin_{{ enable_senlin | bool }}
@@ -958,17 +957,6 @@
         tags: designate,
         when: enable_designate | bool }
 
-- name: Apply role rally
-  gather_facts: false
-  hosts:
-    - rally
-    - '&enable_rally_True'
-  serial: '{{ kolla_serial|default("0") }}'
-  roles:
-    - { role: rally,
-        tags: rally,
-        when: enable_rally | bool }
-
 - name: Apply role vmtp
   gather_facts: false
   hosts:
diff --git a/etc/kolla/globals.yml b/etc/kolla/globals.yml
index e04e974c735658168fc7521a7426201862aa65c4..b05f8c55a973faa16a8c174251fe18a608a9b6c3 100644
--- a/etc/kolla/globals.yml
+++ b/etc/kolla/globals.yml
@@ -371,7 +371,6 @@
 #enable_placement: "{{ enable_nova | bool or enable_zun | bool }}"
 #enable_prometheus: "no"
 #enable_qdrouterd: "{{ 'yes' if om_rpc_transport == 'amqp' else 'no' }}"
-#enable_rally: "no"
 #enable_redis: "no"
 #enable_sahara: "no"
 #enable_senlin: "no"
diff --git a/etc/kolla/passwords.yml b/etc/kolla/passwords.yml
index a041513f5ab643d2e5653f5db8865277b5b965bc..32dcfebb88cd4946482d2a1bcebbd3c8478d0cb5 100644
--- a/etc/kolla/passwords.yml
+++ b/etc/kolla/passwords.yml
@@ -143,8 +143,6 @@ ceilometer_keystone_password:
 watcher_database_password:
 watcher_keystone_password:
 
-rally_database_password:
-
 senlin_database_password:
 senlin_keystone_password:
 
diff --git a/releasenotes/notes/remove-rally-deployment-6c7718e404b359a6.yaml b/releasenotes/notes/remove-rally-deployment-6c7718e404b359a6.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..3239b8c72fead50758a1f7e4e1df08963bd3ca1e
--- /dev/null
+++ b/releasenotes/notes/remove-rally-deployment-6c7718e404b359a6.yaml
@@ -0,0 +1,5 @@
+---
+upgrade:
+  - |
+    The ``Rally`` project is not a serive of openstack but its client.
+    Its images and support are removed since Xena cycle.
diff --git a/tests/templates/inventory.j2 b/tests/templates/inventory.j2
index 6f29899246aa492e6fd58bae36fb9d7a93aa414b..18f132460da9f15691d210b61474d876b9ab6a3e 100644
--- a/tests/templates/inventory.j2
+++ b/tests/templates/inventory.j2
@@ -276,9 +276,6 @@ control
 [watcher:children]
 control
 
-[rally:children]
-control
-
 [octavia:children]
 control