diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index fac73650ad71d02a8f29d9512778c26937f6ea8e..65ecd3c9699f283298f1d56d9ac615db6261a8e3 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -34,7 +34,7 @@ variables:
   RECOVER_CONTROL_PLANE_TEST: "false"
   RECOVER_CONTROL_PLANE_TEST_GROUPS: "etcd[2:],kube_control_plane[1:]"
   TERRAFORM_VERSION: 1.0.8
-  ANSIBLE_MAJOR_VERSION: "2.10"
+  ANSIBLE_MAJOR_VERSION: "2.11"
 
 before_script:
   - ./tests/scripts/rebase.sh
diff --git a/README.md b/README.md
index c7112f759c9350ecb9804bfb8cf8f7c8bf4dad08..05d497590cf0abe5564d0c3a25f77d32b91d86c7 100644
--- a/README.md
+++ b/README.md
@@ -163,7 +163,7 @@ Note: Upstart/SysV init based OS types are not supported.
 ## Requirements
 
 - **Minimum required version of Kubernetes is v1.21**
-- **Ansible v2.9.x, Jinja 2.11+ and python-netaddr is installed on the machine that will run Ansible commands**
+- **Ansible v2.11+, Jinja 2.11+ and python-netaddr is installed on the machine that will run Ansible commands**
 - The target servers must have **access to the Internet** in order to pull docker images. Otherwise, additional configuration is required (See [Offline Environment](docs/offline-environment.md))
 - The target servers are configured to allow **IPv4 forwarding**.
 - If using IPv6 for pods and services, the target servers are configured to allow **IPv6 forwarding**.
diff --git a/ansible.cfg b/ansible.cfg
index 79c2bc56c29345947af9e73d7a650e393b755451..cec8bcec9a9256804e095f1fe8ca3b2cde51b764 100644
--- a/ansible.cfg
+++ b/ansible.cfg
@@ -1,6 +1,6 @@
 [ssh_connection]
 pipelining=True
-ssh_args = -o ControlMaster=auto -o ControlPersist=30m -o ConnectionAttempts=100 -o UserKnownHostsFile=/dev/null
+ansible_ssh_args = -o ControlMaster=auto -o ControlPersist=30m -o ConnectionAttempts=100 -o UserKnownHostsFile=/dev/null
 #control_path = ~/.ssh/ansible-%%r@%%h:%%p
 [defaults]
 # https://github.com/ansible/ansible/issues/56930 (to ignore group names with - and .)
diff --git a/ansible_version.yml b/ansible_version.yml
index 755947e06c881a28b7df99478e2f48b341a4ffd7..74486830461abdc0b7b6ff746b707610271556bf 100644
--- a/ansible_version.yml
+++ b/ansible_version.yml
@@ -3,8 +3,7 @@
   gather_facts: false
   become: no
   vars:
-    minimal_ansible_version: 2.9.0
-    minimal_ansible_version_2_10: 2.10.11
+    minimal_ansible_version: 2.11.0
     maximal_ansible_version: 2.13.0
     ansible_connection: local
   tags: always
@@ -18,17 +17,6 @@
       tags:
         - check
 
-    - name: "Check Ansible version > {{ minimal_ansible_version_2_10 }} when using ansible 2.10"
-      assert:
-        msg: "When using Ansible 2.10, the minimum supported version is {{ minimal_ansible_version_2_10 }}"
-        that:
-          - ansible_version.string is version(minimal_ansible_version_2_10, ">=")
-          - ansible_version.string is version(maximal_ansible_version, "<")
-      when:
-        - ansible_version.string is version('2.10.0', ">=")
-      tags:
-        - check
-
     - name: "Check that python netaddr is installed"
       assert:
         msg: "Python netaddr is not present"
diff --git a/docs/ansible.md b/docs/ansible.md
index 972d5f82685b9723d138afd24eaf08bc3aa504ac..7d48a7fdf615762d66b8b468864267af9a99d40c 100644
--- a/docs/ansible.md
+++ b/docs/ansible.md
@@ -26,8 +26,6 @@ Based on the table below and the available python version for your ansible host
 
 | Ansible Version | Python Version |
 | --------------- | -------------- |
-| 2.9             | 2.7,3.5-3.8    |
-| 2.10            | 2.7,3.5-3.8    |
 | 2.11            | 2.7,3.5-3.9    |
 | 2.12            | 3.8-3.10       |
 
diff --git a/requirements-2.10.txt b/requirements-2.10.txt
deleted file mode 100644
index a320942a7e8a86d83914d93f97bdd169f0c78f79..0000000000000000000000000000000000000000
--- a/requirements-2.10.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-ansible==3.4.0
-ansible-base==2.10.15
-cryptography==2.8
-jinja2==2.11.3
-netaddr==0.7.19
-pbr==5.4.4
-jmespath==0.9.5
-ruamel.yaml==0.16.10
-ruamel.yaml.clib==0.2.6
-MarkupSafe==1.1.1
diff --git a/requirements-2.9.txt b/requirements-2.9.txt
deleted file mode 100644
index 8fe4a552d2e8b08291b28c1b9bb64b3c9b9e4393..0000000000000000000000000000000000000000
--- a/requirements-2.9.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-ansible==2.9.27
-cryptography==2.8
-jinja2==2.11.3
-netaddr==0.7.19
-pbr==5.4.4
-jmespath==0.9.5
-ruamel.yaml==0.16.10
-ruamel.yaml.clib==0.2.6 ; python_version >= '3.5'
-ruamel.yaml.clib==0.2.2 ; python_version < '3.5'
-MarkupSafe==1.1.1
diff --git a/requirements-2.9.yml b/requirements-2.9.yml
deleted file mode 100644
index e8034543d7a20fcbe10c8eb2743fc403e10595ca..0000000000000000000000000000000000000000
--- a/requirements-2.9.yml
+++ /dev/null
@@ -1,4 +0,0 @@
----
-collections:
-- name: community.general
-  version: '<3.0'
diff --git a/roles/download/tasks/download_container.yml b/roles/download/tasks/download_container.yml
index 95267578feba53e3aba66c58a33d9af682ca9044..41790fe15e1561c706f6babaa319de6482666604 100644
--- a/roles/download/tasks/download_container.yml
+++ b/roles/download/tasks/download_container.yml
@@ -83,7 +83,7 @@
       synchronize:
         src: "{{ image_path_final }}"
         dest: "{{ image_path_cached }}"
-        use_ssh_args: "{{ has_bastion | default(false) }}"
+        use_ssh_args: true
         mode: pull
       when:
         - not image_is_cached
@@ -95,7 +95,7 @@
       synchronize:
         src: "{{ image_path_cached }}"
         dest: "{{ image_path_final }}"
-        use_ssh_args: "{{ has_bastion | default(false) }}"
+        use_ssh_args: true
         mode: push
       delegate_facts: no
       register: upload_image
diff --git a/roles/download/tasks/download_file.yml b/roles/download/tasks/download_file.yml
index d84098648ab44864073ef051692473097110a9dc..2e054eff5f768054ae39b90b51514e83de26167f 100644
--- a/roles/download/tasks/download_file.yml
+++ b/roles/download/tasks/download_file.yml
@@ -103,7 +103,7 @@
     synchronize:
       src: "{{ file_path_cached }}"
       dest: "{{ file_path_cached }}"
-      use_ssh_args: "{{ has_bastion | default(false) }}"
+      use_ssh_args: true
       mode: pull
     when:
     - download_force_cache
@@ -114,7 +114,7 @@
     synchronize:
       src: "{{ file_path_cached }}"
       dest: "{{ download.dest }}"
-      use_ssh_args: "{{ has_bastion | default(false) }}"
+      use_ssh_args: true
       mode: push
     register: get_task
     until: get_task is succeeded
diff --git a/tests/cloud_playbooks/roles/packet-ci/templates/inventory.j2 b/tests/cloud_playbooks/roles/packet-ci/templates/inventory.j2
index f8f76d08ee7a85bcd1f50806859b5886c39490e0..c49d582f42dcd1324c557a97b0d99e43cd2c95b7 100644
--- a/tests/cloud_playbooks/roles/packet-ci/templates/inventory.j2
+++ b/tests/cloud_playbooks/roles/packet-ci/templates/inventory.j2
@@ -1,6 +1,6 @@
 [all]
 {% for instance in vms.results %}
-instance-{{ loop.index }} ansible_ssh_host={{instance.stdout}}
+instance-{{ loop.index }} ansible_host={{instance.stdout}}
 {% endfor %}
 
 {% if mode is defined and mode in ["separate", "separate-scale"] %}
diff --git a/tests/cloud_playbooks/wait-for-ssh.yml b/tests/cloud_playbooks/wait-for-ssh.yml
index 417a541f4a831e61514842f6c836173227eefbfe..7c439d9a1eaf31aeddb8b87b179d60aac2eec9e6 100644
--- a/tests/cloud_playbooks/wait-for-ssh.yml
+++ b/tests/cloud_playbooks/wait-for-ssh.yml
@@ -6,7 +6,7 @@
   tasks:
   - name: Wait until SSH is available
     wait_for:
-      host: "{{ ansible_ssh_host }}"
+      host: "{{ ansible_host }}"
       port: 22
       timeout: 240
     delegate_to: localhost
diff --git a/tests/requirements-2.10.txt b/tests/requirements-2.10.txt
deleted file mode 100644
index 0d0cd65655ccb493170a02e483197ec3f0e707b4..0000000000000000000000000000000000000000
--- a/tests/requirements-2.10.txt
+++ /dev/null
@@ -1,11 +0,0 @@
--r ../requirements-2.10.txt
-yamllint==1.19.0
-apache-libcloud==2.2.1
-tox==3.11.1
-dopy==0.3.7
-ansible-lint==5.4.0
-molecule==3.0.6
-molecule-vagrant==0.3
-testinfra==5.2.2
-python-vagrant==0.5.15
-ara[server]==1.5.7
diff --git a/tests/requirements-2.9.txt b/tests/requirements-2.9.txt
deleted file mode 100644
index aca01027cc7c2d219cc4930dd53d4eb1f46febc6..0000000000000000000000000000000000000000
--- a/tests/requirements-2.9.txt
+++ /dev/null
@@ -1,14 +0,0 @@
--r ../requirements-2.9.txt
-yamllint==1.19.0
-apache-libcloud==2.2.1
-tox==3.11.1
-dopy==0.3.7
-ansible-lint==5.4.0 ; python_version >= '3.0'
-ansible-lint==4.2.0 ; python_version < '3.0'
-molecule==3.0.6 ; python_version >= '3.0'
-molecule==3.0.2 ; python_version < '3.0'
-molecule-vagrant==0.3
-testinfra==5.2.2 ; python_version >= '3.0'
-testinfra==3.4.0 ; python_version < '3.0'
-python-vagrant==0.5.15
-ara[server]==1.5.7