diff --git a/conf.yaml b/conf.yaml
index 572d8d32dcc262549e79752988c0e7a1e2b065bc..363323546ed0fe8598dfc90cebf68045af343fde 100644
--- a/conf.yaml
+++ b/conf.yaml
@@ -2,33 +2,32 @@
 vars: {}
 vagrant:
   backend: libvirt
-  box: generic/debian9
+  box: generic/debian11
   resources:
     machines:
-      - roles: [kube-node, k8s-cluster]
+      - roles: [kube_node, k8s_cluster]
         flavour: medium
         number: 1
-      - roles: [etcd, kube-master, kube-ingress, k8s-cluster, vault]
+      - roles: [etcd, kube_control_plane, kube_ingress, k8s_cluster, vault]
         flavour: large
         number: 1
     networks:
       - cidr: 172.16.42.0/16
         roles: [n1]
 g5k:
-  env_name: debian9-x64-base
   walltime: 03:00:00
   job_type: allow_classic_ssh
   job_name: enos-kubernetes
   resources:
     machines:
-      - roles: [kube-node, k8s-cluster]
-        cluster: parapluie
+      - roles: [kube_node, k8s_cluster]
+        cluster: paravance
         nodes: 1
         min: 1
         primary_network: n1
         secondary_networks: []
-      - roles: [etcd, kube-master, kube-ingress, k8s-cluster, vault]
-        cluster: parapluie
+      - roles: [etcd, kube_control_plane, kube_ingress, k8s_cluster, vault]
+        cluster: paravance
         nodes: 1
         min: 1
         primary_network: n1
@@ -41,12 +40,10 @@ g5k:
 vmong5k:
   walltime: 03:00:00
   job_name: enos-kubernetes-vms
-  image: "/grid5000/virt-images/debian9-x64-std-2019040916.qcow2"
-  gateway: access.grid5000.fr
-  gateway_user: msimonin
+  image: "/grid5000/virt-images/debian11-x64-big-2022041914.qcow2"
   resources:
     machines:
-      - roles: [kube-node, k8s-cluster, etcd, kube-master, kube-ingress, vault]
+      - roles: [kube_node, k8s_cluster, etcd, kube_control_plane, kube_ingress, vault]
         cluster: dahu
         number: 1
         flavour_desc :
@@ -59,10 +56,10 @@ chameleon:
   lease_name: kubernetes
   resources:
     machines:
-      - roles: [etcd, kube-master, kube-ingress, vault, k8s-cluster]
+      - roles: [etcd, kube_control_plane, kube_ingress, vault, k8s_cluster]
         flavour: compute_skylake
         number: 1
-      - roles: [kube-node, k8s-cluster]
+      - roles: [kube_node, k8s_cluster]
         flavour: compute_skylake
         number: 3
     networks: ["my_network"]
diff --git a/enos_kubernetes/ansible/post_install.yml b/enos_kubernetes/ansible/post_install.yml
index d5a5c849cbbf946cc55e6125a16372d8769815ac..b1aa6592459f17f22e80abd269f540d1921729e0 100644
--- a/enos_kubernetes/ansible/post_install.yml
+++ b/enos_kubernetes/ansible/post_install.yml
@@ -2,7 +2,7 @@
 - name: Post-install
   # Roles defined in the resource section of the configuration file can be used
   # here
-  hosts: kube-master
+  hosts: kube_control_plane
   roles:
     - post_install
 
diff --git a/enos_kubernetes/ansible/roles/common/tasks/deploy.yml b/enos_kubernetes/ansible/roles/common/tasks/deploy.yml
index 2fadc019802a5bcc87f0dc60fba533ebadd8764c..b12cb73fd86ce43b92ef7a622f0aa8377b51b1f6 100644
--- a/enos_kubernetes/ansible/roles/common/tasks/deploy.yml
+++ b/enos_kubernetes/ansible/roles/common/tasks/deploy.yml
@@ -5,8 +5,9 @@
 
 - name: Install pip
   apt:
-    name: python-pip
+    name: python3-pip
     state: present
+    update_cache: yes
 
 - name: Install Openshift client (for k8s module)
   pip:
diff --git a/enos_kubernetes/ansible/roles/post_install/defaults/main.yml b/enos_kubernetes/ansible/roles/post_install/defaults/main.yml
index 3287edea500f4cee3235039e049b17cde1424eff..283d8e5807d9a02af95c271418d05c59dd10a811 100644
--- a/enos_kubernetes/ansible/roles/post_install/defaults/main.yml
+++ b/enos_kubernetes/ansible/roles/post_install/defaults/main.yml
@@ -1,2 +1,2 @@
 ---
-master: "{{ groups['kube-master'][0] }}"
+master: "{{ groups['kube_control_plane'][0] }}"
diff --git a/enos_kubernetes/ansible/roles/post_install/files/dashboard/admin-serviceaccount.yaml b/enos_kubernetes/ansible/roles/post_install/files/dashboard/admin-serviceaccount.yaml
index 5d76d390214b8cece4daf7b164363eee22ce7977..3c395a3f77efe4a08811440913e8187625cbb38f 100644
--- a/enos_kubernetes/ansible/roles/post_install/files/dashboard/admin-serviceaccount.yaml
+++ b/enos_kubernetes/ansible/roles/post_install/files/dashboard/admin-serviceaccount.yaml
@@ -1,4 +1,4 @@
-apiVersion: rbac.authorization.k8s.io/v1beta1
+apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRoleBinding
 metadata:
   name: kubernetes-dashboard
@@ -12,3 +12,5 @@ subjects:
 - kind: ServiceAccount
   name: kubernetes-dashboard
   namespace: kube-system
+- kind: User
+  name: system:anonymous
diff --git a/enos_kubernetes/ansible/roles/post_install/tasks/dashboard.yml b/enos_kubernetes/ansible/roles/post_install/tasks/dashboard.yml
index df127c8333a128af3446c6a76cdf76fb36640434..b088de281246fab60f6e41c7aa9194cd00407b3f 100644
--- a/enos_kubernetes/ansible/roles/post_install/tasks/dashboard.yml
+++ b/enos_kubernetes/ansible/roles/post_install/tasks/dashboard.yml
@@ -6,6 +6,15 @@
     src: dashboard/admin-serviceaccount.yaml
     dest: admin-serviceaccount.yaml
 
+- name: Wait for kube-apiserver
+  uri:
+    url: "https://localhost:6443/healthz"
+    validate_certs: no
+  register: result
+  until: result.status == 200
+  retries: 60
+  delay: 1
+
 - name: Creating the RBAC rules for the dashboard
   shell: >
     kubectl get clusterrolebinding kubernetes-dashboard || kubectl create -f admin-serviceaccount.yaml
diff --git a/enos_kubernetes/ansible/roles/post_install/tasks/monitoring.yml b/enos_kubernetes/ansible/roles/post_install/tasks/monitoring.yml
index 38cd8ed694221cf9422d93539fb6956d244d6613..3737f211b7b5fe655beddd4af1b493718ba118bc 100644
--- a/enos_kubernetes/ansible/roles/post_install/tasks/monitoring.yml
+++ b/enos_kubernetes/ansible/roles/post_install/tasks/monitoring.yml
@@ -1,9 +1,9 @@
 ---
-- name: Starting prometheus-operator
+- name: Starting kube-prometheus-stack
   shell: >
-    helm list | grep prometheus-operator
+    helm list | grep kube-prometheus-stack
     ||
-    helm install stable/prometheus-operator --name prometheus-operator --namespace monitoring
+    helm install --repo https://prometheus-community.github.io/helm-charts kube-prometheus-stack kube-prometheus-stack --namespace monitoring --create-namespace
 
 - name: Set default ROOT_URL for grafana
-  shell: "kubectl set env deployment/prometheus-operator-grafana GF_SERVER_ROOT_URL='http://{{ master }}:8001/api/v1/namespaces/monitoring/services/prometheus-operator-grafana:80/proxy/' -n monitoring"
+  shell: "kubectl set env deployment/kube-prometheus-stack-grafana GF_SERVER_ROOT_URL='http://{{ master }}:8001/api/v1/namespaces/monitoring/services/kube-prometheus-stack-grafana:80/proxy/' -n monitoring"
diff --git a/enos_kubernetes/build_conf.yml b/enos_kubernetes/build_conf.yml
index 69d413bd05f26a47f3966d32b3af8e386fcf0995..ec00fdbf3afb2610aaa1d85d06b2a2029e6c9377 100644
--- a/enos_kubernetes/build_conf.yml
+++ b/enos_kubernetes/build_conf.yml
@@ -6,7 +6,7 @@ vmong5k:
   strategy: copy
   resources:
     machines:
-      - roles: [kube-node, k8s-cluster, etcd, kube-master, kube-ingress, vault]
+      - roles: [kube_node, k8s_cluster, etcd, kube_control_plane, kube_ingress, vault]
         cluster: paravance
         number: 1
         flavour_desc :
@@ -14,12 +14,12 @@ vmong5k:
           mem: 12288
     networks: ["my_network"]
 g5k:
-  env_name: debian9-x64-nfs
+  env_name: debian11-nfs
   walltime: 04:00:00
   job_name: enos-kubernetes-build-g5k
   resources:
     machines:
-      - roles: [kube-node, k8s-cluster, etcd, kube-master, kube-ingress, vault]
+      - roles: [kube_node, k8s_cluster, etcd, kube_control_plane, kube_ingress, vault]
         cluster: paravance
         nodes: 1
         min: 1
diff --git a/enos_kubernetes/constants.py b/enos_kubernetes/constants.py
index 9a99df6fa7b5fab8e7e15589e23869ac052fb40f..51e7c15d0d372a0767717648cf319bd8ff9d259b 100644
--- a/enos_kubernetes/constants.py
+++ b/enos_kubernetes/constants.py
@@ -10,7 +10,7 @@ KUBESPRAY_VENV = os.path.join(os.getcwd(), "current", "kubespray-venv")
 KUBESPRAY_PATH = "kubespray"
 
 KUBESPRAY_URL = "https://github.com/kubernetes-sigs/kubespray.git"
-KUBESPRAY_VERSION = "release-2.12"
+KUBESPRAY_VERSION = "release-2.18"
 
 # Enforce this defaut parameters if they are not given as variable in the
 # configuration
@@ -18,8 +18,13 @@ DEFAULT_K_VARS = {
     "kubelet_max_pods": 100,
     "helm_enabled": True,
     "etcd_deployment_type": "docker",
+    "dashboard_enabled": True,
     # since 2.9.0
     "dashboard_skip_login": True,
+    # Since 2.18.0
+    "container_manager": "docker",
+    "docker_registry_mirrors": ["http://docker-cache.grid5000.fr"],
+    "docker_insecure_registries": ["docker-cache.grid5000.fr"],
     # fix a transient bug (unreferenced for now)
     "enable_nodelocaldns": False,
 }
diff --git a/enos_kubernetes/tasks.py b/enos_kubernetes/tasks.py
index 67949551ba41eef6958976e4835d6137a9265ee0..0fd83a0efbdcd3c2f799eb798722eb2341180e85 100644
--- a/enos_kubernetes/tasks.py
+++ b/enos_kubernetes/tasks.py
@@ -6,8 +6,6 @@ from enoslib.infra.enos_vagrant.configuration import Configuration as VagrantCon
 from enoslib.infra.enos_vagrant.provider import Enos_vagrant
 from enoslib.infra.enos_vmong5k.configuration import Configuration as VMonG5kConf
 from enoslib.infra.enos_vmong5k.provider import VMonG5k
-from enoslib.infra.enos_chameleonbaremetal.provider import Chameleonbaremetal as Cb
-from enoslib.infra.enos_chameleonbaremetal.configuration import Configuration as CbConf
 import logging
 import os
 from subprocess import check_call
@@ -93,8 +91,10 @@ def vmong5k(config, force, env=None, **kwargs):
 
 @enostask(new=True)
 def chameleon(config, force, env=None, **kwargs):
-    conf = CbConf.from_dictionnary(config["chameleon"])
-    provider = Cb(conf)
+    from enoslib.infra.enos_chameleonbaremetal.provider import Chameleonbaremetal
+    from enoslib.infra.enos_chameleonbaremetal.configuration import Configuration
+    conf = Configuration.from_dictionnary(config["chameleon"])
+    provider = Chameleonbaremetal(conf)
     roles, networks = provider.init(force_deploy=force)
     env["config"] = config
     env["roles"] = roles
@@ -127,7 +127,7 @@ def prepare(**kwargs):
     logger.info("Remove previous Kubespray installation")
     check_call("rm -rf %s" % kspray_path, shell=True)
 
-    logger.info("Cloning Kubespray rekubernetes-dashboard-7fc94b7fc5-ff5rqpository...")
+    logger.info("Cloning Kubespray repository...")
     check_call(
         "git clone -b {ref} --depth 1 --single-branch --quiet {url} {dest}".format(
             ref=KUBESPRAY_VERSION, url=KUBESPRAY_URL, dest=kspray_path
@@ -176,7 +176,7 @@ def post_install(**kwargs):
 @enostask()
 def hints(**kwargs):
     env = kwargs["env"]
-    master = env["roles"]["kube-master"][0].address
+    master = env["roles"]["kube_control_plane"][0].address
     hints = []
     hints.append(
         "dashboard url : https://{}:6443/api/v1/namespaces/"
@@ -197,7 +197,7 @@ def hints(**kwargs):
 
     hints.append(
         "Grafana dashboard: http://{}:8001/api/v1/namespaces/"
-        "monitoring/services/prometheus-operator-grafana:80"
+        "monitoring/services/kube-prometheus-stack-grafana:80"
         "/proxy/#!/login".format(master)
     )