diff --git a/docs/sysadm/deployment/upgrade-swh-service.rst b/docs/sysadm/deployment/upgrade-swh-service.rst
index 9965183ee182120d6dcc67a1e03cc1a3979ae9d4..da449daf0ba7eeda05726de2e29b16987644f317 100644
--- a/docs/sysadm/deployment/upgrade-swh-service.rst
+++ b/docs/sysadm/deployment/upgrade-swh-service.rst
@@ -227,6 +227,10 @@ This new deployment involves docker images which are exposing script/services wh
 running in a virtual python frozen environment. Those versioned images are then
 referenced in a specific helm chart which is deployed in a kubernetes rancher cluster.
 
+That cluster runs on machines nodes (with :ref:`specific labels <labels-on-nodes>`) onto which are scheduled pods
+with containers inside. Those containers are the ones spawning the docker image as
+applications.
+
 Those docker images are built out of a declared Dockerfile in the `swh-apps`_
 repository.
 
@@ -293,9 +297,9 @@ In the `swh-chart`_ repository, update the `values file
 <https://gitlab.softwareheritage.org/swh/infra/ci-cd/swh-charts/-/blob/production/values-swh-application-versions.yaml>`_
 with the corresponding new changed version.
 
-:ref:`ArgoCD <argocd-config>` will be in charge of deploying the changes in a rolling
-upgrade fashion.
-
+Check that the nodes are properly labelled to receive the application. Then :ref:`ArgoCD
+<argocd-config>` will be in charge of deploying the changes in a rolling upgrade
+fashion.
 
 .. _update-app-frozen-requirements:
 
@@ -378,5 +382,36 @@ Commit and tag
 
 Commit and tag the changes.
 
+.. _labels-on-nodes:
+
+Labels on nodes
+~~~~~~~~~~~~~~~
+
+For now, we are using dedicated labels on nodes to run specific applications:
+
+- swh/rpc=true: rpc services, e.g. graphql
+- swh/cooker=true: cooker worker
+- swh/indexer=true: indexer journal client
+- swh/lister=true: lister worker
+- swh/loader=true: loader worker
+- swh/loader-metadata=true: loader-metadata worker
+
+In the following example:
+
+- cluster in {archive-staging-rke2, archive-production-rke2})
+- $node is an actual node hostname e.g. rancher-node-staging-rke2-worker[1, ...] or
+  rancher-node-metal0{1,2} (for production)
+- $new-label is a label of the form: ``swh/$service=true``
+
+To check the actual list of labels
+
+    kubectl --context $cluster get nodes --show-labels
+
+To install a label on a node:
+
+    kubectl --context $cluster label --overwrite node \
+      $node $new-label
+
+
 .. _swh-apps: https://gitlab.softwareheritage.org/swh/infra/swh-apps/
 .. _swh-chart: https://gitlab.softwareheritage.org/infra/ci-cd/swh-charts