diff --git a/docs/CNI/calico.md b/docs/CNI/calico.md
index 91642682795a58fb4378b98fdc8ffbcbb1602caf..24c646b2f9d8d2bfd8d01691dc15063e152b086b 100644
--- a/docs/CNI/calico.md
+++ b/docs/CNI/calico.md
@@ -127,8 +127,7 @@ recommended here:
 You need to edit your inventory and add:
 
 * `calico_rr` group with nodes in it. `calico_rr` can be combined with
-  `kube_node` and/or `kube_control_plane`. `calico_rr` group also must be a child
-   group of `k8s_cluster` group.
+  `kube_node` and/or `kube_control_plane`.
 * `cluster_id` by route reflector node/group (see details [here](https://hub.docker.com/r/calico/routereflector/))
 
 Here's an example of Kubespray inventory with standalone route reflectors:
@@ -157,11 +156,6 @@ node3
 node4
 node5
 
-[k8s_cluster:children]
-kube_node
-kube_control_plane
-calico_rr
-
 [calico_rr]
 rr0
 rr1
diff --git a/docs/ansible/ansible.md b/docs/ansible/ansible.md
index 7871300ff2606ded700214bfd8150123f568f224..5e79d966d9032c7622f920d011101896886ca360 100644
--- a/docs/ansible/ansible.md
+++ b/docs/ansible/ansible.md
@@ -42,14 +42,6 @@ The inventory is composed of 3 groups:
 * **kube_control_plane** : list of servers where kubernetes control plane components (apiserver, scheduler, controller) will run.
 * **etcd**: list of servers to compose the etcd server. You should have at least 3 servers for failover purpose.
 
-Note: do not modify the children of _k8s_cluster_, like putting
-the _etcd_ group into the _k8s_cluster_, unless you are certain
-to do that and you have it fully contained in the latter:
-
-```ShellSession
-etcd ⊂ k8s_cluster => kube_node ∩ etcd = etcd
-```
-
 When _kube_node_ contains _etcd_, you define your etcd cluster to be as well schedulable for Kubernetes workloads.
 If you want it a standalone, make sure those groups do not intersect.
 If you want the server to act both as control-plane and node, the server must be defined
@@ -62,6 +54,9 @@ There are also two special groups:
 * **calico_rr** : explained for [advanced Calico networking cases](/docs/CNI/calico.md)
 * **bastion** : configure a bastion host if your nodes are not directly reachable
 
+Lastly, the **k8s_cluster** is dynamically defined as the union of **kube_node**, **kube_control_plane** and **calico_rr**.
+This is used internally and for the purpose of defining whole cluster variables (`<inventory>/group_vars/k8s_cluster/*.yml`)
+
 Below is a complete inventory example:
 
 ```ini
@@ -89,10 +84,6 @@ node3
 node4
 node5
 node6
-
-[k8s_cluster:children]
-kube_node
-kube_control_plane
 ```
 
 ## Group vars and overriding variables precedence
diff --git a/docs/operations/integration.md b/docs/operations/integration.md
index 1060fbc6c4d14afd6c2321132de371d870a168a5..7764b882f3745e8a42eb434571b05c271f763c58 100644
--- a/docs/operations/integration.md
+++ b/docs/operations/integration.md
@@ -71,9 +71,6 @@
    [kube_node:children]
    kubenode
 
-   [k8s_cluster:children]
-   kubernetes
-
    [etcd:children]
    kubemaster
    kubemaster-ha
@@ -81,9 +78,6 @@
    [kube_control_plane:children]
    kubemaster
    kubemaster-ha
-
-   [kubespray:children]
-   kubernetes
    ```
 
 * Last entry here needed to apply kubespray.yml config file, renamed from all.yml of kubespray project.
diff --git a/inventory/local/hosts.ini b/inventory/local/hosts.ini
index 4a6197e49b7ffc1c3d705e65b777c93550bf225d..6506b9696d28f3688ad50a611cca59c9ab900577 100644
--- a/inventory/local/hosts.ini
+++ b/inventory/local/hosts.ini
@@ -8,7 +8,3 @@ node1
 
 [kube_node]
 node1
-
-[k8s_cluster:children]
-kube_node
-kube_control_plane
diff --git a/inventory/sample/inventory.ini b/inventory/sample/inventory.ini
index 99a630922372bfba602d500d34abf73cec144674..3c87df93d2ccf265e36c135fb12ef64bc1f21d17 100644
--- a/inventory/sample/inventory.ini
+++ b/inventory/sample/inventory.ini
@@ -29,10 +29,3 @@
 # node4
 # node5
 # node6
-
-[calico_rr]
-
-[k8s_cluster:children]
-kube_control_plane
-kube_node
-calico_rr