You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2022/10/07 14:00:15 UTC

[camel] 04/04: CAMEL-17438: camel-kubernetes - Add replace operation to producers

This is an automated email from the ASF dual-hosted git repository.

nfilotto pushed a commit to branch CAMEL-17438/add-update-to-producers
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 5a668efed0720f6cc67dd0d60259d9e3c7650b5b
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Fri Oct 7 15:25:51 2022 +0200

    CAMEL-17438: camel-kubernetes - Add replace operation to producers
---
 .../docs/kubernetes-config-maps-component.adoc     |  1 +
 .../kubernetes-custom-resources-component.adoc     |  1 +
 .../docs/kubernetes-deployments-component.adoc     |  1 +
 .../src/main/docs/kubernetes-hpa-component.adoc    |  1 +
 .../src/main/docs/kubernetes-job-component.adoc    |  1 +
 .../main/docs/kubernetes-namespaces-component.adoc |  1 +
 .../src/main/docs/kubernetes-nodes-component.adoc  |  1 +
 ...rnetes-persistent-volumes-claims-component.adoc |  1 +
 .../src/main/docs/kubernetes-pods-component.adoc   |  1 +
 ...bernetes-replication-controllers-component.adoc |  1 +
 .../docs/kubernetes-resources-quota-component.adoc |  1 +
 .../main/docs/kubernetes-secrets-component.adoc    |  1 +
 .../kubernetes-service-accounts-component.adoc     |  1 +
 .../openshift-deploymentconfigs-component.adoc     |  1 +
 .../component/kubernetes/KubernetesOperations.java | 15 +++++++++
 .../config_maps/KubernetesConfigMapsProducer.java  | 33 +++++++++++++++----
 .../KubernetesCustomResourcesProducer.java         | 21 ++++++++++--
 .../deployments/KubernetesDeploymentsProducer.java | 36 +++++++++++++++-----
 .../kubernetes/hpa/KubernetesHPAProducer.java      | 34 ++++++++++++++-----
 .../kubernetes/job/KubernetesJobProducer.java      | 32 +++++++++++++-----
 .../namespaces/KubernetesNamespacesProducer.java   | 22 +++++++++++--
 .../kubernetes/nodes/KubernetesNodesProducer.java  | 25 +++++++++++---
 .../KubernetesPersistentVolumesClaimsProducer.java | 36 +++++++++++++++-----
 .../kubernetes/pods/KubernetesPodsProducer.java    | 30 +++++++++++++----
 .../KubernetesReplicationControllersProducer.java  | 36 +++++++++++++++-----
 .../KubernetesResourcesQuotaProducer.java          | 31 ++++++++++++++----
 .../secrets/KubernetesSecretsProducer.java         | 27 ++++++++++++---
 .../KubernetesServiceAccountsProducer.java         | 29 +++++++++++++----
 .../services/KubernetesServicesProducer.java       | 33 +++++++++++++++----
 .../OpenshiftDeploymentConfigsProducer.java        | 38 ++++++++++++++++------
 .../KubernetesConfigMapsConsumerIT.java            | 29 ++++++++++++++++-
 .../producer/KubernetesConfigMapsProducerTest.java | 28 ++++++++++++++++
 .../KubernetesCustomResourcesProducerTest.java     | 28 ++++++++++++++++
 .../KubernetesDeploymentsProducerTest.java         | 30 +++++++++++++++++
 .../producer/KubernetesHPAProducerTest.java        | 31 ++++++++++++++++++
 .../producer/KubernetesJobProducerTest.java        | 34 +++++++++++++++++++
 .../producer/KubernetesNamespacesProducerTest.java | 23 ++++++++++++-
 .../producer/KubernetesNodesProducerTest.java      | 23 +++++++++++++
 ...ernetesPersistentVolumesClaimsProducerTest.java | 30 +++++++++++++++++
 .../producer/KubernetesPodsProducerTest.java       | 27 +++++++++++++++
 ...bernetesReplicationControllersProducerTest.java | 30 +++++++++++++++++
 .../KubernetesResourcesQuotaProducerTest.java      | 29 +++++++++++++++++
 .../producer/KubernetesSecretsProducerTest.java    | 18 ++++++++++
 .../KubernetesServiceAccountsProducerTest.java     | 19 +++++++++++
 .../producer/KubernetesServicesProducerTest.java   | 29 +++++++++++++++++
 .../OpenshiftDeploymentConfigsProducerTest.java    | 37 +++++++++++++++++++--
 46 files changed, 830 insertions(+), 107 deletions(-)

diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-config-maps-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-config-maps-component.adoc
index 0355489f600..dfe5a6cd862 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-config-maps-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-config-maps-component.adoc
@@ -41,6 +41,7 @@ include::partial$component-endpoint-headers.adoc[]
 - listConfigMapsByLabels
 - getConfigMap
 - createConfigMap
+- replaceConfigMap
 - deleteConfigMap
 
 == Kubernetes ConfigMaps Producer Examples
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-custom-resources-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-custom-resources-component.adoc
index 6c1d0341be5..22b225168c4 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-custom-resources-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-custom-resources-component.adoc
@@ -42,6 +42,7 @@ include::partial$component-endpoint-headers.adoc[]
 - getCustomResource
 - deleteCustomResource
 - createCustomResource
+- replaceCustomResource
 
 
 include::spring-boot:partial$starter.adoc[]
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-deployments-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-deployments-component.adoc
index bd2cd9d5ede..9f14288262c 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-deployments-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-deployments-component.adoc
@@ -40,6 +40,7 @@ include::partial$component-endpoint-headers.adoc[]
 - listDeploymentsByLabels
 - getDeployment
 - createDeployment
+- replaceDeployment
 - deleteDeployment
 - scaleDeployment
 
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-hpa-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-hpa-component.adoc
index eb4a8a72c50..7a72504ff96 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-hpa-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-hpa-component.adoc
@@ -40,6 +40,7 @@ include::partial$component-endpoint-headers.adoc[]
 - listHPAByLabels
 - getHPA
 - createHPA
+- replaceHPA
 - deleteHPA
 
 == Kubernetes HPA Producer Examples
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-job-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-job-component.adoc
index 497631937e0..e1b5eb02303 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-job-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-job-component.adoc
@@ -41,6 +41,7 @@ include::partial$component-endpoint-headers.adoc[]
 - listJobByLabels
 - getJob
 - createJob
+- replaceJob
 - deleteJob
 
 == Kubernetes Job Producer Examples
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-namespaces-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-namespaces-component.adoc
index bf95acf029b..be43674e7bb 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-namespaces-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-namespaces-component.adoc
@@ -41,6 +41,7 @@ include::partial$component-endpoint-headers.adoc[]
 - listNamespacesByLabels
 - getNamespace
 - createNamespace
+- replaceNamespace
 - deleteNamespace
 
 == Kubernetes Namespaces Producer Examples
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-nodes-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-nodes-component.adoc
index 1f87d1e7a0e..2f9088bab5d 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-nodes-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-nodes-component.adoc
@@ -40,6 +40,7 @@ include::partial$component-endpoint-headers.adoc[]
 - listNodesByLabels
 - getNode
 - createNode
+- replaceNode
 - deleteNode
 
 
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-claims-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-claims-component.adoc
index 742279f8193..05436922d2c 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-claims-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-claims-component.adoc
@@ -40,6 +40,7 @@ include::partial$component-endpoint-headers.adoc[]
 - listPersistentVolumesClaimsByLabels
 - getPersistentVolumeClaim
 - createPersistentVolumeClaim
+- replacePersistentVolumeClaim
 - deletePersistentVolumeClaim
 
 == Kubernetes Persistent Volume Claims Producer Examples
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-pods-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-pods-component.adoc
index b399b71ccb7..4b02b7556a1 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-pods-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-pods-component.adoc
@@ -40,6 +40,7 @@ include::partial$component-endpoint-headers.adoc[]
 - listPodsByLabels
 - getPod
 - createPod
+- replacePod
 - deletePod
 
 == Kubernetes Pods Producer Examples
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-replication-controllers-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-replication-controllers-component.adoc
index d686cd1ff59..971aba653fe 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-replication-controllers-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-replication-controllers-component.adoc
@@ -41,6 +41,7 @@ include::partial$component-endpoint-headers.adoc[]
 - listReplicationControllersByLabels
 - getReplicationController
 - createReplicationController
+- replaceReplicationController
 - deleteReplicationController
 - scaleReplicationController
 
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-resources-quota-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-resources-quota-component.adoc
index 0da55299cc4..f51e999a22e 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-resources-quota-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-resources-quota-component.adoc
@@ -40,6 +40,7 @@ include::partial$component-endpoint-headers.adoc[]
 - listResourcesQuotaByLabels
 - getResourcesQuota
 - createResourcesQuota
+- replaceResourceQuota
 - deleteResourcesQuota
 
 == Kubernetes Resource Quota Producer Examples
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-secrets-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-secrets-component.adoc
index 36f4e96d9b2..d87ae2735d8 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-secrets-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-secrets-component.adoc
@@ -40,6 +40,7 @@ include::partial$component-endpoint-headers.adoc[]
 - listSecretsByLabels
 - getSecret
 - createSecret
+- replaceSecret
 - deleteSecret
 
 == Kubernetes Secrets Producer Examples
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-service-accounts-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-service-accounts-component.adoc
index 4d1175c2358..e51998f05cc 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-service-accounts-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-service-accounts-component.adoc
@@ -40,6 +40,7 @@ include::partial$component-endpoint-headers.adoc[]
 - listServiceAccountsByLabels
 - getServiceAccount
 - createServiceAccount
+- replaceServiceAccount
 - deleteServiceAccount
 
 == Kubernetes ServiceAccounts Produce Examples
diff --git a/components/camel-kubernetes/src/main/docs/openshift-deploymentconfigs-component.adoc b/components/camel-kubernetes/src/main/docs/openshift-deploymentconfigs-component.adoc
index 14b404ac808..a853b9f78c1 100644
--- a/components/camel-kubernetes/src/main/docs/openshift-deploymentconfigs-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/openshift-deploymentconfigs-component.adoc
@@ -40,6 +40,7 @@ include::partial$component-endpoint-headers.adoc[]
 - listDeploymentsConfigsByLabels
 - getDeploymentConfig
 - createDeploymentConfig
+- replaceDeploymentConfig
 - deleteDeploymentConfig
 - scaleDeploymentConfig
 
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesOperations.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesOperations.java
index c9b2fbecc56..91d046c3af3 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesOperations.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesOperations.java
@@ -23,6 +23,7 @@ public final class KubernetesOperations {
     public static final String LIST_NAMESPACE_BY_LABELS_OPERATION = "listNamespacesByLabels";
     public static final String GET_NAMESPACE_OPERATION = "getNamespace";
     public static final String CREATE_NAMESPACE_OPERATION = "createNamespace";
+    public static final String REPLACE_NAMESPACE_OPERATION = "replaceNamespace";
     public static final String DELETE_NAMESPACE_OPERATION = "deleteNamespace";
 
     // Services
@@ -30,6 +31,7 @@ public final class KubernetesOperations {
     public static final String LIST_SERVICES_BY_LABELS_OPERATION = "listServicesByLabels";
     public static final String GET_SERVICE_OPERATION = "getService";
     public static final String CREATE_SERVICE_OPERATION = "createService";
+    public static final String REPLACE_SERVICE_OPERATION = "replaceService";
     public static final String DELETE_SERVICE_OPERATION = "deleteService";
 
     // Replication Controllers
@@ -37,6 +39,7 @@ public final class KubernetesOperations {
     public static final String LIST_REPLICATION_CONTROLLERS_BY_LABELS_OPERATION = "listReplicationControllersByLabels";
     public static final String GET_REPLICATION_CONTROLLER_OPERATION = "getReplicationController";
     public static final String CREATE_REPLICATION_CONTROLLER_OPERATION = "createReplicationController";
+    public static final String REPLACE_REPLICATION_CONTROLLER_OPERATION = "replaceReplicationController";
     public static final String DELETE_REPLICATION_CONTROLLER_OPERATION = "deleteReplicationController";
     public static final String SCALE_REPLICATION_CONTROLLER_OPERATION = "scaleReplicationController";
 
@@ -45,6 +48,7 @@ public final class KubernetesOperations {
     public static final String LIST_PODS_BY_LABELS_OPERATION = "listPodsByLabels";
     public static final String GET_POD_OPERATION = "getPod";
     public static final String CREATE_POD_OPERATION = "createPod";
+    public static final String REPLACE_POD_OPERATION = "replacePod";
     public static final String DELETE_POD_OPERATION = "deletePod";
 
     // Persistent Volumes
@@ -57,6 +61,7 @@ public final class KubernetesOperations {
     public static final String LIST_PERSISTENT_VOLUMES_CLAIMS_BY_LABELS_OPERATION = "listPersistentVolumesClaimsByLabels";
     public static final String GET_PERSISTENT_VOLUME_CLAIM_OPERATION = "getPersistentVolumeClaim";
     public static final String CREATE_PERSISTENT_VOLUME_CLAIM_OPERATION = "createPersistentVolumeClaim";
+    public static final String REPLACE_PERSISTENT_VOLUME_CLAIM_OPERATION = "replacePersistentVolumeClaim";
     public static final String DELETE_PERSISTENT_VOLUME_CLAIM_OPERATION = "deletePersistentVolumeClaim";
 
     // Secrets
@@ -64,6 +69,7 @@ public final class KubernetesOperations {
     public static final String LIST_SECRETS_BY_LABELS_OPERATION = "listSecretsByLabels";
     public static final String GET_SECRET_OPERATION = "getSecret";
     public static final String CREATE_SECRET_OPERATION = "createSecret";
+    public static final String REPLACE_SECRET_OPERATION = "replaceSecret";
     public static final String DELETE_SECRET_OPERATION = "deleteSecret";
 
     // Resources quota
@@ -71,6 +77,7 @@ public final class KubernetesOperations {
     public static final String LIST_RESOURCES_QUOTA_BY_LABELS_OPERATION = "listResourcesQuotaByLabels";
     public static final String GET_RESOURCE_QUOTA_OPERATION = "getResourceQuota";
     public static final String CREATE_RESOURCE_QUOTA_OPERATION = "createResourceQuota";
+    public static final String REPLACE_RESOURCE_QUOTA_OPERATION = "replaceResourceQuota";
     public static final String DELETE_RESOURCE_QUOTA_OPERATION = "deleteResourceQuota";
 
     // Service Accounts
@@ -78,6 +85,7 @@ public final class KubernetesOperations {
     public static final String LIST_SERVICE_ACCOUNTS_BY_LABELS_OPERATION = "listServiceAccountsByLabels";
     public static final String GET_SERVICE_ACCOUNT_OPERATION = "getServiceAccount";
     public static final String CREATE_SERVICE_ACCOUNT_OPERATION = "createServiceAccount";
+    public static final String REPLACE_SERVICE_ACCOUNT_OPERATION = "replaceServiceAccount";
     public static final String DELETE_SERVICE_ACCOUNT_OPERATION = "deleteServiceAccount";
 
     // Nodes
@@ -85,6 +93,7 @@ public final class KubernetesOperations {
     public static final String LIST_NODES_BY_LABELS_OPERATION = "listNodesByLabels";
     public static final String GET_NODE_OPERATION = "getNode";
     public static final String CREATE_NODE_OPERATION = "createNode";
+    public static final String REPLACE_NODE_OPERATION = "replaceNode";
     public static final String DELETE_NODE_OPERATION = "deleteNode";
 
     // HPA
@@ -92,6 +101,7 @@ public final class KubernetesOperations {
     public static final String LIST_HPA_BY_LABELS_OPERATION = "listHPAByLabels";
     public static final String GET_HPA_OPERATION = "getHPA";
     public static final String CREATE_HPA_OPERATION = "createHPA";
+    public static final String REPLACE_HPA_OPERATION = "replaceHPA";
     public static final String DELETE_HPA_OPERATION = "deleteHPA";
 
     // Deployments
@@ -100,6 +110,7 @@ public final class KubernetesOperations {
     public static final String GET_DEPLOYMENT = "getDeployment";
     public static final String DELETE_DEPLOYMENT = "deleteDeployment";
     public static final String CREATE_DEPLOYMENT = "createDeployment";
+    public static final String REPLACE_DEPLOYMENT = "replaceDeployment";
     public static final String SCALE_DEPLOYMENT = "scaleDeployment";
 
     // Config Maps
@@ -108,6 +119,7 @@ public final class KubernetesOperations {
     public static final String GET_CONFIGMAP_OPERATION = "getConfigMap";
     public static final String CREATE_CONFIGMAP_OPERATION = "createConfigMap";
     public static final String DELETE_CONFIGMAP_OPERATION = "deleteConfigMap";
+    public static final String REPLACE_CONFIGMAP_OPERATION = "replaceConfigMap";
 
     // Builds
     public static final String LIST_BUILD = "listBuilds";
@@ -124,6 +136,7 @@ public final class KubernetesOperations {
     public static final String LIST_JOB_BY_LABELS_OPERATION = "listJobByLabels";
     public static final String GET_JOB_OPERATION = "getJob";
     public static final String CREATE_JOB_OPERATION = "createJob";
+    public static final String REPLACE_JOB_OPERATION = "replaceJob";
     public static final String DELETE_JOB_OPERATION = "deleteJob";
 
     // Custom Resources
@@ -132,6 +145,7 @@ public final class KubernetesOperations {
     public static final String GET_CUSTOMRESOURCE = "getCustomResource";
     public static final String DELETE_CUSTOMRESOURCE = "deleteCustomResource";
     public static final String CREATE_CUSTOMRESOURCE = "createCustomResource";
+    public static final String REPLACE_CUSTOMRESOURCE = "replaceCustomResource";
 
     // Deployment Configs
     public static final String LIST_DEPLOYMENT_CONFIGS = "listDeploymentConfigs";
@@ -139,6 +153,7 @@ public final class KubernetesOperations {
     public static final String GET_DEPLOYMENT_CONFIG = "getDeploymentConfig";
     public static final String DELETE_DEPLOYMENT_CONFIG = "deleteDeploymentConfig";
     public static final String CREATE_DEPLOYMENT_CONFIG = "createDeploymentConfig";
+    public static final String REPLACE_DEPLOYMENT_CONFIG = "replaceDeploymentConfig";
     public static final String SCALE_DEPLOYMENT_CONFIG = "scaleDeploymentConfig";
 
     private KubernetesOperations() {
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java
index 24638924748..263fe6a1d4d 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java
@@ -19,11 +19,13 @@ package org.apache.camel.component.kubernetes.config_maps;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 
 import io.fabric8.kubernetes.api.model.ConfigMap;
 import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
 import io.fabric8.kubernetes.api.model.ConfigMapList;
 import io.fabric8.kubernetes.api.model.StatusDetails;
+import io.fabric8.kubernetes.client.dsl.Resource;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
@@ -71,6 +73,10 @@ public class KubernetesConfigMapsProducer extends DefaultProducer {
                 doCreateConfigMap(exchange);
                 break;
 
+            case KubernetesOperations.REPLACE_CONFIGMAP_OPERATION:
+                doReplaceConfigMap(exchange);
+                break;
+
             case KubernetesOperations.DELETE_CONFIGMAP_OPERATION:
                 doDeleteConfigMap(exchange);
                 break;
@@ -114,28 +120,41 @@ public class KubernetesConfigMapsProducer extends DefaultProducer {
         prepareOutboundMessage(exchange, configMap);
     }
 
+    protected void doReplaceConfigMap(Exchange exchange) {
+        doCreateOrUpdateConfigMap(exchange, "Replace", Resource::replace);
+    }
+
     protected void doCreateConfigMap(Exchange exchange) {
+        doCreateOrUpdateConfigMap(exchange, "Create", Resource::create);
+    }
+
+    private void doCreateOrUpdateConfigMap(
+            Exchange exchange, String operationName, Function<Resource<ConfigMap>, ConfigMap> operation) {
         String cfMapName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         HashMap<String, String> configMapData
                 = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_DATA, HashMap.class);
         if (ObjectHelper.isEmpty(cfMapName)) {
-            LOG.error("Create a specific configMap require specify a configMap name");
-            throw new IllegalArgumentException("Create a specific configMap require specify a configMap name");
+            LOG.error("{} a specific configMap require specify a configMap name", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific configMap require specify a configMap name", operationName));
         }
         if (ObjectHelper.isEmpty(namespaceName)) {
-            LOG.error("Create a specific configMap require specify a namespace name");
-            throw new IllegalArgumentException("Create a specific configMap require specify a namespace name");
+            LOG.error("{} a specific configMap require specify a namespace name", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific configMap require specify a namespace name", operationName));
         }
         if (ObjectHelper.isEmpty(configMapData)) {
-            LOG.error("Create a specific configMap require specify a data map");
-            throw new IllegalArgumentException("Create a specific configMap require specify a data map");
+            LOG.error("{} a specific configMap require specify a data map", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific configMap require specify a data map", operationName));
         }
         Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CONFIGMAPS_LABELS, Map.class);
         ConfigMap cfMapCreating = new ConfigMapBuilder().withNewMetadata().withName(cfMapName).withLabels(labels).endMetadata()
                 .withData(configMapData).build();
         ConfigMap configMap
-                = getEndpoint().getKubernetesClient().configMaps().inNamespace(namespaceName).resource(cfMapCreating).create();
+                = operation.apply(
+                        getEndpoint().getKubernetesClient().configMaps().inNamespace(namespaceName).resource(cfMapCreating));
 
         prepareOutboundMessage(exchange, configMap);
     }
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/customresources/KubernetesCustomResourcesProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/customresources/KubernetesCustomResourcesProducer.java
index 86e331188f8..cf0d35dbfe0 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/customresources/KubernetesCustomResourcesProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/customresources/KubernetesCustomResourcesProducer.java
@@ -18,11 +18,13 @@ package org.apache.camel.component.kubernetes.customresources;
 
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 
 import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
 import io.fabric8.kubernetes.api.model.GenericKubernetesResourceList;
 import io.fabric8.kubernetes.api.model.StatusDetails;
 import io.fabric8.kubernetes.client.KubernetesClientException;
+import io.fabric8.kubernetes.client.dsl.Resource;
 import io.fabric8.kubernetes.client.dsl.base.CustomResourceDefinitionContext;
 import io.fabric8.kubernetes.client.utils.Serialization;
 import org.apache.camel.Exchange;
@@ -89,6 +91,10 @@ public class KubernetesCustomResourcesProducer extends DefaultProducer {
                 doCreate(exchange, namespace);
                 break;
 
+            case KubernetesOperations.REPLACE_CUSTOMRESOURCE:
+                doReplace(exchange, namespace);
+                break;
+
             default:
                 throw new IllegalArgumentException("Unsupported operation " + operation);
         }
@@ -181,15 +187,24 @@ public class KubernetesCustomResourcesProducer extends DefaultProducer {
 
     }
 
+    protected void doReplace(Exchange exchange, String namespaceName) {
+        doCreateOrReplace(exchange, namespaceName, Resource::replace);
+    }
+
     protected void doCreate(Exchange exchange, String namespaceName) {
+        doCreateOrReplace(exchange, namespaceName, Resource::create);
+    }
+
+    private void doCreateOrReplace(
+            Exchange exchange, String namespaceName,
+            Function<Resource<GenericKubernetesResource>, GenericKubernetesResource> operation) {
         String customResourceInstance = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CRD_INSTANCE, String.class);
         GenericKubernetesResource customResource = new GenericKubernetesResource();
         try {
-            customResource = getEndpoint().getKubernetesClient()
+            customResource = operation.apply(getEndpoint().getKubernetesClient()
                     .genericKubernetesResources(getCRDContext(exchange.getIn()))
                     .inNamespace(namespaceName)
-                    .resource(Serialization.unmarshal(customResourceInstance, GenericKubernetesResource.class))
-                    .create();
+                    .resource(Serialization.unmarshal(customResourceInstance, GenericKubernetesResource.class)));
         } catch (KubernetesClientException e) {
             if (e.getCode() == 409) {
                 LOG.info("Custom resource instance already exists", e);
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/deployments/KubernetesDeploymentsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/deployments/KubernetesDeploymentsProducer.java
index 2f37559da4a..f42792c91d5 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/deployments/KubernetesDeploymentsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/deployments/KubernetesDeploymentsProducer.java
@@ -18,6 +18,7 @@ package org.apache.camel.component.kubernetes.deployments;
 
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 
 import io.fabric8.kubernetes.api.model.StatusDetails;
 import io.fabric8.kubernetes.api.model.apps.Deployment;
@@ -25,6 +26,7 @@ import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder;
 import io.fabric8.kubernetes.api.model.apps.DeploymentList;
 import io.fabric8.kubernetes.api.model.apps.DeploymentSpec;
 import io.fabric8.kubernetes.client.dsl.MixedOperation;
+import io.fabric8.kubernetes.client.dsl.Resource;
 import io.fabric8.kubernetes.client.dsl.RollableScalableResource;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
@@ -77,6 +79,10 @@ public class KubernetesDeploymentsProducer extends DefaultProducer {
                 doCreateDeployment(exchange);
                 break;
 
+            case KubernetesOperations.REPLACE_DEPLOYMENT:
+                doReplaceDeployment(exchange);
+                break;
+
             case KubernetesOperations.SCALE_DEPLOYMENT:
                 doScaleDeployment(exchange);
                 break;
@@ -133,29 +139,41 @@ public class KubernetesDeploymentsProducer extends DefaultProducer {
         prepareOutboundMessage(exchange, deploymentDeleted);
     }
 
+    protected void doReplaceDeployment(Exchange exchange) {
+        doCreateOrUpdateDeployment(exchange, "Replace", Resource::replace);
+    }
+
     protected void doCreateDeployment(Exchange exchange) {
+        doCreateOrUpdateDeployment(exchange, "Create", Resource::create);
+    }
+
+    private void doCreateOrUpdateDeployment(
+            Exchange exchange, String operationName, Function<Resource<Deployment>, Deployment> operation) {
         String deploymentName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         DeploymentSpec deSpec
                 = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_SPEC, DeploymentSpec.class);
         if (ObjectHelper.isEmpty(deploymentName)) {
-            LOG.error("Create a specific Deployment require specify a Deployment name");
-            throw new IllegalArgumentException("Create a specific Deployment require specify a pod name");
+            LOG.error("{} a specific Deployment require specify a Deployment name", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific Deployment require specify a pod name", operationName));
         }
         if (ObjectHelper.isEmpty(namespaceName)) {
-            LOG.error("Create a specific Deployment require specify a namespace name");
-            throw new IllegalArgumentException("Create a specific Deployment require specify a namespace name");
+            LOG.error("{} a specific Deployment require specify a namespace name", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific Deployment require specify a namespace name", operationName));
         }
         if (ObjectHelper.isEmpty(deSpec)) {
-            LOG.error("Create a specific Deployment require specify a Deployment spec bean");
-            throw new IllegalArgumentException("Create a specific Deployment require specify a Deployment spec bean");
+            LOG.error("{} a specific Deployment require specify a Deployment spec bean", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific Deployment require specify a Deployment spec bean", operationName));
         }
         Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_DEPLOYMENTS_LABELS, Map.class);
         Deployment deploymentCreating = new DeploymentBuilder().withNewMetadata().withName(deploymentName).withLabels(labels)
                 .endMetadata().withSpec(deSpec).build();
-        Deployment deployment = getEndpoint().getKubernetesClient().apps().deployments().inNamespace(namespaceName)
-                .resource(deploymentCreating)
-                .create();
+        Deployment deployment
+                = operation.apply(getEndpoint().getKubernetesClient().apps().deployments().inNamespace(namespaceName)
+                        .resource(deploymentCreating));
 
         prepareOutboundMessage(exchange, deployment);
     }
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/hpa/KubernetesHPAProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/hpa/KubernetesHPAProducer.java
index cc1a13a31e2..3b7dfbe69ff 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/hpa/KubernetesHPAProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/hpa/KubernetesHPAProducer.java
@@ -18,12 +18,14 @@ package org.apache.camel.component.kubernetes.hpa;
 
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 
 import io.fabric8.kubernetes.api.model.StatusDetails;
 import io.fabric8.kubernetes.api.model.autoscaling.v1.HorizontalPodAutoscaler;
 import io.fabric8.kubernetes.api.model.autoscaling.v1.HorizontalPodAutoscalerBuilder;
 import io.fabric8.kubernetes.api.model.autoscaling.v1.HorizontalPodAutoscalerList;
 import io.fabric8.kubernetes.api.model.autoscaling.v1.HorizontalPodAutoscalerSpec;
+import io.fabric8.kubernetes.client.dsl.Resource;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
@@ -71,6 +73,10 @@ public class KubernetesHPAProducer extends DefaultProducer {
                 doCreateHPA(exchange);
                 break;
 
+            case KubernetesOperations.REPLACE_HPA_OPERATION:
+                doReplaceHPA(exchange);
+                break;
+
             case KubernetesOperations.DELETE_HPA_OPERATION:
                 doDeleteHPA(exchange);
                 break;
@@ -123,30 +129,40 @@ public class KubernetesHPAProducer extends DefaultProducer {
         prepareOutboundMessage(exchange, hpa);
     }
 
+    protected void doReplaceHPA(Exchange exchange) {
+        doCreateOrUpdateHPA(exchange, "Replace", Resource::replace);
+    }
+
     protected void doCreateHPA(Exchange exchange) {
+        doCreateOrUpdateHPA(exchange, "Create", Resource::create);
+    }
+
+    private void doCreateOrUpdateHPA(
+            Exchange exchange, String operationName,
+            Function<Resource<HorizontalPodAutoscaler>, HorizontalPodAutoscaler> operation) {
         String hpaName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_HPA_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         HorizontalPodAutoscalerSpec hpaSpec
                 = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_HPA_SPEC, HorizontalPodAutoscalerSpec.class);
         if (ObjectHelper.isEmpty(hpaName)) {
-            LOG.error("Create a specific hpa require specify a hpa name");
-            throw new IllegalArgumentException("Create a specific hpa require specify a hpa name");
+            LOG.error("{} a specific hpa require specify a hpa name", operationName);
+            throw new IllegalArgumentException(operationName + " a specific hpa require specify a hpa name");
         }
         if (ObjectHelper.isEmpty(namespaceName)) {
-            LOG.error("Create a specific hpa require specify a namespace name");
-            throw new IllegalArgumentException("Create a specific hpa require specify a namespace name");
+            LOG.error("{} a specific hpa require specify a namespace name", operationName);
+            throw new IllegalArgumentException(operationName + " a specific hpa require specify a namespace name");
         }
         if (ObjectHelper.isEmpty(hpaSpec)) {
-            LOG.error("Create a specific hpa require specify a hpa spec bean");
-            throw new IllegalArgumentException("Create a specific hpa require specify a hpa spec bean");
+            LOG.error("{} a specific hpa require specify a hpa spec bean", operationName);
+            throw new IllegalArgumentException(operationName + " a specific hpa require specify a hpa spec bean");
         }
         Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_HPA_LABELS, Map.class);
         HorizontalPodAutoscaler hpaCreating = new HorizontalPodAutoscalerBuilder().withNewMetadata().withName(hpaName)
                 .withLabels(labels).endMetadata().withSpec(hpaSpec).build();
         HorizontalPodAutoscaler hpa
-                = getEndpoint().getKubernetesClient().autoscaling().v1().horizontalPodAutoscalers().inNamespace(namespaceName)
-                        .resource(hpaCreating)
-                        .create();
+                = operation.apply(getEndpoint().getKubernetesClient().autoscaling().v1().horizontalPodAutoscalers()
+                        .inNamespace(namespaceName)
+                        .resource(hpaCreating));
 
         prepareOutboundMessage(exchange, hpa);
     }
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/job/KubernetesJobProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/job/KubernetesJobProducer.java
index 51ed0c99cdc..611e3dc2567 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/job/KubernetesJobProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/job/KubernetesJobProducer.java
@@ -17,12 +17,14 @@
 package org.apache.camel.component.kubernetes.job;
 
 import java.util.Map;
+import java.util.function.Function;
 
 import io.fabric8.kubernetes.api.model.batch.v1.Job;
 import io.fabric8.kubernetes.api.model.batch.v1.JobBuilder;
 import io.fabric8.kubernetes.api.model.batch.v1.JobList;
 import io.fabric8.kubernetes.api.model.batch.v1.JobSpec;
 import io.fabric8.kubernetes.client.dsl.MixedOperation;
+import io.fabric8.kubernetes.client.dsl.Resource;
 import io.fabric8.kubernetes.client.dsl.ScalableResource;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
@@ -77,6 +79,10 @@ public class KubernetesJobProducer extends DefaultProducer {
                 doCreateJob(exchange);
                 break;
 
+            case KubernetesOperations.REPLACE_JOB_OPERATION:
+                doReplaceJob(exchange);
+                break;
+
             case KubernetesOperations.DELETE_JOB_OPERATION:
                 doDeleteJob(exchange);
                 break;
@@ -122,27 +128,37 @@ public class KubernetesJobProducer extends DefaultProducer {
         prepareOutboundMessage(exchange, job);
     }
 
+    protected void doReplaceJob(Exchange exchange) {
+        doCreateOrUpdateJob(exchange, "Replace", Resource::replace);
+    }
+
     protected void doCreateJob(Exchange exchange) {
+        doCreateOrUpdateJob(exchange, "Create", Resource::create);
+    }
+
+    private void doCreateOrUpdateJob(Exchange exchange, String operationName, Function<Resource<Job>, Job> operation) {
         String jobName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_JOB_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         JobSpec jobSpec = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_JOB_SPEC, JobSpec.class);
         if (ObjectHelper.isEmpty(jobName)) {
-            LOG.error("Create a specific job require specify a job name");
-            throw new IllegalArgumentException("Create a specific job require specify a job name");
+            LOG.error("{} a specific job require specify a job name", operationName);
+            throw new IllegalArgumentException(String.format("%s a specific job require specify a job name", operationName));
         }
         if (ObjectHelper.isEmpty(namespaceName)) {
-            LOG.error("Create a specific job require specify a namespace name");
-            throw new IllegalArgumentException("Create a specific job require specify a namespace name");
+            LOG.error("{} a specific job require specify a namespace name", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific job require specify a namespace name", operationName));
         }
         if (ObjectHelper.isEmpty(jobSpec)) {
-            LOG.error("Create a specific job require specify a hpa spec bean");
-            throw new IllegalArgumentException("Create a specific job require specify a hpa spec bean");
+            LOG.error("{} a specific job require specify a hpa spec bean", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific job require specify a hpa spec bean", operationName));
         }
         Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_JOB_LABELS, Map.class);
         Job jobCreating = new JobBuilder().withNewMetadata().withName(jobName).withLabels(labels).endMetadata()
                 .withSpec(jobSpec).build();
-        Job job = getEndpoint().getKubernetesClient().batch().v1().jobs().inNamespace(namespaceName).resource(jobCreating)
-                .create();
+        Job job = operation.apply(
+                getEndpoint().getKubernetesClient().batch().v1().jobs().inNamespace(namespaceName).resource(jobCreating));
 
         prepareOutboundMessage(exchange, job);
     }
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesProducer.java
index 0f8428506a9..71c8ee2c270 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesProducer.java
@@ -18,11 +18,13 @@ package org.apache.camel.component.kubernetes.namespaces;
 
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 
 import io.fabric8.kubernetes.api.model.Namespace;
 import io.fabric8.kubernetes.api.model.NamespaceBuilder;
 import io.fabric8.kubernetes.api.model.NamespaceList;
 import io.fabric8.kubernetes.api.model.StatusDetails;
+import io.fabric8.kubernetes.client.dsl.Resource;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
@@ -70,6 +72,10 @@ public class KubernetesNamespacesProducer extends DefaultProducer {
                 doCreateNamespace(exchange);
                 break;
 
+            case KubernetesOperations.REPLACE_NAMESPACE_OPERATION:
+                doReplaceNamespace(exchange);
+                break;
+
             case KubernetesOperations.DELETE_NAMESPACE_OPERATION:
                 doDeleteNamespace(exchange);
                 break;
@@ -108,16 +114,26 @@ public class KubernetesNamespacesProducer extends DefaultProducer {
         prepareOutboundMessage(exchange, namespace);
     }
 
+    protected void doReplaceNamespace(Exchange exchange) {
+        doCreateOrUpdateNamespace(exchange, "Replace", Resource::replace);
+    }
+
     protected void doCreateNamespace(Exchange exchange) {
+        doCreateOrUpdateNamespace(exchange, "Create", Resource::create);
+    }
+
+    private void doCreateOrUpdateNamespace(
+            Exchange exchange, String operationName, Function<Resource<Namespace>, Namespace> operation) {
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         if (ObjectHelper.isEmpty(namespaceName)) {
-            LOG.error("Create a specific namespace require specify a namespace name");
-            throw new IllegalArgumentException("Create a specific namespace require specify a namespace name");
+            LOG.error("{} a specific namespace require specify a namespace name", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific namespace require specify a namespace name", operationName));
         }
         Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_LABELS, Map.class);
         Namespace ns
                 = new NamespaceBuilder().withNewMetadata().withName(namespaceName).withLabels(labels).endMetadata().build();
-        Namespace namespace = getEndpoint().getKubernetesClient().namespaces().resource(ns).create();
+        Namespace namespace = operation.apply(getEndpoint().getKubernetesClient().namespaces().resource(ns));
 
         prepareOutboundMessage(exchange, namespace);
     }
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/nodes/KubernetesNodesProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/nodes/KubernetesNodesProducer.java
index e767af9c89e..edf44ad6309 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/nodes/KubernetesNodesProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/nodes/KubernetesNodesProducer.java
@@ -18,12 +18,14 @@ package org.apache.camel.component.kubernetes.nodes;
 
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 
 import io.fabric8.kubernetes.api.model.Node;
 import io.fabric8.kubernetes.api.model.NodeBuilder;
 import io.fabric8.kubernetes.api.model.NodeList;
 import io.fabric8.kubernetes.api.model.NodeSpec;
 import io.fabric8.kubernetes.api.model.StatusDetails;
+import io.fabric8.kubernetes.client.dsl.Resource;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
@@ -71,6 +73,10 @@ public class KubernetesNodesProducer extends DefaultProducer {
                 doCreateNode(exchange);
                 break;
 
+            case KubernetesOperations.REPLACE_NODE_OPERATION:
+                doReplaceNode(exchange);
+                break;
+
             case KubernetesOperations.DELETE_NODE_OPERATION:
                 doDeleteNode(exchange);
                 break;
@@ -107,21 +113,30 @@ public class KubernetesNodesProducer extends DefaultProducer {
         prepareOutboundMessage(exchange, node);
     }
 
+    protected void doReplaceNode(Exchange exchange) {
+        doCreateOrUpdateNode(exchange, "Replace", Resource::replace);
+    }
+
     protected void doCreateNode(Exchange exchange) {
+        doCreateOrUpdateNode(exchange, "Create", Resource::create);
+    }
+
+    private void doCreateOrUpdateNode(Exchange exchange, String operationName, Function<Resource<Node>, Node> operation) {
         String nodeName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NODE_NAME, String.class);
         NodeSpec nodeSpec = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NODE_SPEC, NodeSpec.class);
         if (ObjectHelper.isEmpty(nodeName)) {
-            LOG.error("Create a specific node require specify a node name");
-            throw new IllegalArgumentException("Create a specific node require specify a node name");
+            LOG.error("{} a specific node require specify a node name", operationName);
+            throw new IllegalArgumentException(String.format("%s a specific node require specify a node name", operationName));
         }
         if (ObjectHelper.isEmpty(nodeSpec)) {
-            LOG.error("Create a specific node require specify a node spec bean");
-            throw new IllegalArgumentException("Create a specific node require specify a node spec bean");
+            LOG.error("{} a specific node require specify a node spec bean", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific node require specify a node spec bean", operationName));
         }
         Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_PODS_LABELS, Map.class);
         Node nodeCreating = new NodeBuilder().withNewMetadata().withName(nodeName).withLabels(labels).endMetadata()
                 .withSpec(nodeSpec).build();
-        Node node = getEndpoint().getKubernetesClient().nodes().resource(nodeCreating).create();
+        Node node = operation.apply(getEndpoint().getKubernetesClient().nodes().resource(nodeCreating));
 
         prepareOutboundMessage(exchange, node);
     }
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes_claims/KubernetesPersistentVolumesClaimsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes_claims/KubernetesPersistentVolumesClaimsProducer.java
index 0f7d286ebe7..52ee4f6ecd8 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes_claims/KubernetesPersistentVolumesClaimsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes_claims/KubernetesPersistentVolumesClaimsProducer.java
@@ -18,12 +18,14 @@ package org.apache.camel.component.kubernetes.persistent_volumes_claims;
 
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 
 import io.fabric8.kubernetes.api.model.PersistentVolumeClaim;
 import io.fabric8.kubernetes.api.model.PersistentVolumeClaimBuilder;
 import io.fabric8.kubernetes.api.model.PersistentVolumeClaimList;
 import io.fabric8.kubernetes.api.model.PersistentVolumeClaimSpec;
 import io.fabric8.kubernetes.api.model.StatusDetails;
+import io.fabric8.kubernetes.client.dsl.Resource;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
@@ -71,6 +73,10 @@ public class KubernetesPersistentVolumesClaimsProducer extends DefaultProducer {
                 doCreatePersistentVolumeClaim(exchange);
                 break;
 
+            case KubernetesOperations.REPLACE_PERSISTENT_VOLUME_CLAIM_OPERATION:
+                doReplacePersistentVolumeClaim(exchange);
+                break;
+
             case KubernetesOperations.DELETE_PERSISTENT_VOLUME_CLAIM_OPERATION:
                 doDeletePersistentVolumeClaim(exchange);
                 break;
@@ -128,32 +134,46 @@ public class KubernetesPersistentVolumesClaimsProducer extends DefaultProducer {
         prepareOutboundMessage(exchange, pvc);
     }
 
+    protected void doReplacePersistentVolumeClaim(Exchange exchange) {
+        doCreateOrUpdatePersistentVolumeClaim(exchange, "Replace", Resource::replace);
+    }
+
     protected void doCreatePersistentVolumeClaim(Exchange exchange) {
+        doCreateOrUpdatePersistentVolumeClaim(exchange, "Create", Resource::create);
+    }
+
+    private void doCreateOrUpdatePersistentVolumeClaim(
+            Exchange exchange, String operationName,
+            Function<Resource<PersistentVolumeClaim>, PersistentVolumeClaim> operation) {
         String pvcName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_PERSISTENT_VOLUME_CLAIM_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         PersistentVolumeClaimSpec pvcSpec = exchange.getIn()
                 .getHeader(KubernetesConstants.KUBERNETES_PERSISTENT_VOLUME_CLAIM_SPEC, PersistentVolumeClaimSpec.class);
         if (ObjectHelper.isEmpty(pvcName)) {
-            LOG.error("Create a specific Persistent Volume Claim require specify a Persistent Volume Claim name");
+            LOG.error("{} a specific Persistent Volume Claim require specify a Persistent Volume Claim name", operationName);
             throw new IllegalArgumentException(
-                    "Create a specific Persistent Volume Claim require specify a Persistent Volume Claim name");
+                    String.format("%s a specific Persistent Volume Claim require specify a Persistent Volume Claim name",
+                            operationName));
         }
         if (ObjectHelper.isEmpty(namespaceName)) {
-            LOG.error("Create a specific Persistent Volume Claim require specify a namespace name");
-            throw new IllegalArgumentException("Create a specific Persistent Volume Claim require specify a namespace name");
+            LOG.error("{} a specific Persistent Volume Claim require specify a namespace name", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific Persistent Volume Claim require specify a namespace name", operationName));
         }
         if (ObjectHelper.isEmpty(pvcSpec)) {
-            LOG.error("Create a specific Persistent Volume Claim require specify a Persistent Volume Claim spec bean");
+            LOG.error("{} a specific Persistent Volume Claim require specify a Persistent Volume Claim spec bean",
+                    operationName);
             throw new IllegalArgumentException(
-                    "Create a specific Persistent Volume Claim require specify a Persistent Volume Claim spec bean");
+                    String.format("%s a specific Persistent Volume Claim require specify a Persistent Volume Claim spec bean",
+                            operationName));
         }
         Map<String, String> labels
                 = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_PERSISTENT_VOLUMES_CLAIMS_LABELS, Map.class);
         PersistentVolumeClaim pvcCreating = new PersistentVolumeClaimBuilder().withNewMetadata().withName(pvcName)
                 .withLabels(labels).endMetadata().withSpec(pvcSpec).build();
         PersistentVolumeClaim pvc
-                = getEndpoint().getKubernetesClient().persistentVolumeClaims().inNamespace(namespaceName).resource(pvcCreating)
-                        .create();
+                = operation.apply(getEndpoint().getKubernetesClient().persistentVolumeClaims().inNamespace(namespaceName)
+                        .resource(pvcCreating));
 
         prepareOutboundMessage(exchange, pvc);
     }
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/pods/KubernetesPodsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/pods/KubernetesPodsProducer.java
index 9de34cc7617..f8cc95ae2a7 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/pods/KubernetesPodsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/pods/KubernetesPodsProducer.java
@@ -18,12 +18,14 @@ package org.apache.camel.component.kubernetes.pods;
 
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 
 import io.fabric8.kubernetes.api.model.Pod;
 import io.fabric8.kubernetes.api.model.PodBuilder;
 import io.fabric8.kubernetes.api.model.PodList;
 import io.fabric8.kubernetes.api.model.PodSpec;
 import io.fabric8.kubernetes.api.model.StatusDetails;
+import io.fabric8.kubernetes.client.dsl.Resource;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
@@ -71,6 +73,10 @@ public class KubernetesPodsProducer extends DefaultProducer {
                 doCreatePod(exchange);
                 break;
 
+            case KubernetesOperations.REPLACE_POD_OPERATION:
+                doReplacePod(exchange);
+                break;
+
             case KubernetesOperations.DELETE_POD_OPERATION:
                 doDeletePod(exchange);
                 break;
@@ -123,26 +129,36 @@ public class KubernetesPodsProducer extends DefaultProducer {
         prepareOutboundMessage(exchange, pod);
     }
 
+    protected void doReplacePod(Exchange exchange) {
+        doCreateOrUpdatePod(exchange, "Replace", Resource::replace);
+    }
+
     protected void doCreatePod(Exchange exchange) {
+        doCreateOrUpdatePod(exchange, "Create", Resource::create);
+    }
+
+    private void doCreateOrUpdatePod(Exchange exchange, String operationName, Function<Resource<Pod>, Pod> operation) {
         String podName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_POD_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         PodSpec podSpec = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_POD_SPEC, PodSpec.class);
         if (ObjectHelper.isEmpty(podName)) {
-            LOG.error("Create a specific pod require specify a pod name");
-            throw new IllegalArgumentException("Create a specific pod require specify a pod name");
+            LOG.error("{} a specific pod require specify a pod name", operationName);
+            throw new IllegalArgumentException(String.format("%s a specific pod require specify a pod name", operationName));
         }
         if (ObjectHelper.isEmpty(namespaceName)) {
-            LOG.error("Create a specific pod require specify a namespace name");
-            throw new IllegalArgumentException("Create a specific pod require specify a namespace name");
+            LOG.error("{} a specific pod require specify a namespace name", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific pod require specify a namespace name", operationName));
         }
         if (ObjectHelper.isEmpty(podSpec)) {
-            LOG.error("Create a specific pod require specify a pod spec bean");
-            throw new IllegalArgumentException("Create a specific pod require specify a pod spec bean");
+            LOG.error("{} a specific pod require specify a pod spec bean", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific pod require specify a pod spec bean", operationName));
         }
         Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_PODS_LABELS, Map.class);
         Pod podCreating = new PodBuilder().withNewMetadata().withName(podName).withLabels(labels).endMetadata()
                 .withSpec(podSpec).build();
-        Pod pod = getEndpoint().getKubernetesClient().pods().inNamespace(namespaceName).resource(podCreating).create();
+        Pod pod = operation.apply(getEndpoint().getKubernetesClient().pods().inNamespace(namespaceName).resource(podCreating));
 
         prepareOutboundMessage(exchange, pod);
     }
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/replication_controllers/KubernetesReplicationControllersProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/replication_controllers/KubernetesReplicationControllersProducer.java
index 45a9981961b..f6f839f8522 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/replication_controllers/KubernetesReplicationControllersProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/replication_controllers/KubernetesReplicationControllersProducer.java
@@ -18,6 +18,7 @@ package org.apache.camel.component.kubernetes.replication_controllers;
 
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 
 import io.fabric8.kubernetes.api.model.ReplicationController;
 import io.fabric8.kubernetes.api.model.ReplicationControllerBuilder;
@@ -25,6 +26,7 @@ import io.fabric8.kubernetes.api.model.ReplicationControllerList;
 import io.fabric8.kubernetes.api.model.ReplicationControllerSpec;
 import io.fabric8.kubernetes.api.model.StatusDetails;
 import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
+import io.fabric8.kubernetes.client.dsl.Resource;
 import io.fabric8.kubernetes.client.dsl.RollableScalableResource;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
@@ -73,6 +75,10 @@ public class KubernetesReplicationControllersProducer extends DefaultProducer {
                 doCreateReplicationController(exchange);
                 break;
 
+            case KubernetesOperations.REPLACE_REPLICATION_CONTROLLER_OPERATION:
+                doReplaceReplicationController(exchange);
+                break;
+
             case KubernetesOperations.DELETE_REPLICATION_CONTROLLER_OPERATION:
                 doDeleteReplicationController(exchange);
                 break;
@@ -140,31 +146,45 @@ public class KubernetesReplicationControllersProducer extends DefaultProducer {
         prepareOutboundMessage(exchange, rc);
     }
 
+    protected void doReplaceReplicationController(Exchange exchange) {
+        doCreateOrUpdateReplicationController(exchange, "Replace", Resource::replace);
+    }
+
     protected void doCreateReplicationController(Exchange exchange) {
+        doCreateOrUpdateReplicationController(exchange, "Create", Resource::create);
+    }
+
+    private void doCreateOrUpdateReplicationController(
+            Exchange exchange, String operationName,
+            Function<Resource<ReplicationController>, ReplicationController> operation) {
         String rcName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         ReplicationControllerSpec rcSpec = exchange.getIn()
                 .getHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_SPEC, ReplicationControllerSpec.class);
         if (ObjectHelper.isEmpty(rcName)) {
-            LOG.error("Create a specific replication controller require specify a replication controller name");
+            LOG.error("{} a specific replication controller require specify a replication controller name", operationName);
             throw new IllegalArgumentException(
-                    "Create a specific replication controller require specify a replication controller name");
+                    String.format("%s a specific replication controller require specify a replication controller name",
+                            operationName));
         }
         if (ObjectHelper.isEmpty(namespaceName)) {
-            LOG.error("Create a specific replication controller require specify a namespace name");
-            throw new IllegalArgumentException("Create a specific replication controller require specify a namespace name");
+            LOG.error("{} a specific replication controller require specify a namespace name", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific replication controller require specify a namespace name", operationName));
         }
         if (ObjectHelper.isEmpty(rcSpec)) {
-            LOG.error("Create a specific replication controller require specify a replication controller spec bean");
+            LOG.error("{} a specific replication controller require specify a replication controller spec bean", operationName);
             throw new IllegalArgumentException(
-                    "Create a specific replication controller require specify a replication controller spec bean");
+                    String.format("%s a specific replication controller require specify a replication controller spec bean",
+                            operationName));
         }
         Map<String, String> labels
                 = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLERS_LABELS, Map.class);
         ReplicationController rcCreating = new ReplicationControllerBuilder().withNewMetadata().withName(rcName)
                 .withLabels(labels).endMetadata().withSpec(rcSpec).build();
-        ReplicationController rc = getEndpoint().getKubernetesClient().replicationControllers().inNamespace(namespaceName)
-                .resource(rcCreating).create();
+        ReplicationController rc
+                = operation.apply(getEndpoint().getKubernetesClient().replicationControllers().inNamespace(namespaceName)
+                        .resource(rcCreating));
 
         prepareOutboundMessage(exchange, rc);
     }
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/resources_quota/KubernetesResourcesQuotaProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/resources_quota/KubernetesResourcesQuotaProducer.java
index be90b4cd3e5..2318340552f 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/resources_quota/KubernetesResourcesQuotaProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/resources_quota/KubernetesResourcesQuotaProducer.java
@@ -18,6 +18,7 @@ package org.apache.camel.component.kubernetes.resources_quota;
 
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 
 import io.fabric8.kubernetes.api.model.ResourceQuota;
 import io.fabric8.kubernetes.api.model.ResourceQuotaBuilder;
@@ -74,6 +75,10 @@ public class KubernetesResourcesQuotaProducer extends DefaultProducer {
                 doCreateResourceQuota(exchange);
                 break;
 
+            case KubernetesOperations.REPLACE_RESOURCE_QUOTA_OPERATION:
+                doReplaceResourceQuota(exchange);
+                break;
+
             case KubernetesOperations.DELETE_RESOURCE_QUOTA_OPERATION:
                 doDeleteResourceQuota(exchange);
                 break;
@@ -130,29 +135,41 @@ public class KubernetesResourcesQuotaProducer extends DefaultProducer {
         prepareOutboundMessage(exchange, rq);
     }
 
+    protected void doReplaceResourceQuota(Exchange exchange) {
+        doCreateOrUpdateResourceQuota(exchange, "Replace", Resource::replace);
+    }
+
     protected void doCreateResourceQuota(Exchange exchange) {
+        doCreateOrUpdateResourceQuota(exchange, "Create", Resource::create);
+    }
+
+    private void doCreateOrUpdateResourceQuota(
+            Exchange exchange, String operationName, Function<Resource<ResourceQuota>, ResourceQuota> operation) {
         String rqName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_RESOURCES_QUOTA_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         ResourceQuotaSpec rqSpec
                 = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_RESOURCE_QUOTA_SPEC, ResourceQuotaSpec.class);
         if (ObjectHelper.isEmpty(rqName)) {
-            LOG.error("Create a specific resource quota require specify a resource quota name");
-            throw new IllegalArgumentException("Create a specific resource quota require specify a resource quota name");
+            LOG.error("{} a specific resource quota require specify a resource quota name", operationName);
+            throw new IllegalArgumentException(
+                    operationName + " a specific resource quota require specify a resource quota name");
         }
         if (ObjectHelper.isEmpty(namespaceName)) {
-            LOG.error("Create a specific resource quota require specify a namespace name");
-            throw new IllegalArgumentException("Create a specific resource quota require specify a namespace name");
+            LOG.error("{} a specific resource quota require specify a namespace name", operationName);
+            throw new IllegalArgumentException(operationName + " a specific resource quota require specify a namespace name");
         }
         if (ObjectHelper.isEmpty(rqSpec)) {
-            LOG.error("Create a specific resource quota require specify a resource quota spec bean");
-            throw new IllegalArgumentException("Create a specific resource quota require specify a resource quota spec bean");
+            LOG.error("{} a specific resource quota require specify a resource quota spec bean", operationName);
+            throw new IllegalArgumentException(
+                    operationName + " a specific resource quota require specify a resource quota spec bean");
         }
         Map<String, String> labels
                 = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_RESOURCES_QUOTA_LABELS, Map.class);
         ResourceQuota rqCreating = new ResourceQuotaBuilder().withNewMetadata().withName(rqName).withLabels(labels)
                 .endMetadata().withSpec(rqSpec).build();
         ResourceQuota rq
-                = getEndpoint().getKubernetesClient().resourceQuotas().inNamespace(namespaceName).resource(rqCreating).create();
+                = operation.apply(
+                        getEndpoint().getKubernetesClient().resourceQuotas().inNamespace(namespaceName).resource(rqCreating));
 
         prepareOutboundMessage(exchange, rq);
     }
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/secrets/KubernetesSecretsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/secrets/KubernetesSecretsProducer.java
index 30c05103d27..003ec056451 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/secrets/KubernetesSecretsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/secrets/KubernetesSecretsProducer.java
@@ -18,10 +18,12 @@ package org.apache.camel.component.kubernetes.secrets;
 
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 
 import io.fabric8.kubernetes.api.model.Secret;
 import io.fabric8.kubernetes.api.model.SecretList;
 import io.fabric8.kubernetes.api.model.StatusDetails;
+import io.fabric8.kubernetes.client.dsl.Resource;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
@@ -69,6 +71,10 @@ public class KubernetesSecretsProducer extends DefaultProducer {
                 doCreateSecret(exchange);
                 break;
 
+            case KubernetesOperations.REPLACE_SECRET_OPERATION:
+                doReplaceSecret(exchange);
+                break;
+
             case KubernetesOperations.DELETE_SECRET_OPERATION:
                 doDeleteSecret(exchange);
                 break;
@@ -121,19 +127,30 @@ public class KubernetesSecretsProducer extends DefaultProducer {
         prepareOutboundMessage(exchange, secret);
     }
 
+    protected void doReplaceSecret(Exchange exchange) {
+        doCreateOrUpdateSecret(exchange, "Replace", Resource::replace);
+    }
+
     protected void doCreateSecret(Exchange exchange) {
+        doCreateOrUpdateSecret(exchange, "Create", Resource::create);
+    }
+
+    private void doCreateOrUpdateSecret(Exchange exchange, String operationName, Function<Resource<Secret>, Secret> operation) {
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         Secret secretToCreate = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_SECRET, Secret.class);
         if (ObjectHelper.isEmpty(namespaceName)) {
-            LOG.error("Create a specific secret require specify a namespace name");
-            throw new IllegalArgumentException("Create a specific secret require specify a namespace name");
+            LOG.error("{} a specific secret require specify a namespace name", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific secret require specify a namespace name", operationName));
         }
         if (ObjectHelper.isEmpty(secretToCreate)) {
-            LOG.error("Create a specific secret require specify a secret bean");
-            throw new IllegalArgumentException("Create a specific secret require specify a secret bean");
+            LOG.error("{} a specific secret require specify a secret bean", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific secret require specify a secret bean", operationName));
         }
         Secret secret
-                = getEndpoint().getKubernetesClient().secrets().inNamespace(namespaceName).resource(secretToCreate).create();
+                = operation.apply(
+                        getEndpoint().getKubernetesClient().secrets().inNamespace(namespaceName).resource(secretToCreate));
 
         prepareOutboundMessage(exchange, secret);
     }
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/service_accounts/KubernetesServiceAccountsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/service_accounts/KubernetesServiceAccountsProducer.java
index 95125bca63f..1fffa9d0627 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/service_accounts/KubernetesServiceAccountsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/service_accounts/KubernetesServiceAccountsProducer.java
@@ -18,10 +18,12 @@ package org.apache.camel.component.kubernetes.service_accounts;
 
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 
 import io.fabric8.kubernetes.api.model.ServiceAccount;
 import io.fabric8.kubernetes.api.model.ServiceAccountList;
 import io.fabric8.kubernetes.api.model.StatusDetails;
+import io.fabric8.kubernetes.client.dsl.Resource;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
@@ -69,6 +71,10 @@ public class KubernetesServiceAccountsProducer extends DefaultProducer {
                 doCreateServiceAccount(exchange);
                 break;
 
+            case KubernetesOperations.REPLACE_SERVICE_ACCOUNT_OPERATION:
+                doReplaceServiceAccount(exchange);
+                break;
+
             case KubernetesOperations.DELETE_SERVICE_ACCOUNT_OPERATION:
                 doDeleteServiceAccount(exchange);
                 break;
@@ -124,20 +130,31 @@ public class KubernetesServiceAccountsProducer extends DefaultProducer {
         prepareOutboundMessage(exchange, sa);
     }
 
+    protected void doReplaceServiceAccount(Exchange exchange) {
+        doCreateOrUpdateServiceAccount(exchange, "Replace", Resource::replace);
+    }
+
     protected void doCreateServiceAccount(Exchange exchange) {
+        doCreateOrUpdateServiceAccount(exchange, "Create", Resource::create);
+    }
+
+    private void doCreateOrUpdateServiceAccount(
+            Exchange exchange, String operationName, Function<Resource<ServiceAccount>, ServiceAccount> operation) {
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         ServiceAccount saToCreate
                 = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_SERVICE_ACCOUNT, ServiceAccount.class);
         if (ObjectHelper.isEmpty(namespaceName)) {
-            LOG.error("Create a specific Service Account require specify a namespace name");
-            throw new IllegalArgumentException("Create a specific Service Account require specify a namespace name");
+            LOG.error("{} a specific Service Account require specify a namespace name", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific Service Account require specify a namespace name", operationName));
         }
         if (ObjectHelper.isEmpty(saToCreate)) {
-            LOG.error("Create a specific Service Account require specify a Service Account bean");
-            throw new IllegalArgumentException("Create a specific Service Account require specify a Service Account bean");
+            LOG.error("{} a specific Service Account require specify a Service Account bean", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific Service Account require specify a Service Account bean", operationName));
         }
-        ServiceAccount sa = getEndpoint().getKubernetesClient().serviceAccounts().inNamespace(namespaceName)
-                .resource(saToCreate).create();
+        ServiceAccount sa = operation.apply(getEndpoint().getKubernetesClient().serviceAccounts().inNamespace(namespaceName)
+                .resource(saToCreate));
 
         prepareOutboundMessage(exchange, sa);
     }
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/services/KubernetesServicesProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/services/KubernetesServicesProducer.java
index a97e6946fd1..2383e5c9014 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/services/KubernetesServicesProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/services/KubernetesServicesProducer.java
@@ -18,12 +18,14 @@ package org.apache.camel.component.kubernetes.services;
 
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 
 import io.fabric8.kubernetes.api.model.Service;
 import io.fabric8.kubernetes.api.model.ServiceBuilder;
 import io.fabric8.kubernetes.api.model.ServiceList;
 import io.fabric8.kubernetes.api.model.ServiceSpec;
 import io.fabric8.kubernetes.api.model.StatusDetails;
+import io.fabric8.kubernetes.client.dsl.Resource;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
@@ -71,6 +73,10 @@ public class KubernetesServicesProducer extends DefaultProducer {
                 doCreateService(exchange);
                 break;
 
+            case KubernetesOperations.REPLACE_SERVICE_OPERATION:
+                doReplaceService(exchange);
+                break;
+
             case KubernetesOperations.DELETE_SERVICE_OPERATION:
                 doDeleteService(exchange);
                 break;
@@ -130,27 +136,40 @@ public class KubernetesServicesProducer extends DefaultProducer {
         prepareOutboundMessage(exchange, service);
     }
 
+    protected void doReplaceService(Exchange exchange) {
+        doCreateOrUpdateService(exchange, "Replace", Resource::replace);
+    }
+
     protected void doCreateService(Exchange exchange) {
+        doCreateOrUpdateService(exchange, "Create", Resource::create);
+    }
+
+    private void doCreateOrUpdateService(
+            Exchange exchange, String operationName, Function<Resource<Service>, Service> operation) {
         String serviceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_SERVICE_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         ServiceSpec serviceSpec = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_SERVICE_SPEC, ServiceSpec.class);
         if (ObjectHelper.isEmpty(serviceName)) {
-            LOG.error("Create a specific service require specify a service name");
-            throw new IllegalArgumentException("Create a specific service require specify a service name");
+            LOG.error("{} a specific service require specify a service name", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific service require specify a service name", operationName));
         }
         if (ObjectHelper.isEmpty(namespaceName)) {
-            LOG.error("Create a specific service require specify a namespace name");
-            throw new IllegalArgumentException("Create a specific service require specify a namespace name");
+            LOG.error("{} a specific service require specify a namespace name", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific service require specify a namespace name", operationName));
         }
         if (ObjectHelper.isEmpty(serviceSpec)) {
-            LOG.error("Create a specific service require specify a service spec bean");
-            throw new IllegalArgumentException("Create a specific service require specify a service spec bean");
+            LOG.error("{} a specific service require specify a service spec bean", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific service require specify a service spec bean", operationName));
         }
         Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_SERVICE_LABELS, Map.class);
         Service serviceCreating = new ServiceBuilder().withNewMetadata().withName(serviceName).withLabels(labels).endMetadata()
                 .withSpec(serviceSpec).build();
         Service service
-                = getEndpoint().getKubernetesClient().services().inNamespace(namespaceName).resource(serviceCreating).create();
+                = operation.apply(
+                        getEndpoint().getKubernetesClient().services().inNamespace(namespaceName).resource(serviceCreating));
 
         prepareOutboundMessage(exchange, service);
     }
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/deploymentconfigs/OpenshiftDeploymentConfigsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/deploymentconfigs/OpenshiftDeploymentConfigsProducer.java
index 9fdad01b7f7..d49b245002f 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/deploymentconfigs/OpenshiftDeploymentConfigsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/deploymentconfigs/OpenshiftDeploymentConfigsProducer.java
@@ -18,8 +18,10 @@ package org.apache.camel.component.openshift.deploymentconfigs;
 
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 
 import io.fabric8.kubernetes.api.model.StatusDetails;
+import io.fabric8.kubernetes.client.dsl.Resource;
 import io.fabric8.openshift.api.model.DeploymentConfig;
 import io.fabric8.openshift.api.model.DeploymentConfigBuilder;
 import io.fabric8.openshift.api.model.DeploymentConfigList;
@@ -76,6 +78,10 @@ public class OpenshiftDeploymentConfigsProducer extends DefaultProducer {
                 doCreateDeployment(exchange);
                 break;
 
+            case KubernetesOperations.REPLACE_DEPLOYMENT_CONFIG:
+                doReplaceDeployment(exchange);
+                break;
+
             case KubernetesOperations.SCALE_DEPLOYMENT_CONFIG:
                 doScaleDeploymentConfig(exchange);
                 break;
@@ -133,31 +139,43 @@ public class OpenshiftDeploymentConfigsProducer extends DefaultProducer {
         prepareOutboundMessage(exchange, deploymentConfigDeleted);
     }
 
+    protected void doReplaceDeployment(Exchange exchange) {
+        doCreateOrUpdateDeployment(exchange, "Replace", Resource::replace);
+    }
+
     protected void doCreateDeployment(Exchange exchange) {
+        doCreateOrUpdateDeployment(exchange, "Create", Resource::create);
+    }
+
+    private void doCreateOrUpdateDeployment(
+            Exchange exchange, String operationName, Function<Resource<DeploymentConfig>, DeploymentConfig> operation) {
         String deploymentName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         DeploymentConfigSpec dcSpec
                 = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_CONFIG_SPEC, DeploymentConfigSpec.class);
         if (ObjectHelper.isEmpty(deploymentName)) {
-            LOG.error("Create a specific Deployment Config require specify a Deployment name");
-            throw new IllegalArgumentException("Create a specific Deployment Config require specify a pod name");
+            LOG.error("{} a specific Deployment Config require specify a Deployment name", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific Deployment Config require specify a pod name", operationName));
         }
         if (ObjectHelper.isEmpty(namespaceName)) {
-            LOG.error("Create a specific Deployment Config require specify a namespace name");
-            throw new IllegalArgumentException("Create a specific Deployment Config require specify a namespace name");
+            LOG.error("{} a specific Deployment Config require specify a namespace name", operationName);
+            throw new IllegalArgumentException(
+                    String.format("%s a specific Deployment Config require specify a namespace name", operationName));
         }
         if (ObjectHelper.isEmpty(dcSpec)) {
-            LOG.error("Create a specific Deployment Config require specify a Deployment Config spec bean");
+            LOG.error("{} a specific Deployment Config require specify a Deployment Config spec bean", operationName);
             throw new IllegalArgumentException(
-                    "Create a specific Deployment Config require specify a Deployment Config spec bean");
+                    String.format("%s a specific Deployment Config require specify a Deployment Config spec bean",
+                            operationName));
         }
         Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_DEPLOYMENTS_LABELS, Map.class);
         DeploymentConfig deploymentCreating = new DeploymentConfigBuilder().withNewMetadata().withName(deploymentName)
                 .withLabels(labels).endMetadata().withSpec(dcSpec).build();
-        DeploymentConfig deploymentConfig = getEndpoint().getKubernetesClient().adapt(OpenShiftClient.class).deploymentConfigs()
-                .inNamespace(namespaceName)
-                .resource(deploymentCreating)
-                .create();
+        DeploymentConfig deploymentConfig
+                = operation.apply(getEndpoint().getKubernetesClient().adapt(OpenShiftClient.class).deploymentConfigs()
+                        .inNamespace(namespaceName)
+                        .resource(deploymentCreating));
 
         prepareOutboundMessage(exchange, deploymentConfig);
     }
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesConfigMapsConsumerIT.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesConfigMapsConsumerIT.java
index c5f4e7803e5..c16c2d99301 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesConfigMapsConsumerIT.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesConfigMapsConsumerIT.java
@@ -38,6 +38,7 @@ import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -105,8 +106,31 @@ public class KubernetesConfigMapsConsumerIT extends KubernetesTestSupport {
         assertNotNull(message.getBody());
     }
 
-    @ParameterizedTest
+    @Test
     @Order(3)
+    void replaceConfigMap() {
+        configureMock();
+
+        Map<String, String> configMapData = Map.of("test1", "test1");
+        Exchange ex = template.request("direct:replaceConfigmap", exchange -> {
+            exchange.getIn().removeHeader(KubernetesConstants.KUBERNETES_CONFIGMAPS_LABELS);
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_NAME, "test1");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_DATA, configMapData);
+        });
+
+        Message message = ex.getMessage();
+
+        assertNotNull(message);
+        ConfigMap result = ex.getMessage().getBody(ConfigMap.class);
+
+        assertEquals("default", result.getMetadata().getNamespace());
+        assertEquals("test1", result.getMetadata().getName());
+        assertEquals(configMapData, result.getData());
+    }
+
+    @ParameterizedTest
+    @Order(4)
     @ValueSource(strings = { "test", "test1" })
     void deleteConfigMaps(String configMapName) {
         Exchange ex = template.request("direct:deleteConfigmap", exchange -> {
@@ -132,6 +156,9 @@ public class KubernetesConfigMapsConsumerIT extends KubernetesTestSupport {
                 from("direct:createConfigmap")
                         .toF("kubernetes-config-maps://%s?oauthToken=%s&operation=createConfigMap", host,
                                 authToken);
+                from("direct:replaceConfigmap")
+                        .toF("kubernetes-config-maps://%s?oauthToken=%s&operation=replaceConfigMap", host,
+                                authToken);
 
                 from("direct:deleteConfigmap")
                         .toF("kubernetes-config-maps://%s?oauthToken=%s&operation=deleteConfigMap", host,
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesConfigMapsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesConfigMapsProducerTest.java
index 2327dae6dd3..d18e510328b 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesConfigMapsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesConfigMapsProducerTest.java
@@ -131,6 +131,32 @@ public class KubernetesConfigMapsProducerTest extends KubernetesTestSupport {
         assertEquals(labels, result.getMetadata().getLabels());
     }
 
+    @Test
+    void replaceConfigMap() {
+        Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+        Map<String, String> data = Map.of("my.data.key", "my.data.value");
+        ConfigMap cm1 = new ConfigMapBuilder().withNewMetadata().withName("cm1").withNamespace("test").withLabels(labels).and()
+                .withData(data).build();
+        server.expect().get().withPath("/api/v1/namespaces/test/configmaps/cm1")
+                .andReturn(200,
+                        new ConfigMapBuilder().withNewMetadata().withName("cm1").withNamespace("test").endMetadata().build())
+                .once();
+        server.expect().put().withPath("/api/v1/namespaces/test/configmaps/cm1").andReturn(200, cm1).once();
+
+        Exchange ex = template.request("direct:replaceConfigMap", exchange -> {
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAPS_LABELS, labels);
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_NAME, "cm1");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_DATA, data);
+        });
+
+        ConfigMap result = ex.getMessage().getBody(ConfigMap.class);
+
+        assertEquals("test", result.getMetadata().getNamespace());
+        assertEquals("cm1", result.getMetadata().getName());
+        assertEquals(labels, result.getMetadata().getLabels());
+    }
+
     @Test
     void deleteConfigMap() {
         ConfigMap cm1 = new ConfigMapBuilder().withNewMetadata().withName("cm1").withNamespace("test").and().build();
@@ -159,6 +185,8 @@ public class KubernetesConfigMapsProducerTest extends KubernetesTestSupport {
                         .to("kubernetes-config-maps:///?kubernetesClient=#kubernetesClient&operation=getConfigMap");
                 from("direct:createConfigMap")
                         .to("kubernetes-config-maps:///?kubernetesClient=#kubernetesClient&operation=createConfigMap");
+                from("direct:replaceConfigMap")
+                        .to("kubernetes-config-maps:///?kubernetesClient=#kubernetesClient&operation=replaceConfigMap");
                 from("direct:deleteConfigMap")
                         .to("kubernetes-config-maps:///?kubernetesClient=#kubernetesClient&operation=deleteConfigMap");
             }
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesCustomResourcesProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesCustomResourcesProducerTest.java
index 1b1b2d59750..22d54a9ddd4 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesCustomResourcesProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesCustomResourcesProducerTest.java
@@ -99,6 +99,32 @@ public class KubernetesCustomResourcesProducerTest extends KubernetesTestSupport
         assertNotNull(ex.getMessage().getBody());
     }
 
+    @Test
+    @Order(0)
+    void replaceTest() {
+        server.expect().get().withPath("/apis/sources.knative.dev/v1alpha1/namespaces/testnamespace/githubsources/samplecr")
+                .andReturn(200, githubSourceString).once();
+        server.expect().put().withPath("/apis/sources.knative.dev/v1alpha1/namespaces/testnamespace/githubsources/samplecr")
+                .andReturn(200, githubSourceString).once();
+
+        Exchange ex = template.request("direct:replaceCustomResource", exchange -> {
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_INSTANCE_NAME, "samplecr");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "testnamespace");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_NAME, "githubsources.sources.knative.dev");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_GROUP, "sources.knative.dev");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_SCOPE, "Namespaced");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_VERSION, "v1alpha1");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_PLURAL, "githubsources");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_INSTANCE, githubSourceString);
+        });
+
+        assertFalse(ex.isFailed());
+        assertNull(ex.getException());
+
+        assertNotNull(ex.getMessage());
+        assertNotNull(ex.getMessage().getBody());
+    }
+
     @Test
     @Order(2)
     void listTest() throws Exception {
@@ -204,6 +230,8 @@ public class KubernetesCustomResourcesProducerTest extends KubernetesTestSupport
                         "kubernetes-custom-resources:///?kubernetesClient=#kubernetesClient&operation=deleteCustomResource");
                 from("direct:createCustomResource").toF(
                         "kubernetes-custom-resources:///?kubernetesClient=#kubernetesClient&operation=createCustomResource");
+                from("direct:replaceCustomResource").toF(
+                        "kubernetes-custom-resources:///?kubernetesClient=#kubernetesClient&operation=replaceCustomResource");
             }
         };
     }
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesDeploymentsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesDeploymentsProducerTest.java
index b6ba664ad6b..32354ca1462 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesDeploymentsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesDeploymentsProducerTest.java
@@ -102,6 +102,34 @@ public class KubernetesDeploymentsProducerTest extends KubernetesTestSupport {
         assertEquals(13, result.getSpec().getReplicas());
     }
 
+    @Test
+    void replaceDeployment() {
+        Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+        DeploymentSpec spec = new DeploymentSpecBuilder().withReplicas(13).build();
+        Deployment de1
+                = new DeploymentBuilder().withNewMetadata().withName("de1").withNamespace("test").withLabels(labels).and()
+                        .withSpec(spec).build();
+        server.expect().get().withPath("/apis/apps/v1/namespaces/test/deployments/de1")
+                .andReturn(200,
+                        new DeploymentBuilder().withNewMetadata().withName("de1").withNamespace("test").endMetadata().build())
+                .once();
+        server.expect().put().withPath("/apis/apps/v1/namespaces/test/deployments/de1").andReturn(200, de1).once();
+
+        Exchange ex = template.request("direct:replaceDeployment", exchange -> {
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_DEPLOYMENTS_LABELS, labels);
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_NAME, "de1");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_SPEC, spec);
+        });
+
+        Deployment result = ex.getMessage().getBody(Deployment.class);
+
+        assertEquals("test", result.getMetadata().getNamespace());
+        assertEquals("de1", result.getMetadata().getName());
+        assertEquals(labels, result.getMetadata().getLabels());
+        assertEquals(13, result.getSpec().getReplicas());
+    }
+
     @Test
     void deleteDeployment() {
         Deployment de1 = new DeploymentBuilder().withNewMetadata().withNamespace("test").withName("de1")
@@ -162,6 +190,8 @@ public class KubernetesDeploymentsProducerTest extends KubernetesTestSupport {
                         .toF("kubernetes-deployments:///?kubernetesClient=#kubernetesClient&operation=deleteDeployment");
                 from("direct:createDeployment")
                         .toF("kubernetes-deployments:///?kubernetesClient=#kubernetesClient&operation=createDeployment");
+                from("direct:replaceDeployment")
+                        .toF("kubernetes-deployments:///?kubernetesClient=#kubernetesClient&operation=replaceDeployment");
                 from("direct:scaleDeployment")
                         .toF("kubernetes-deployments:///?kubernetesClient=#kubernetesClient&operation=scaleDeployment");
             }
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesHPAProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesHPAProducerTest.java
index ad381a809c8..01a4c3d5155 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesHPAProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesHPAProducerTest.java
@@ -126,6 +126,36 @@ public class KubernetesHPAProducerTest extends KubernetesTestSupport {
         assertEquals(13, result.getSpec().getMinReplicas());
     }
 
+    @Test
+    void replaceHPATest() {
+        Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+        HorizontalPodAutoscalerSpec spec = new HorizontalPodAutoscalerSpecBuilder().withMinReplicas(13).build();
+        HorizontalPodAutoscaler hpa1 = new HorizontalPodAutoscalerBuilder().withNewMetadata().withName("hpa1")
+                .withNamespace("test").withLabels(labels).and()
+                .withSpec(spec).build();
+        server.expect().get().withPath("/apis/autoscaling/v1/namespaces/test/horizontalpodautoscalers/hpa1")
+                .andReturn(200, new HorizontalPodAutoscalerBuilder().withNewMetadata().withName("hpa1")
+                        .withNamespace("test").endMetadata().build())
+                .once();
+        server.expect().put().withPath("/apis/autoscaling/v1/namespaces/test/horizontalpodautoscalers/hpa1")
+                .andReturn(200, hpa1)
+                .once();
+
+        Exchange ex = template.request("direct:replaceHPA", exchange -> {
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_HPA_LABELS, labels);
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_HPA_NAME, "hpa1");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_HPA_SPEC, spec);
+        });
+
+        HorizontalPodAutoscaler result = ex.getMessage().getBody(HorizontalPodAutoscaler.class);
+
+        assertEquals("test", result.getMetadata().getNamespace());
+        assertEquals("hpa1", result.getMetadata().getName());
+        assertEquals(labels, result.getMetadata().getLabels());
+        assertEquals(13, result.getSpec().getMinReplicas());
+    }
+
     @Test
     void deleteHPATest() {
         HorizontalPodAutoscaler hpa1
@@ -153,6 +183,7 @@ public class KubernetesHPAProducerTest extends KubernetesTestSupport {
                         .to("kubernetes-hpa:///?kubernetesClient=#kubernetesClient&operation=listHPAByLabels");
                 from("direct:getHPA").to("kubernetes-hpa:///?kubernetesClient=#kubernetesClient&operation=getHPA");
                 from("direct:createHPA").to("kubernetes-hpa:///?kubernetesClient=#kubernetesClient&operation=createHPA");
+                from("direct:replaceHPA").to("kubernetes-hpa:///?kubernetesClient=#kubernetesClient&operation=replaceHPA");
                 from("direct:deleteHPA").to("kubernetes-hpa:///?kubernetesClient=#kubernetesClient&operation=deleteHPA");
             }
         };
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesJobProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesJobProducerTest.java
index 3e0b0ab134d..52696df1e0b 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesJobProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesJobProducerTest.java
@@ -20,6 +20,9 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import io.fabric8.kubernetes.api.model.LabelSelector;
+import io.fabric8.kubernetes.api.model.ObjectMeta;
+import io.fabric8.kubernetes.api.model.PodTemplateSpecBuilder;
 import io.fabric8.kubernetes.api.model.batch.v1.Job;
 import io.fabric8.kubernetes.api.model.batch.v1.JobBuilder;
 import io.fabric8.kubernetes.api.model.batch.v1.JobListBuilder;
@@ -114,6 +117,36 @@ public class KubernetesJobProducerTest extends KubernetesTestSupport {
         assertEquals(13, result.getSpec().getBackoffLimit());
     }
 
+    @Test
+    void replaceJobTest() {
+        Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+        JobSpec spec = new JobSpecBuilder().withBackoffLimit(13).withSelector(new LabelSelector())
+                .withTemplate(new PodTemplateSpecBuilder().build()).build();
+        Job j1 = new JobBuilder().withNewMetadata().withName("j1").withNamespace("test").withLabels(labels).and()
+                .withSpec(spec).build();
+        server.expect().get().withPath("/apis/batch/v1/namespaces/test/jobs/j1")
+                .andReturn(200, new JobBuilder().withNewMetadata().withName("j1").withNamespace("test").endMetadata()
+                        .withSpec(new JobSpecBuilder()
+                                .withTemplate(new PodTemplateSpecBuilder().withMetadata(new ObjectMeta()).build()).build())
+                        .build())
+                .times(2);
+        server.expect().put().withPath("/apis/batch/v1/namespaces/test/jobs/j1").andReturn(200, j1).once();
+
+        Exchange ex = template.request("direct:replace", exchange -> {
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_JOB_LABELS, labels);
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_JOB_NAME, "j1");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_JOB_SPEC, spec);
+        });
+
+        Job result = ex.getMessage().getBody(Job.class);
+
+        assertEquals("test", result.getMetadata().getNamespace());
+        assertEquals("j1", result.getMetadata().getName());
+        assertEquals(labels, result.getMetadata().getLabels());
+        assertEquals(13, result.getSpec().getBackoffLimit());
+    }
+
     @Test
     void deleteJobTest() {
         Job j1 = new JobBuilder().withNewMetadata().withName("j1").withNamespace("test").and().build();
@@ -139,6 +172,7 @@ public class KubernetesJobProducerTest extends KubernetesTestSupport {
                 from("direct:listByLabels").to("kubernetes-job:foo?operation=listJobByLabels");
                 from("direct:get").to("kubernetes-job:foo?operation=getJob");
                 from("direct:create").to("kubernetes-job:foo?operation=createJob");
+                from("direct:replace").to("kubernetes-job:foo?operation=replaceJob");
                 from("direct:delete").to("kubernetes-job:foo?operation=deleteJob");
             }
         };
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNamespacesProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNamespacesProducerTest.java
index 247e3c7f8eb..2b99a42a27d 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNamespacesProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNamespacesProducerTest.java
@@ -79,7 +79,26 @@ public class KubernetesNamespacesProducerTest extends KubernetesTestSupport {
         server.expect().post().withPath("/api/v1/namespaces").andReturn(200, ns1).once();
 
         Exchange ex = template.request("direct:createNamespace", exchange -> {
-            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "ns1");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_LABELS, labels);
+        });
+
+        Namespace result = ex.getMessage().getBody(Namespace.class);
+
+        assertEquals("ns1", result.getMetadata().getName());
+        assertEquals(labels, result.getMetadata().getLabels());
+    }
+
+    @Test
+    void replaceNamespace() {
+        Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+        Namespace ns1 = new NamespaceBuilder().withNewMetadata().withName("ns1").withLabels(labels).endMetadata().build();
+        server.expect().get().withPath("/api/v1/namespaces/ns1")
+                .andReturn(200, new NamespaceBuilder().withNewMetadata().withName("ns1").endMetadata().build()).once();
+        server.expect().put().withPath("/api/v1/namespaces/ns1").andReturn(200, ns1).once();
+
+        Exchange ex = template.request("direct:replaceNamespace", exchange -> {
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "ns1");
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_LABELS, labels);
         });
 
@@ -111,6 +130,8 @@ public class KubernetesNamespacesProducerTest extends KubernetesTestSupport {
                 from("direct:getNs").to("kubernetes-namespaces:///?kubernetesClient=#kubernetesClient&operation=getNamespace");
                 from("direct:createNamespace")
                         .to("kubernetes-namespaces:///?kubernetesClient=#kubernetesClient&operation=createNamespace");
+                from("direct:replaceNamespace")
+                        .to("kubernetes-namespaces:///?kubernetesClient=#kubernetesClient&operation=replaceNamespace");
                 from("direct:deleteNamespace")
                         .to("kubernetes-namespaces:///?kubernetesClient=#kubernetesClient&operation=deleteNamespace");
             }
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNodesProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNodesProducerTest.java
index 32de775f6b2..576fd3b1181 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNodesProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNodesProducerTest.java
@@ -95,6 +95,28 @@ public class KubernetesNodesProducerTest extends KubernetesTestSupport {
         assertEquals("test", result.getMetadata().getName());
     }
 
+    @Test
+    void replaceNodeTest() {
+        ObjectMeta meta = new ObjectMeta();
+        meta.setName("test");
+        server.expect().get().withPath("/api/v1/nodes/test").andReturn(200, new NodeBuilder().build()).once();
+        server.expect().put().withPath("/api/v1/nodes/test").andReturn(200, new NodeBuilder().withMetadata(meta).build())
+                .once();
+        Exchange ex = template.request("direct:replaceNode", exchange -> {
+            Map<String, String> labels = new HashMap<>();
+            labels.put("key1", "value1");
+            labels.put("key2", "value2");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NODES_LABELS, labels);
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NODE_NAME, "test");
+            NodeSpec spec = new NodeSpecBuilder().build();
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NODE_SPEC, spec);
+        });
+
+        Node result = ex.getMessage().getBody(Node.class);
+
+        assertEquals("test", result.getMetadata().getName());
+    }
+
     @Test
     void deleteNode() {
         Node node1 = new NodeBuilder().withNewMetadata().withName("node1").withNamespace("test").and().build();
@@ -117,6 +139,7 @@ public class KubernetesNodesProducerTest extends KubernetesTestSupport {
                 from("direct:listByLabels")
                         .toF("kubernetes-nodes:///?kubernetesClient=#kubernetesClient&operation=listNodesByLabels");
                 from("direct:createNode").toF("kubernetes-nodes:///?kubernetesClient=#kubernetesClient&operation=createNode");
+                from("direct:replaceNode").toF("kubernetes-nodes:///?kubernetesClient=#kubernetesClient&operation=replaceNode");
                 from("direct:deleteNode").toF("kubernetes-nodes:///?kubernetesClient=#kubernetesClient&operation=deleteNode");
             }
         };
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesClaimsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesClaimsProducerTest.java
index 00ded9191b3..ab2314c5d24 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesClaimsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesClaimsProducerTest.java
@@ -106,6 +106,34 @@ public class KubernetesPersistentVolumesClaimsProducerTest extends KubernetesTes
         assertEquals("SomeVolumeName", result.getSpec().getVolumeName());
     }
 
+    @Test
+    void replacePersistentVolumeClaim() {
+        Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+        PersistentVolumeClaimSpec spec = new PersistentVolumeClaimSpecBuilder().withVolumeName("SomeVolumeName").build();
+        PersistentVolumeClaim vc1 = new PersistentVolumeClaimBuilder().withNewMetadata().withName("vc1").withNamespace("test")
+                .withLabels(labels).and()
+                .withSpec(spec).build();
+        server.expect().get().withPath("/api/v1/namespaces/test/persistentvolumeclaims/vc1")
+                .andReturn(200, new PersistentVolumeClaimBuilder().withNewMetadata().withName("vc1").withNamespace("test")
+                        .endMetadata().build())
+                .once();
+        server.expect().put().withPath("/api/v1/namespaces/test/persistentvolumeclaims/vc1").andReturn(200, vc1).once();
+
+        Exchange ex = template.request("direct:replace", exchange -> {
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_PERSISTENT_VOLUMES_CLAIMS_LABELS, labels);
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_PERSISTENT_VOLUME_CLAIM_NAME, "vc1");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_PERSISTENT_VOLUME_CLAIM_SPEC, spec);
+        });
+
+        PersistentVolumeClaim result = ex.getMessage().getBody(PersistentVolumeClaim.class);
+
+        assertEquals("test", result.getMetadata().getNamespace());
+        assertEquals("vc1", result.getMetadata().getName());
+        assertEquals(labels, result.getMetadata().getLabels());
+        assertEquals("SomeVolumeName", result.getSpec().getVolumeName());
+    }
+
     @Test
     void deletePersistentVolumeClaim() {
         ObjectMeta meta = new ObjectMeta();
@@ -133,6 +161,8 @@ public class KubernetesPersistentVolumesClaimsProducerTest extends KubernetesTes
                         "kubernetes-persistent-volumes-claims:///?kubernetesClient=#kubernetesClient&operation=listPersistentVolumesClaimsByLabels");
                 from("direct:create").to(
                         "kubernetes-persistent-volumes-claims:///?kubernetesClient=#kubernetesClient&operation=createPersistentVolumeClaim");
+                from("direct:replace").to(
+                        "kubernetes-persistent-volumes-claims:///?kubernetesClient=#kubernetesClient&operation=replacePersistentVolumeClaim");
                 from("direct:delete").to(
                         "kubernetes-persistent-volumes-claims:///?kubernetesClient=#kubernetesClient&operation=deletePersistentVolumeClaim");
             }
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPodsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPodsProducerTest.java
index 2533aaf7aa6..bfb957f3e8b 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPodsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPodsProducerTest.java
@@ -122,6 +122,32 @@ public class KubernetesPodsProducerTest extends KubernetesTestSupport {
         assertEquals("SomeHostname", result.getSpec().getHostname());
     }
 
+    @Test
+    void replacePod() {
+        Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+        PodSpec spec = new PodSpecBuilder().withHostname("SomeHostname").build();
+        Pod pod1 = new PodBuilder().withNewMetadata().withName("pod1").withNamespace("test").withLabels(labels).and()
+                .withSpec(spec).build();
+        server.expect().get().withPath("/api/v1/namespaces/test/pods/pod1")
+                .andReturn(200, new PodBuilder().withNewMetadata().withName("pod1").withNamespace("test").endMetadata().build())
+                .once();
+        server.expect().put().withPath("/api/v1/namespaces/test/pods/pod1").andReturn(200, pod1).once();
+
+        Exchange ex = template.request("direct:replacePod", exchange -> {
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_PODS_LABELS, labels);
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_POD_NAME, "pod1");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_POD_SPEC, spec);
+        });
+
+        Pod result = ex.getMessage().getBody(Pod.class);
+
+        assertEquals("test", result.getMetadata().getNamespace());
+        assertEquals("pod1", result.getMetadata().getName());
+        assertEquals(labels, result.getMetadata().getLabels());
+        assertEquals("SomeHostname", result.getSpec().getHostname());
+    }
+
     @Test
     void deletePod() {
         Pod pod1 = new PodBuilder().withNewMetadata().withName("pod1").withNamespace("test").and().build();
@@ -147,6 +173,7 @@ public class KubernetesPodsProducerTest extends KubernetesTestSupport {
                         .to("kubernetes-pods:///?kubernetesClient=#kubernetesClient&operation=listPodsByLabels");
                 from("direct:getPod").to("kubernetes-pods:///?kubernetesClient=#kubernetesClient&operation=getPod");
                 from("direct:createPod").to("kubernetes-pods:///?kubernetesClient=#kubernetesClient&operation=createPod");
+                from("direct:replacePod").to("kubernetes-pods:///?kubernetesClient=#kubernetesClient&operation=replacePod");
                 from("direct:deletePod").to("kubernetes-pods:///?kubernetesClient=#kubernetesClient&operation=deletePod");
             }
         };
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesReplicationControllersProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesReplicationControllersProducerTest.java
index 0061fcaf449..c3538678b59 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesReplicationControllersProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesReplicationControllersProducerTest.java
@@ -122,6 +122,34 @@ public class KubernetesReplicationControllersProducerTest extends KubernetesTest
         assertEquals(13, result.getSpec().getReplicas());
     }
 
+    @Test
+    void replaceReplicationController() {
+        Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+        ReplicationControllerSpec spec = new ReplicationControllerSpecBuilder().withReplicas(13).build();
+        ReplicationController rc1 = new ReplicationControllerBuilder().withNewMetadata().withName("rc1").withNamespace("test")
+                .withLabels(labels).and()
+                .withSpec(spec).build();
+        server.expect().get().withPath("/api/v1/namespaces/test/replicationcontrollers/rc1")
+                .andReturn(200, new ReplicationControllerBuilder().withNewMetadata().withName("rc1").withNamespace("test")
+                        .endMetadata().build())
+                .once();
+        server.expect().put().withPath("/api/v1/namespaces/test/replicationcontrollers/rc1").andReturn(200, rc1).once();
+
+        Exchange ex = template.request("direct:replaceReplicationController", exchange -> {
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLERS_LABELS, labels);
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_NAME, "rc1");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_SPEC, spec);
+        });
+
+        ReplicationController result = ex.getMessage().getBody(ReplicationController.class);
+
+        assertEquals("test", result.getMetadata().getNamespace());
+        assertEquals("rc1", result.getMetadata().getName());
+        assertEquals(labels, result.getMetadata().getLabels());
+        assertEquals(13, result.getSpec().getReplicas());
+    }
+
     @Test
     void deleteReplicationController() {
         server.expect().withPath("/api/v1/namespaces/test/replicationcontrollers/repl1")
@@ -184,6 +212,8 @@ public class KubernetesReplicationControllersProducerTest extends KubernetesTest
                         "kubernetes-replication-controllers:///?kubernetesClient=#kubernetesClient&operation=scaleReplicationController");
                 from("direct:createReplicationController").to(
                         "kubernetes-replication-controllers:///?kubernetesClient=#kubernetesClient&operation=createReplicationController");
+                from("direct:replaceReplicationController").to(
+                        "kubernetes-replication-controllers:///?kubernetesClient=#kubernetesClient&operation=replaceReplicationController");
                 from("direct:deleteReplicationController").to(
                         "kubernetes-replication-controllers:///?kubernetesClient=#kubernetesClient&operation=deleteReplicationController");
             }
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesResourcesQuotaProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesResourcesQuotaProducerTest.java
index 4a0514169db..9834c295c9f 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesResourcesQuotaProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesResourcesQuotaProducerTest.java
@@ -83,6 +83,33 @@ public class KubernetesResourcesQuotaProducerTest extends KubernetesTestSupport
         assertEquals(List.of("SomeScope"), result.getSpec().getScopes());
     }
 
+    @Test
+    void replaceResourceQuota() {
+        Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+        ResourceQuotaSpec spec = new ResourceQuotaSpecBuilder().withScopes("SomeScope").build();
+        ResourceQuota rq1
+                = new ResourceQuotaBuilder().withNewMetadata().withName("rq1").withNamespace("test").withLabels(labels).and()
+                        .withSpec(spec).build();
+        server.expect().get().withPath("/api/v1/namespaces/test/resourcequotas/rq1").andReturn(200,
+                new ResourceQuotaBuilder().withNewMetadata().withName("rq1").withNamespace("test").endMetadata().build())
+                .once();
+        server.expect().put().withPath("/api/v1/namespaces/test/resourcequotas/rq1").andReturn(200, rq1).once();
+
+        Exchange ex = template.request("direct:replace", exchange -> {
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_RESOURCES_QUOTA_LABELS, labels);
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_RESOURCES_QUOTA_NAME, "rq1");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_RESOURCE_QUOTA_SPEC, spec);
+        });
+
+        ResourceQuota result = ex.getMessage().getBody(ResourceQuota.class);
+
+        assertEquals("test", result.getMetadata().getNamespace());
+        assertEquals("rq1", result.getMetadata().getName());
+        assertEquals(labels, result.getMetadata().getLabels());
+        assertEquals(List.of("SomeScope"), result.getSpec().getScopes());
+    }
+
     @Test
     void deleteResourceQuota() {
         ResourceQuota rq1 = new ResourceQuotaBuilder().withNewMetadata().withName("rq1").withNamespace("test").and().build();
@@ -107,6 +134,8 @@ public class KubernetesResourcesQuotaProducerTest extends KubernetesTestSupport
                         .to("kubernetes-resources-quota:///?kubernetesClient=#kubernetesClient&operation=listResourcesQuota");
                 from("direct:create")
                         .to("kubernetes-resources-quota:///?kubernetesClient=#kubernetesClient&operation=createResourceQuota");
+                from("direct:replace")
+                        .to("kubernetes-resources-quota:///?kubernetesClient=#kubernetesClient&operation=replaceResourceQuota");
                 from("direct:delete")
                         .to("kubernetes-resources-quota:///?kubernetesClient=#kubernetesClient&operation=deleteResourceQuota");
             }
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesSecretsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesSecretsProducerTest.java
index f83c45cd87d..f2257bfae5c 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesSecretsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesSecretsProducerTest.java
@@ -107,6 +107,23 @@ public class KubernetesSecretsProducerTest extends KubernetesTestSupport {
         assertEquals("sc1", result.getMetadata().getName());
     }
 
+    @Test
+    void replaceSecret() {
+        Secret sc1 = new SecretBuilder().withNewMetadata().withName("sc1").withNamespace("test").and().build();
+        server.expect().get().withPath("/api/v1/namespaces/test/secrets/sc1").andReturn(200, sc1).once();
+        server.expect().put().withPath("/api/v1/namespaces/test/secrets/sc1").andReturn(200, sc1).once();
+
+        Exchange ex = template.request("direct:replace", exchange -> {
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SECRET, sc1);
+        });
+
+        Secret result = ex.getMessage().getBody(Secret.class);
+
+        assertEquals("test", result.getMetadata().getNamespace());
+        assertEquals("sc1", result.getMetadata().getName());
+    }
+
     @Test
     void deleteSecret() {
         Secret sc1 = new SecretBuilder().withNewMetadata().withName("sc1").withNamespace("test").and().build();
@@ -132,6 +149,7 @@ public class KubernetesSecretsProducerTest extends KubernetesTestSupport {
                         .to("kubernetes-secrets:///?kubernetesClient=#kubernetesClient&operation=listSecretsByLabels");
                 from("direct:get").to("kubernetes-secrets:///?kubernetesClient=#kubernetesClient&operation=getSecret");
                 from("direct:create").to("kubernetes-secrets:///?kubernetesClient=#kubernetesClient&operation=createSecret");
+                from("direct:replace").to("kubernetes-secrets:///?kubernetesClient=#kubernetesClient&operation=replaceSecret");
                 from("direct:delete").to("kubernetes-secrets:///?kubernetesClient=#kubernetesClient&operation=deleteSecret");
             }
         };
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServiceAccountsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServiceAccountsProducerTest.java
index 833a72cfca5..96e3880677a 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServiceAccountsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServiceAccountsProducerTest.java
@@ -93,6 +93,23 @@ public class KubernetesServiceAccountsProducerTest extends KubernetesTestSupport
         assertEquals("sa1", result.getMetadata().getName());
     }
 
+    @Test
+    void replaceServiceAccount() {
+        ServiceAccount sa1 = new ServiceAccountBuilder().withNewMetadata().withName("sa1").withNamespace("test").and().build();
+        server.expect().get().withPath("/api/v1/namespaces/test/serviceaccounts/sa1").andReturn(200, sa1).once();
+        server.expect().put().withPath("/api/v1/namespaces/test/serviceaccounts/sa1").andReturn(200, sa1).once();
+
+        Exchange ex = template.request("direct:replace", exchange -> {
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SERVICE_ACCOUNT, sa1);
+        });
+
+        ServiceAccount result = ex.getMessage().getBody(ServiceAccount.class);
+
+        assertEquals("test", result.getMetadata().getNamespace());
+        assertEquals("sa1", result.getMetadata().getName());
+    }
+
     @Test
     void deleteServiceAccount() {
         ServiceAccount sa1 = new ServiceAccountBuilder().withNewMetadata().withName("sa1").withNamespace("test").and().build();
@@ -119,6 +136,8 @@ public class KubernetesServiceAccountsProducerTest extends KubernetesTestSupport
                         "kubernetes-service-accounts:///?kubernetesClient=#kubernetesClient&operation=listServiceAccountsByLabels");
                 from("direct:create").to(
                         "kubernetes-service-accounts:///?kubernetesClient=#kubernetesClient&operation=createServiceAccount");
+                from("direct:replace").to(
+                        "kubernetes-service-accounts:///?kubernetesClient=#kubernetesClient&operation=replaceServiceAccount");
                 from("direct:delete").to(
                         "kubernetes-service-accounts:///?kubernetesClient=#kubernetesClient&operation=deleteServiceAccount");
             }
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServicesProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServicesProducerTest.java
index 9c981ccb341..e6753286747 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServicesProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServicesProducerTest.java
@@ -115,6 +115,33 @@ public class KubernetesServicesProducerTest extends KubernetesTestSupport {
         assertEquals("SomeClusterIp", result.getSpec().getClusterIP());
     }
 
+    @Test
+    void replaceService() {
+        Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+        ServiceSpec spec = new ServiceSpecBuilder().withExternalName("SomeExternalName").build();
+        Service se1 = new ServiceBuilder().withNewMetadata().withName("se1").withNamespace("test").withLabels(labels).and()
+                .withSpec(spec).build();
+        server.expect().get().withPath("/api/v1/namespaces/test/services/se1")
+                .andReturn(200, new ServiceBuilder().withNewMetadata().withName("se1").withNamespace("test").and()
+                        .withSpec(new ServiceSpecBuilder().withClusterIP("SomeClusterIp").build()).build())
+                .times(2);
+        server.expect().put().withPath("/api/v1/namespaces/test/services/se1").andReturn(200, se1).once();
+
+        Exchange ex = template.request("direct:replaceService", exchange -> {
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SERVICE_LABELS, labels);
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SERVICE_NAME, "se1");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SERVICE_SPEC, spec);
+        });
+
+        Service result = ex.getMessage().getBody(Service.class);
+
+        assertEquals("test", result.getMetadata().getNamespace());
+        assertEquals("se1", result.getMetadata().getName());
+        assertEquals(labels, result.getMetadata().getLabels());
+        assertEquals("SomeExternalName", result.getSpec().getExternalName());
+    }
+
     @Test
     void deleteService() {
         Service se1 = new ServiceBuilder().withNewMetadata().withName("se1").withNamespace("test").and().build();
@@ -143,6 +170,8 @@ public class KubernetesServicesProducerTest extends KubernetesTestSupport {
                         .to("kubernetes-services:///?kubernetesClient=#kubernetesClient&operation=getService");
                 from("direct:createService")
                         .to("kubernetes-services:///?kubernetesClient=#kubernetesClient&operation=createService");
+                from("direct:replaceService")
+                        .to("kubernetes-services:///?kubernetesClient=#kubernetesClient&operation=replaceService");
                 from("direct:deleteService")
                         .to("kubernetes-services:///?kubernetesClient=#kubernetesClient&operation=deleteService");
             }
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftDeploymentConfigsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftDeploymentConfigsProducerTest.java
index 1c39736a182..dc0ac67024b 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftDeploymentConfigsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftDeploymentConfigsProducerTest.java
@@ -83,9 +83,10 @@ public class OpenshiftDeploymentConfigsProducerTest extends KubernetesTestSuppor
         Map<String, String> labels = Map.of("my.label.key", "my.label.value");
         DeploymentConfigSpec spec = new DeploymentConfigSpecBuilder().withReplicas(13).build();
         DeploymentConfig de1
-            = new DeploymentConfigBuilder().withNewMetadata().withName("de1").withNamespace("test").withLabels(labels).and()
-            .withSpec(spec).build();
-        server.expect().post().withPath("/apis/apps.openshift.io/v1/namespaces/test/deploymentconfigs").andReturn(200, de1).once();
+                = new DeploymentConfigBuilder().withNewMetadata().withName("de1").withNamespace("test").withLabels(labels).and()
+                        .withSpec(spec).build();
+        server.expect().post().withPath("/apis/apps.openshift.io/v1/namespaces/test/deploymentconfigs").andReturn(200, de1)
+                .once();
 
         Exchange ex = template.request("direct:create", exchange -> {
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
@@ -102,6 +103,34 @@ public class OpenshiftDeploymentConfigsProducerTest extends KubernetesTestSuppor
         assertEquals(13, result.getSpec().getReplicas());
     }
 
+    @Test
+    void replaceDeploymentConfig() {
+        Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+        DeploymentConfigSpec spec = new DeploymentConfigSpecBuilder().withReplicas(13).build();
+        DeploymentConfig de1
+                = new DeploymentConfigBuilder().withNewMetadata().withName("de1").withNamespace("test").withLabels(labels).and()
+                        .withSpec(spec).build();
+        server.expect().get().withPath("/apis/apps.openshift.io/v1/namespaces/test/deploymentconfigs/de1").andReturn(200,
+                new DeploymentConfigBuilder().withNewMetadata().withName("de1").withNamespace("test").endMetadata().build())
+                .once();
+        server.expect().put().withPath("/apis/apps.openshift.io/v1/namespaces/test/deploymentconfigs/de1").andReturn(200, de1)
+                .once();
+
+        Exchange ex = template.request("direct:replace", exchange -> {
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_DEPLOYMENTS_LABELS, labels);
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_NAME, "de1");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_CONFIG_SPEC, spec);
+        });
+
+        DeploymentConfig result = ex.getMessage().getBody(DeploymentConfig.class);
+
+        assertEquals("test", result.getMetadata().getNamespace());
+        assertEquals("de1", result.getMetadata().getName());
+        assertEquals(labels, result.getMetadata().getLabels());
+        assertEquals(13, result.getSpec().getReplicas());
+    }
+
     @Test
     void deleteDeploymentConfig() {
         DeploymentConfig de1 = new DeploymentConfigBuilder().withNewMetadata().withNamespace("test").withName("dc1")
@@ -162,6 +191,8 @@ public class OpenshiftDeploymentConfigsProducerTest extends KubernetesTestSuppor
                         .toF("openshift-deploymentconfigs:///?kubernetesClient=#kubernetesClient&operation=listDeploymentConfigsByLabels");
                 from("direct:create")
                         .toF("openshift-deploymentconfigs:///?kubernetesClient=#kubernetesClient&operation=createDeploymentConfig");
+                from("direct:replace")
+                        .toF("openshift-deploymentconfigs:///?kubernetesClient=#kubernetesClient&operation=replaceDeploymentConfig");
                 from("direct:delete")
                         .toF("openshift-deploymentconfigs:///?kubernetesClient=#kubernetesClient&operation=deleteDeploymentConfig");
                 from("direct:scale")