diff --git a/clusters/k8s01/flux-system/gotk-components.yaml b/clusters/k8s01/flux-system/gotk-components.yaml
index 2ab4f14f41c8c1998115d9cff6e8915eec58a980..d299599c643351421281a892b6114dba7dcf31e7 100644
--- a/clusters/k8s01/flux-system/gotk-components.yaml
+++ b/clusters/k8s01/flux-system/gotk-components.yaml
@@ -1,6 +1,6 @@
 ---
 # This manifest was generated by flux. DO NOT EDIT.
-# Flux Version: v2.2.0
+# Flux Version: v2.2.1
 # Components: source-controller,kustomize-controller,helm-controller,notification-controller
 apiVersion: v1
 kind: Namespace
@@ -8,7 +8,7 @@ metadata:
   labels:
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
     pod-security.kubernetes.io/warn: restricted
     pod-security.kubernetes.io/warn-version: latest
   name: flux-system
@@ -19,7 +19,7 @@ metadata:
   labels:
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: allow-egress
   namespace: flux-system
 spec:
@@ -39,7 +39,7 @@ metadata:
   labels:
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: allow-scraping
   namespace: flux-system
 spec:
@@ -59,7 +59,7 @@ metadata:
   labels:
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: allow-webhooks
   namespace: flux-system
 spec:
@@ -78,7 +78,7 @@ metadata:
   labels:
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: critical-pods-flux-system
   namespace: flux-system
 spec:
@@ -98,7 +98,7 @@ metadata:
   labels:
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: crd-controller-flux-system
 rules:
 - apiGroups:
@@ -188,7 +188,7 @@ metadata:
   labels:
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
     rbac.authorization.k8s.io/aggregate-to-admin: "true"
     rbac.authorization.k8s.io/aggregate-to-edit: "true"
   name: flux-edit-flux-system
@@ -214,7 +214,7 @@ metadata:
   labels:
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
     rbac.authorization.k8s.io/aggregate-to-admin: "true"
     rbac.authorization.k8s.io/aggregate-to-edit: "true"
     rbac.authorization.k8s.io/aggregate-to-view: "true"
@@ -239,7 +239,7 @@ metadata:
   labels:
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: cluster-reconciler-flux-system
 roleRef:
   apiGroup: rbac.authorization.k8s.io
@@ -259,7 +259,7 @@ metadata:
   labels:
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: crd-controller-flux-system
 roleRef:
   apiGroup: rbac.authorization.k8s.io
@@ -294,7 +294,7 @@ metadata:
     app.kubernetes.io/component: source-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: buckets.source.toolkit.fluxcd.io
 spec:
   group: source.toolkit.fluxcd.io
@@ -816,7 +816,7 @@ metadata:
     app.kubernetes.io/component: source-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: gitrepositories.source.toolkit.fluxcd.io
 spec:
   group: source.toolkit.fluxcd.io
@@ -2017,7 +2017,7 @@ metadata:
     app.kubernetes.io/component: source-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: helmcharts.source.toolkit.fluxcd.io
 spec:
   group: source.toolkit.fluxcd.io
@@ -2639,7 +2639,7 @@ metadata:
     app.kubernetes.io/component: source-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: helmrepositories.source.toolkit.fluxcd.io
 spec:
   group: source.toolkit.fluxcd.io
@@ -3168,7 +3168,7 @@ metadata:
     app.kubernetes.io/component: source-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: ocirepositories.source.toolkit.fluxcd.io
 spec:
   group: source.toolkit.fluxcd.io
@@ -3557,7 +3557,7 @@ metadata:
     app.kubernetes.io/component: source-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: source-controller
   namespace: flux-system
 ---
@@ -3568,7 +3568,7 @@ metadata:
     app.kubernetes.io/component: source-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
     control-plane: controller
   name: source-controller
   namespace: flux-system
@@ -3589,7 +3589,7 @@ metadata:
     app.kubernetes.io/component: source-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
     control-plane: controller
   name: source-controller
   namespace: flux-system
@@ -3624,7 +3624,7 @@ spec:
               fieldPath: metadata.namespace
         - name: TUF_ROOT
           value: /tmp/.sigstore
-        image: ghcr.io/fluxcd/source-controller:v1.2.2
+        image: ghcr.io/fluxcd/source-controller:v1.2.3
         imagePullPolicy: IfNotPresent
         livenessProbe:
           httpGet:
@@ -3688,7 +3688,7 @@ metadata:
     app.kubernetes.io/component: kustomize-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: kustomizations.kustomize.toolkit.fluxcd.io
 spec:
   group: kustomize.toolkit.fluxcd.io
@@ -5320,7 +5320,7 @@ metadata:
     app.kubernetes.io/component: kustomize-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: kustomize-controller
   namespace: flux-system
 ---
@@ -5331,7 +5331,7 @@ metadata:
     app.kubernetes.io/component: kustomize-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
     control-plane: controller
   name: kustomize-controller
   namespace: flux-system
@@ -5360,7 +5360,7 @@ spec:
           valueFrom:
             fieldRef:
               fieldPath: metadata.namespace
-        image: ghcr.io/fluxcd/kustomize-controller:v1.2.0
+        image: ghcr.io/fluxcd/kustomize-controller:v1.2.1
         imagePullPolicy: IfNotPresent
         livenessProbe:
           httpGet:
@@ -5417,7 +5417,7 @@ metadata:
     app.kubernetes.io/component: helm-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: helmreleases.helm.toolkit.fluxcd.io
 spec:
   group: helm.toolkit.fluxcd.io
@@ -5613,6 +5613,82 @@ spec:
                   - name
                   type: object
                 type: array
+              driftDetection:
+                description: "DriftDetection holds the configuration for detecting
+                  and handling differences between the manifest in the Helm storage
+                  and the resources currently existing in the cluster. \n Note: this
+                  field is provisional to the v2beta2 API, and not actively used by
+                  v2beta1 HelmReleases."
+                properties:
+                  ignore:
+                    description: Ignore contains a list of rules for specifying which
+                      changes to ignore during diffing.
+                    items:
+                      description: IgnoreRule defines a rule to selectively disregard
+                        specific changes during the drift detection process.
+                      properties:
+                        paths:
+                          description: Paths is a list of JSON Pointer (RFC 6901)
+                            paths to be excluded from consideration in a Kubernetes
+                            object.
+                          items:
+                            type: string
+                          type: array
+                        target:
+                          description: Target is a selector for specifying Kubernetes
+                            objects to which this rule applies. If Target is not set,
+                            the Paths will be ignored for all Kubernetes objects within
+                            the manifest of the Helm release.
+                          properties:
+                            annotationSelector:
+                              description: AnnotationSelector is a string that follows
+                                the label selection expression https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api
+                                It matches with the resource annotations.
+                              type: string
+                            group:
+                              description: Group is the API group to select resources
+                                from. Together with Version and Kind it is capable
+                                of unambiguously identifying and/or selecting resources.
+                                https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md
+                              type: string
+                            kind:
+                              description: Kind of the API Group to select resources
+                                from. Together with Group and Version it is capable
+                                of unambiguously identifying and/or selecting resources.
+                                https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md
+                              type: string
+                            labelSelector:
+                              description: LabelSelector is a string that follows
+                                the label selection expression https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api
+                                It matches with the resource labels.
+                              type: string
+                            name:
+                              description: Name to match resources with.
+                              type: string
+                            namespace:
+                              description: Namespace to select resources from.
+                              type: string
+                            version:
+                              description: Version of the API Group to select resources
+                                from. Together with Group and Kind it is capable of
+                                unambiguously identifying and/or selecting resources.
+                                https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md
+                              type: string
+                          type: object
+                      required:
+                      - paths
+                      type: object
+                    type: array
+                  mode:
+                    description: Mode defines how differences should be handled between
+                      the Helm manifest and the manifest currently applied to the
+                      cluster. If not explicitly set, it defaults to DiffModeDisabled.
+                    enum:
+                    - enabled
+                    - warn
+                    - disabled
+                    type: string
+                type: object
               install:
                 description: Install holds the configuration for Helm install actions
                   for this HelmRelease.
@@ -6425,11 +6501,23 @@ spec:
                 description: LastAttemptedValuesChecksum is the SHA1 checksum of the
                   values of the last reconciliation attempt.
                 type: string
+              lastHandledForceAt:
+                description: "LastHandledForceAt holds the value of the most recent
+                  force request value, so a change of the annotation value can be
+                  detected. \n Note: this field is provisional to the v2beta2 API,
+                  and not actively used by v2beta1 HelmReleases."
+                type: string
               lastHandledReconcileAt:
                 description: LastHandledReconcileAt holds the value of the most recent
                   reconcile request value, so a change of the annotation value can
                   be detected.
                 type: string
+              lastHandledResetAt:
+                description: "LastHandledResetAt holds the value of the most recent
+                  reset request value, so a change of the annotation value can be
+                  detected. \n Note: this field is provisional to the v2beta2 API,
+                  and not actively used by v2beta1 HelmReleases."
+                type: string
               lastReleaseRevision:
                 description: LastReleaseRevision is the revision of the last successful
                   Helm release.
@@ -7589,7 +7677,7 @@ metadata:
     app.kubernetes.io/component: helm-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: helm-controller
   namespace: flux-system
 ---
@@ -7600,7 +7688,7 @@ metadata:
     app.kubernetes.io/component: helm-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
     control-plane: controller
   name: helm-controller
   namespace: flux-system
@@ -7629,7 +7717,7 @@ spec:
           valueFrom:
             fieldRef:
               fieldPath: metadata.namespace
-        image: ghcr.io/fluxcd/helm-controller:v0.37.0
+        image: ghcr.io/fluxcd/helm-controller:v0.37.1
         imagePullPolicy: IfNotPresent
         livenessProbe:
           httpGet:
@@ -7686,7 +7774,7 @@ metadata:
     app.kubernetes.io/component: notification-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: alerts.notification.toolkit.fluxcd.io
 spec:
   group: notification.toolkit.fluxcd.io
@@ -8258,7 +8346,7 @@ metadata:
     app.kubernetes.io/component: notification-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: providers.notification.toolkit.fluxcd.io
 spec:
   group: notification.toolkit.fluxcd.io
@@ -8712,6 +8800,11 @@ spec:
                   should be posted.
                 maxLength: 2048
                 type: string
+              interval:
+                description: Interval at which to reconcile the Provider with its
+                  Secret references. Deprecated and not used in v1beta3.
+                pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$
+                type: string
               proxy:
                 description: Proxy the HTTP/S address of the proxy server.
                 maxLength: 2048
@@ -8787,7 +8880,7 @@ metadata:
     app.kubernetes.io/component: notification-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: receivers.notification.toolkit.fluxcd.io
 spec:
   group: notification.toolkit.fluxcd.io
@@ -9453,7 +9546,7 @@ metadata:
     app.kubernetes.io/component: notification-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
   name: notification-controller
   namespace: flux-system
 ---
@@ -9464,7 +9557,7 @@ metadata:
     app.kubernetes.io/component: notification-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
     control-plane: controller
   name: notification-controller
   namespace: flux-system
@@ -9485,7 +9578,7 @@ metadata:
     app.kubernetes.io/component: notification-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
     control-plane: controller
   name: webhook-receiver
   namespace: flux-system
@@ -9506,7 +9599,7 @@ metadata:
     app.kubernetes.io/component: notification-controller
     app.kubernetes.io/instance: flux-system
     app.kubernetes.io/part-of: flux
-    app.kubernetes.io/version: v2.2.0
+    app.kubernetes.io/version: v2.2.1
     control-plane: controller
   name: notification-controller
   namespace: flux-system
@@ -9534,7 +9627,7 @@ spec:
           valueFrom:
             fieldRef:
               fieldPath: metadata.namespace
-        image: ghcr.io/fluxcd/notification-controller:v1.2.2
+        image: ghcr.io/fluxcd/notification-controller:v1.2.3
         imagePullPolicy: IfNotPresent
         livenessProbe:
           httpGet:
diff --git a/images/tools/Earthfile b/images/tools/Earthfile
index 5185b2a125916b768537e3d04a03f26677f8c707..d3050fe9b6e47f3281702779773d81abc6f36031 100644
--- a/images/tools/Earthfile
+++ b/images/tools/Earthfile
@@ -50,7 +50,7 @@ flux:
     FROM ../mirror+fedora
 
     # renovate: datasource=github-releases depName=fluxcd/flux2
-    ARG FLUX_VERSION=v2.2.0
+    ARG FLUX_VERSION=v2.2.1
     ENV FLUX_VERSION=${FLUX_VERSION}
 
     RUN curl -L https://github.com/fluxcd/flux2/releases/download/${FLUX_VERSION}/flux_$(sed 's/^v//g' <<<${FLUX_VERSION})_linux_amd64.tar.gz | tar xvzf - flux \