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:11 UTC

[camel] branch CAMEL-17438/add-update-to-producers created (now 5a668efed07)

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

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


      at 5a668efed07 CAMEL-17438: camel-kubernetes - Add replace operation to producers

This branch includes the following new commits:

     new 0ab2cb0e870 CAMEL-17438: camel-kubernetes - Fix warnings and deprecations
     new e8593bca46c CAMEL-17438: camel-kubernetes - Remove unused routes in tests
     new e669851d65e CAMEL-17438: camel-kubernetes - Improve code coverage
     new 5a668efed07 CAMEL-17438: camel-kubernetes - Add replace operation to producers

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[camel] 03/04: CAMEL-17438: camel-kubernetes - Improve code coverage

Posted by nf...@apache.org.
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 e669851d65e3d9ce72ff3d19f89b97ae2e49232a
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Fri Oct 7 11:46:20 2022 +0200

    CAMEL-17438: camel-kubernetes - Improve code coverage
---
 .../producer/KubernetesConfigMapsProducerTest.java | 24 +++++++++++++
 .../KubernetesDeploymentsProducerTest.java         | 28 +++++++++++++++
 .../producer/KubernetesHPAProducerTest.java        | 28 +++++++++++++++
 .../producer/KubernetesJobProducerTest.java        | 41 ++++++++++++++++++++++
 .../producer/KubernetesNamespacesProducerTest.java | 20 +++++++++++
 ...ernetesPersistentVolumesClaimsProducerTest.java | 29 +++++++++++++++
 .../producer/KubernetesPodsProducerTest.java       | 26 ++++++++++++++
 ...bernetesReplicationControllersProducerTest.java | 28 +++++++++++++++
 .../KubernetesResourcesQuotaProducerTest.java      | 29 +++++++++++++++
 .../producer/KubernetesSecretsProducerTest.java    | 17 +++++++++
 .../KubernetesServiceAccountsProducerTest.java     | 22 ++++++++++--
 .../producer/KubernetesServicesProducerTest.java   | 27 ++++++++++++++
 .../OpenshiftDeploymentConfigsProducerTest.java    | 28 +++++++++++++++
 13 files changed, 345 insertions(+), 2 deletions(-)

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 a13cd12bfba..2327dae6dd3 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
@@ -109,6 +109,28 @@ public class KubernetesConfigMapsProducerTest extends KubernetesTestSupport {
         assertEquals("cm1", result.getMetadata().getName());
     }
 
+    @Test
+    void createConfigMap() {
+        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().post().withPath("/api/v1/namespaces/test/configmaps").andReturn(200, cm1).once();
+
+        Exchange ex = template.request("direct:createConfigMap", 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();
@@ -135,6 +157,8 @@ public class KubernetesConfigMapsProducerTest extends KubernetesTestSupport {
                         .to("kubernetes-config-maps:///?kubernetesClient=#kubernetesClient&operation=listConfigMapsByLabels");
                 from("direct:getConfigMap")
                         .to("kubernetes-config-maps:///?kubernetesClient=#kubernetesClient&operation=getConfigMap");
+                from("direct:createConfigMap")
+                        .to("kubernetes-config-maps:///?kubernetesClient=#kubernetesClient&operation=createConfigMap");
                 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/KubernetesDeploymentsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesDeploymentsProducerTest.java
index 9275fc15540..b6ba664ad6b 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
@@ -23,6 +23,8 @@ import java.util.Map;
 import io.fabric8.kubernetes.api.model.apps.Deployment;
 import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder;
 import io.fabric8.kubernetes.api.model.apps.DeploymentListBuilder;
+import io.fabric8.kubernetes.api.model.apps.DeploymentSpec;
+import io.fabric8.kubernetes.api.model.apps.DeploymentSpecBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
@@ -76,6 +78,30 @@ public class KubernetesDeploymentsProducerTest extends KubernetesTestSupport {
         assertEquals(3, result.size());
     }
 
+    @Test
+    void createDeployment() {
+        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().post().withPath("/apis/apps/v1/namespaces/test/deployments").andReturn(200, de1).once();
+
+        Exchange ex = template.request("direct:createDeployment", 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")
@@ -134,6 +160,8 @@ public class KubernetesDeploymentsProducerTest extends KubernetesTestSupport {
                         .toF("kubernetes-deployments:///?kubernetesClient=#kubernetesClient&operation=listDeploymentsByLabels");
                 from("direct:deleteDeployment")
                         .toF("kubernetes-deployments:///?kubernetesClient=#kubernetesClient&operation=deleteDeployment");
+                from("direct:createDeployment")
+                        .toF("kubernetes-deployments:///?kubernetesClient=#kubernetesClient&operation=createDeployment");
                 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 95e08e2aa84..ad381a809c8 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
@@ -24,6 +24,8 @@ import io.fabric8.kubernetes.api.model.PodListBuilder;
 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.HorizontalPodAutoscalerListBuilder;
+import io.fabric8.kubernetes.api.model.autoscaling.v1.HorizontalPodAutoscalerSpec;
+import io.fabric8.kubernetes.api.model.autoscaling.v1.HorizontalPodAutoscalerSpecBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
@@ -99,6 +101,31 @@ public class KubernetesHPAProducerTest extends KubernetesTestSupport {
         assertEquals("hpa1", result.getMetadata().getName());
     }
 
+    @Test
+    void createHPATest() {
+        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().post().withPath("/apis/autoscaling/v1/namespaces/test/horizontalpodautoscalers").andReturn(200, hpa1)
+                .once();
+
+        Exchange ex = template.request("direct:createHPA", 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
@@ -125,6 +152,7 @@ public class KubernetesHPAProducerTest extends KubernetesTestSupport {
                 from("direct:listByLabels")
                         .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: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 57e560bc64a..3e0b0ab134d 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
@@ -23,6 +23,8 @@ import java.util.Map;
 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;
+import io.fabric8.kubernetes.api.model.batch.v1.JobSpec;
+import io.fabric8.kubernetes.api.model.batch.v1.JobSpecBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
@@ -89,6 +91,43 @@ public class KubernetesJobProducerTest extends KubernetesTestSupport {
         assertNotNull(result);
     }
 
+    @Test
+    void createJobTest() {
+        Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+        JobSpec spec = new JobSpecBuilder().withBackoffLimit(13).build();
+        Job j1 = new JobBuilder().withNewMetadata().withName("j1").withNamespace("test").withLabels(labels).and()
+                .withSpec(spec).build();
+        server.expect().post().withPath("/apis/batch/v1/namespaces/test/jobs").andReturn(200, j1).once();
+
+        Exchange ex = template.request("direct:create", 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();
+        server.expect().delete().withPath("/apis/batch/v1/namespaces/test/jobs/j1").andReturn(200, j1)
+                .once();
+
+        Exchange ex = template.request("direct:delete", exchange -> {
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_JOB_NAME, "j1");
+        });
+
+        assertNotNull(ex.getMessage());
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
@@ -99,6 +138,8 @@ public class KubernetesJobProducerTest extends KubernetesTestSupport {
                 from("direct:list").to("kubernetes-job:foo?operation=listJob");
                 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: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 f2571e0aa0b..247e3c7f8eb 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
@@ -17,6 +17,7 @@
 package org.apache.camel.component.kubernetes.producer;
 
 import java.util.List;
+import java.util.Map;
 
 import io.fabric8.kubernetes.api.model.Namespace;
 import io.fabric8.kubernetes.api.model.NamespaceBuilder;
@@ -71,6 +72,23 @@ public class KubernetesNamespacesProducerTest extends KubernetesTestSupport {
 
     }
 
+    @Test
+    void createNamespace() {
+        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().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_LABELS, labels);
+        });
+
+        Namespace result = ex.getMessage().getBody(Namespace.class);
+
+        assertEquals("ns1", result.getMetadata().getName());
+        assertEquals(labels, result.getMetadata().getLabels());
+    }
+
     @Test
     void deleteNamespace() {
         Namespace ns1 = new NamespaceBuilder().withNewMetadata().withName("ns1").endMetadata().build();
@@ -91,6 +109,8 @@ public class KubernetesNamespacesProducerTest extends KubernetesTestSupport {
             public void configure() {
                 from("direct:list").to("kubernetes-namespaces:///?kubernetesClient=#kubernetesClient&operation=listNamespaces");
                 from("direct:getNs").to("kubernetes-namespaces:///?kubernetesClient=#kubernetesClient&operation=getNamespace");
+                from("direct:createNamespace")
+                        .to("kubernetes-namespaces:///?kubernetesClient=#kubernetesClient&operation=createNamespace");
                 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/KubernetesPersistentVolumesClaimsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesClaimsProducerTest.java
index 88cfbb28e30..00ded9191b3 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
@@ -21,8 +21,11 @@ import java.util.List;
 import java.util.Map;
 
 import io.fabric8.kubernetes.api.model.ObjectMeta;
+import io.fabric8.kubernetes.api.model.PersistentVolumeClaim;
 import io.fabric8.kubernetes.api.model.PersistentVolumeClaimBuilder;
 import io.fabric8.kubernetes.api.model.PersistentVolumeClaimListBuilder;
+import io.fabric8.kubernetes.api.model.PersistentVolumeClaimSpec;
+import io.fabric8.kubernetes.api.model.PersistentVolumeClaimSpecBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
@@ -79,6 +82,30 @@ public class KubernetesPersistentVolumesClaimsProducerTest extends KubernetesTes
         assertEquals(3, result.size());
     }
 
+    @Test
+    void createPersistentVolumeClaim() {
+        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().post().withPath("/api/v1/namespaces/test/persistentvolumeclaims").andReturn(200, vc1).once();
+
+        Exchange ex = template.request("direct:create", 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();
@@ -104,6 +131,8 @@ public class KubernetesPersistentVolumesClaimsProducerTest extends KubernetesTes
                         "kubernetes-persistent-volumes-claims:///?kubernetesClient=#kubernetesClient&operation=listPersistentVolumesClaims");
                 from("direct:listByLabels").to(
                         "kubernetes-persistent-volumes-claims:///?kubernetesClient=#kubernetesClient&operation=listPersistentVolumesClaimsByLabels");
+                from("direct:create").to(
+                        "kubernetes-persistent-volumes-claims:///?kubernetesClient=#kubernetesClient&operation=createPersistentVolumeClaim");
                 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 5f437db56c6..2533aaf7aa6 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
@@ -23,6 +23,8 @@ import java.util.Map;
 import io.fabric8.kubernetes.api.model.Pod;
 import io.fabric8.kubernetes.api.model.PodBuilder;
 import io.fabric8.kubernetes.api.model.PodListBuilder;
+import io.fabric8.kubernetes.api.model.PodSpec;
+import io.fabric8.kubernetes.api.model.PodSpecBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
@@ -97,6 +99,29 @@ public class KubernetesPodsProducerTest extends KubernetesTestSupport {
         assertEquals("pod1", result.getMetadata().getName());
     }
 
+    @Test
+    void createPod() {
+        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().post().withPath("/api/v1/namespaces/test/pods").andReturn(200, pod1).once();
+
+        Exchange ex = template.request("direct:createPod", 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();
@@ -121,6 +146,7 @@ public class KubernetesPodsProducerTest extends KubernetesTestSupport {
                 from("direct:listByLabels")
                         .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: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 c3c1499dd8d..0061fcaf449 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
@@ -24,6 +24,8 @@ import java.util.concurrent.TimeUnit;
 import io.fabric8.kubernetes.api.model.ReplicationController;
 import io.fabric8.kubernetes.api.model.ReplicationControllerBuilder;
 import io.fabric8.kubernetes.api.model.ReplicationControllerListBuilder;
+import io.fabric8.kubernetes.api.model.ReplicationControllerSpec;
+import io.fabric8.kubernetes.api.model.ReplicationControllerSpecBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
@@ -96,6 +98,30 @@ public class KubernetesReplicationControllersProducerTest extends KubernetesTest
         assertNotNull(result);
     }
 
+    @Test
+    void createReplicationController() {
+        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().post().withPath("/api/v1/namespaces/test/replicationcontrollers").andReturn(200, rc1).once();
+
+        Exchange ex = template.request("direct:createReplicationController", 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")
@@ -156,6 +182,8 @@ public class KubernetesReplicationControllersProducerTest extends KubernetesTest
                         "kubernetes-replication-controllers:///?kubernetesClient=#kubernetesClient&operation=getReplicationController");
                 from("direct:scaleReplicationController").to(
                         "kubernetes-replication-controllers:///?kubernetesClient=#kubernetesClient&operation=scaleReplicationController");
+                from("direct:createReplicationController").to(
+                        "kubernetes-replication-controllers:///?kubernetesClient=#kubernetesClient&operation=createReplicationController");
                 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 4b799d1a03f..4a0514169db 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
@@ -17,10 +17,13 @@
 package org.apache.camel.component.kubernetes.producer;
 
 import java.util.List;
+import java.util.Map;
 
 import io.fabric8.kubernetes.api.model.ResourceQuota;
 import io.fabric8.kubernetes.api.model.ResourceQuotaBuilder;
 import io.fabric8.kubernetes.api.model.ResourceQuotaListBuilder;
+import io.fabric8.kubernetes.api.model.ResourceQuotaSpec;
+import io.fabric8.kubernetes.api.model.ResourceQuotaSpecBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
@@ -56,6 +59,30 @@ public class KubernetesResourcesQuotaProducerTest extends KubernetesTestSupport
         assertEquals(3, result.size());
     }
 
+    @Test
+    void createResourceQuota() {
+        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().post().withPath("/api/v1/namespaces/test/resourcequotas").andReturn(200, rq1).once();
+
+        Exchange ex = template.request("direct:create", 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();
@@ -78,6 +105,8 @@ public class KubernetesResourcesQuotaProducerTest extends KubernetesTestSupport
             public void configure() {
                 from("direct:list")
                         .to("kubernetes-resources-quota:///?kubernetesClient=#kubernetesClient&operation=listResourcesQuota");
+                from("direct:create")
+                        .to("kubernetes-resources-quota:///?kubernetesClient=#kubernetesClient&operation=createResourceQuota");
                 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 44ad238d66d..f83c45cd87d 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
@@ -91,6 +91,22 @@ public class KubernetesSecretsProducerTest extends KubernetesTestSupport {
         assertNotNull(result);
     }
 
+    @Test
+    void createSecret() {
+        Secret sc1 = new SecretBuilder().withNewMetadata().withName("sc1").withNamespace("test").and().build();
+        server.expect().post().withPath("/api/v1/namespaces/test/secrets").andReturn(200, sc1).once();
+
+        Exchange ex = template.request("direct:create", 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();
@@ -115,6 +131,7 @@ public class KubernetesSecretsProducerTest extends KubernetesTestSupport {
                 from("direct:listByLabels")
                         .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: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 7a70d47ed31..833a72cfca5 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
@@ -77,11 +77,27 @@ public class KubernetesServiceAccountsProducerTest extends KubernetesTestSupport
         assertEquals(3, result.size());
     }
 
+    @Test
+    void createServiceAccount() {
+        ServiceAccount sa1 = new ServiceAccountBuilder().withNewMetadata().withName("sa1").withNamespace("test").and().build();
+        server.expect().post().withPath("/api/v1/namespaces/test/serviceaccounts").andReturn(200, sa1).once();
+
+        Exchange ex = template.request("direct:create", 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 pod1 = new ServiceAccountBuilder().withNewMetadata().withName("sa1").withNamespace("test").and().build();
+        ServiceAccount sa1 = new ServiceAccountBuilder().withNewMetadata().withName("sa1").withNamespace("test").and().build();
 
-        server.expect().withPath("/api/v1/namespaces/test/serviceaccounts/sa1").andReturn(200, pod1).once();
+        server.expect().withPath("/api/v1/namespaces/test/serviceaccounts/sa1").andReturn(200, sa1).once();
         Exchange ex = template.request("direct:delete", exchange -> {
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SERVICE_ACCOUNT_NAME, "sa1");
@@ -101,6 +117,8 @@ public class KubernetesServiceAccountsProducerTest extends KubernetesTestSupport
                         .to("kubernetes-service-accounts:///?kubernetesClient=#kubernetesClient&operation=listServiceAccounts");
                 from("direct:listByLabels").to(
                         "kubernetes-service-accounts:///?kubernetesClient=#kubernetesClient&operation=listServiceAccountsByLabels");
+                from("direct:create").to(
+                        "kubernetes-service-accounts:///?kubernetesClient=#kubernetesClient&operation=createServiceAccount");
                 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 15b59aa0782..9c981ccb341 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
@@ -24,6 +24,8 @@ import io.fabric8.kubernetes.api.model.PodListBuilder;
 import io.fabric8.kubernetes.api.model.Service;
 import io.fabric8.kubernetes.api.model.ServiceBuilder;
 import io.fabric8.kubernetes.api.model.ServiceListBuilder;
+import io.fabric8.kubernetes.api.model.ServiceSpec;
+import io.fabric8.kubernetes.api.model.ServiceSpecBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
@@ -90,6 +92,29 @@ public class KubernetesServicesProducerTest extends KubernetesTestSupport {
         assertNotNull(result);
     }
 
+    @Test
+    void createService() {
+        Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+        ServiceSpec spec = new ServiceSpecBuilder().withClusterIP("SomeClusterIp").build();
+        Service se1 = new ServiceBuilder().withNewMetadata().withName("se1").withNamespace("test").withLabels(labels).and()
+                .withSpec(spec).build();
+        server.expect().post().withPath("/api/v1/namespaces/test/services").andReturn(200, se1).once();
+
+        Exchange ex = template.request("direct:createService", 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("SomeClusterIp", result.getSpec().getClusterIP());
+    }
+
     @Test
     void deleteService() {
         Service se1 = new ServiceBuilder().withNewMetadata().withName("se1").withNamespace("test").and().build();
@@ -116,6 +141,8 @@ public class KubernetesServicesProducerTest extends KubernetesTestSupport {
                         .to("kubernetes-services:///?kubernetesClient=#kubernetesClient&operation=listServicesByLabels");
                 from("direct:getServices")
                         .to("kubernetes-services:///?kubernetesClient=#kubernetesClient&operation=getService");
+                from("direct:createService")
+                        .to("kubernetes-services:///?kubernetesClient=#kubernetesClient&operation=createService");
                 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 393b6b075a2..1c39736a182 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
@@ -26,6 +26,8 @@ import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import io.fabric8.openshift.api.model.DeploymentConfig;
 import io.fabric8.openshift.api.model.DeploymentConfigBuilder;
 import io.fabric8.openshift.api.model.DeploymentConfigListBuilder;
+import io.fabric8.openshift.api.model.DeploymentConfigSpec;
+import io.fabric8.openshift.api.model.DeploymentConfigSpecBuilder;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
@@ -76,6 +78,30 @@ public class OpenshiftDeploymentConfigsProducerTest extends KubernetesTestSuppor
         assertEquals(3, result.size());
     }
 
+    @Test
+    void createDeploymentConfig() {
+        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();
+
+        Exchange ex = template.request("direct:create", 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")
@@ -134,6 +160,8 @@ public class OpenshiftDeploymentConfigsProducerTest extends KubernetesTestSuppor
                         .toF("openshift-deploymentconfigs:///?kubernetesClient=#kubernetesClient&operation=listDeploymentConfigs");
                 from("direct:listByLabels")
                         .toF("openshift-deploymentconfigs:///?kubernetesClient=#kubernetesClient&operation=listDeploymentConfigsByLabels");
+                from("direct:create")
+                        .toF("openshift-deploymentconfigs:///?kubernetesClient=#kubernetesClient&operation=createDeploymentConfig");
                 from("direct:delete")
                         .toF("openshift-deploymentconfigs:///?kubernetesClient=#kubernetesClient&operation=deleteDeploymentConfig");
                 from("direct:scale")


[camel] 02/04: CAMEL-17438: camel-kubernetes - Remove unused routes in tests

Posted by nf...@apache.org.
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 e8593bca46c99ae69efffec2bcb4ba0f20f1fe79
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Fri Oct 7 10:12:56 2022 +0200

    CAMEL-17438: camel-kubernetes - Remove unused routes in tests
---
 .../consumer/integration/KubernetesNamespacesConsumerIT.java     | 2 --
 .../integration/KubernetesReplicationControllersConsumerIT.java  | 9 ---------
 .../consumer/integration/KubernetesServicesConsumerIT.java       | 4 ----
 .../kubernetes/producer/KubernetesConfigMapsProducerTest.java    | 4 +---
 .../producer/KubernetesCustomResourcesProducerTest.java          | 2 --
 .../kubernetes/producer/KubernetesDeploymentsProducerTest.java   | 6 ++----
 .../component/kubernetes/producer/KubernetesJobProducerTest.java | 2 --
 .../kubernetes/producer/KubernetesNamespacesProducerTest.java    | 2 +-
 .../producer/KubernetesPersistentVolumesClaimsProducerTest.java  | 2 +-
 .../producer/KubernetesReplicationControllersProducerTest.java   | 6 ++----
 .../kubernetes/producer/KubernetesSecretsProducerTest.java       | 3 +--
 .../producer/KubernetesServiceAccountsProducerTest.java          | 2 +-
 .../kubernetes/producer/KubernetesServicesProducerTest.java      | 2 +-
 .../producer/OpenshiftDeploymentConfigsProducerTest.java         | 6 ++----
 14 files changed, 12 insertions(+), 40 deletions(-)

diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesNamespacesConsumerIT.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesNamespacesConsumerIT.java
index d4f5b840369..31eb6e02a76 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesNamespacesConsumerIT.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesNamespacesConsumerIT.java
@@ -116,10 +116,8 @@ public class KubernetesNamespacesConsumerIT extends KubernetesTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() {
-                from("direct:list").toF("kubernetes-namespaces://%s?oauthToken=%s&operation=listNamespaces", host, authToken);
                 from("direct:listByLabels").toF("kubernetes-namespaces://%s?oauthToken=%s&operation=listNamespacesByLabels",
                         host, authToken);
-                from("direct:getNs").toF("kubernetes-namespaces://%s?oauthToken=%s&operation=getNamespace", host, authToken);
                 from("direct:createNamespace").toF("kubernetes-namespaces://%s?oauthToken=%s&operation=createNamespace", host,
                         authToken);
                 from("direct:deleteNamespace").toF("kubernetes-namespaces://%s?oauthToken=%s&operation=deleteNamespace", host,
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesReplicationControllersConsumerIT.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesReplicationControllersConsumerIT.java
index f0607e6e61a..39cfed9d34c 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesReplicationControllersConsumerIT.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesReplicationControllersConsumerIT.java
@@ -111,15 +111,6 @@ public class KubernetesReplicationControllersConsumerIT extends KubernetesTestSu
         return new RouteBuilder() {
             @Override
             public void configure() {
-                from("direct:list").toF(
-                        "kubernetes-replication-controllers://%s?oauthToken=%s&operation=listReplicationControllers", host,
-                        authToken);
-                from("direct:listByLabels").toF(
-                        "kubernetes-replication-controllers://%s?oauthToken=%s&operation=listReplicationControllersByLabels",
-                        host, authToken);
-                from("direct:getReplicationController").toF(
-                        "kubernetes-replication-controllers://%s?oauthToken=%s&operation=getReplicationController", host,
-                        authToken);
                 from("direct:createReplicationController").toF(
                         "kubernetes-replication-controllers://%s?oauthToken=%s&operation=createReplicationController", host,
                         authToken);
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesServicesConsumerIT.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesServicesConsumerIT.java
index 7040cbbf55b..f254f540ee7 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesServicesConsumerIT.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesServicesConsumerIT.java
@@ -112,10 +112,6 @@ public class KubernetesServicesConsumerIT extends KubernetesTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() {
-                from("direct:list").toF("kubernetes-services://%s?oauthToken=%s&operation=listServices", host, authToken);
-                from("direct:listByLabels").toF("kubernetes-services://%s?oauthToken=%s&operation=listServicesByLabels", host,
-                        authToken);
-                from("direct:getServices").toF("kubernetes-services://%s?oauthToken=%s&operation=getService", host, authToken);
                 from("direct:createService").toF("kubernetes-services://%s?oauthToken=%s&operation=createService", host,
                         authToken);
                 from("direct:deleteService").toF("kubernetes-services://%s?oauthToken=%s&operation=deleteService", 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 fc18509ca1d..a13cd12bfba 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
@@ -110,7 +110,7 @@ public class KubernetesConfigMapsProducerTest extends KubernetesTestSupport {
     }
 
     @Test
-    void createGetAndDeleteConfigMap() {
+    void deleteConfigMap() {
         ConfigMap cm1 = new ConfigMapBuilder().withNewMetadata().withName("cm1").withNamespace("test").and().build();
         server.expect().withPath("/api/v1/namespaces/test/configmaps/cm1").andReturn(200, cm1).once();
 
@@ -135,8 +135,6 @@ public class KubernetesConfigMapsProducerTest extends KubernetesTestSupport {
                         .to("kubernetes-config-maps:///?kubernetesClient=#kubernetesClient&operation=listConfigMapsByLabels");
                 from("direct:getConfigMap")
                         .to("kubernetes-config-maps:///?kubernetesClient=#kubernetesClient&operation=getConfigMap");
-                from("direct:createConfigMap")
-                        .to("kubernetes-config-maps:///?kubernetesClient=#kubernetesClient&operation=createConfigMap");
                 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 d203627c727..1b1b2d59750 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
@@ -196,8 +196,6 @@ public class KubernetesCustomResourcesProducerTest extends KubernetesTestSupport
         return new RouteBuilder() {
             @Override
             public void configure() {
-                from("direct:getCustomResource")
-                        .toF("kubernetes-custom-resources:///?kubernetesClient=#kubernetesClient&operation=getCustomResource");
                 from("direct:listCustomResources").toF(
                         "kubernetes-custom-resources:///?kubernetesClient=#kubernetesClient&operation=listCustomResources");
                 from("direct:listCustomResourcesByLabels").toF(
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 3f6d1c78d19..9275fc15540 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
@@ -77,7 +77,7 @@ public class KubernetesDeploymentsProducerTest extends KubernetesTestSupport {
     }
 
     @Test
-    void createAndDeleteDeployment() {
+    void deleteDeployment() {
         Deployment de1 = new DeploymentBuilder().withNewMetadata().withNamespace("test").withName("de1")
                 .withResourceVersion("1").withGeneration(2L).endMetadata().withNewSpec()
                 .withReplicas(0).endSpec().withNewStatus().withReplicas(1).withObservedGeneration(1L).endStatus().build();
@@ -100,7 +100,7 @@ public class KubernetesDeploymentsProducerTest extends KubernetesTestSupport {
     }
 
     @Test
-    void createScaleAndDeleteDeployment() {
+    void scaleDeployment() {
         server.expect().withPath("/apis/apps/v1/namespaces/test/deployments/de1")
                 .andReturn(200, new DeploymentBuilder().withNewMetadata().withName("de1")
                         .withResourceVersion("1").endMetadata().withNewSpec().withReplicas(5).endSpec().withNewStatus()
@@ -134,8 +134,6 @@ public class KubernetesDeploymentsProducerTest extends KubernetesTestSupport {
                         .toF("kubernetes-deployments:///?kubernetesClient=#kubernetesClient&operation=listDeploymentsByLabels");
                 from("direct:deleteDeployment")
                         .toF("kubernetes-deployments:///?kubernetesClient=#kubernetesClient&operation=deleteDeployment");
-                from("direct:createDeployment")
-                        .toF("kubernetes-deployments:///?kubernetesClient=#kubernetesClient&operation=createDeployment");
                 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/KubernetesJobProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesJobProducerTest.java
index 05df966fca0..57e560bc64a 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
@@ -99,8 +99,6 @@ public class KubernetesJobProducerTest extends KubernetesTestSupport {
                 from("direct:list").to("kubernetes-job:foo?operation=listJob");
                 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: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 abddf8a5b6c..f2571e0aa0b 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
@@ -72,7 +72,7 @@ public class KubernetesNamespacesProducerTest extends KubernetesTestSupport {
     }
 
     @Test
-    void createAndDeleteNamespace() {
+    void deleteNamespace() {
         Namespace ns1 = new NamespaceBuilder().withNewMetadata().withName("ns1").endMetadata().build();
         server.expect().withPath("/api/v1/namespaces/ns1").andReturn(200, ns1).once();
 
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 e088baa35f2..88cfbb28e30 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
@@ -80,7 +80,7 @@ public class KubernetesPersistentVolumesClaimsProducerTest extends KubernetesTes
     }
 
     @Test
-    void createListAndDeletePersistentVolumeClaim() {
+    void deletePersistentVolumeClaim() {
         ObjectMeta meta = new ObjectMeta();
         meta.setName("pvc1");
         server.expect().withPath("/api/v1/namespaces/test/persistentvolumeclaims/pvc1")
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 0f9d16dbff4..c3c1499dd8d 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
@@ -97,7 +97,7 @@ public class KubernetesReplicationControllersProducerTest extends KubernetesTest
     }
 
     @Test
-    void createAndDeleteReplicationController() {
+    void deleteReplicationController() {
         server.expect().withPath("/api/v1/namespaces/test/replicationcontrollers/repl1")
                 .andReturn(200, new ReplicationControllerBuilder().withNewMetadata().withName("repl1")
                         .withResourceVersion("1").endMetadata().withNewSpec().withReplicas(0).endSpec().withNewStatus()
@@ -121,7 +121,7 @@ public class KubernetesReplicationControllersProducerTest extends KubernetesTest
     }
 
     @Test
-    void createScaleAndDeleteReplicationController() {
+    void scaleReplicationController() {
         server.expect().withPath("/api/v1/namespaces/test/replicationcontrollers/repl1")
                 .andReturn(200, new ReplicationControllerBuilder().withNewMetadata().withName("repl1")
                         .withResourceVersion("1").endMetadata().withNewSpec().withReplicas(5).endSpec().withNewStatus()
@@ -154,8 +154,6 @@ public class KubernetesReplicationControllersProducerTest extends KubernetesTest
                         "kubernetes-replication-controllers:///?kubernetesClient=#kubernetesClient&operation=listReplicationControllersByLabels");
                 from("direct:getReplicationController").to(
                         "kubernetes-replication-controllers:///?kubernetesClient=#kubernetesClient&operation=getReplicationController");
-                from("direct:createReplicationController").to(
-                        "kubernetes-replication-controllers:///?kubernetesClient=#kubernetesClient&operation=createReplicationController");
                 from("direct:scaleReplicationController").to(
                         "kubernetes-replication-controllers:///?kubernetesClient=#kubernetesClient&operation=scaleReplicationController");
                 from("direct:deleteReplicationController").to(
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 b9fb1c75caa..44ad238d66d 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
@@ -92,7 +92,7 @@ public class KubernetesSecretsProducerTest extends KubernetesTestSupport {
     }
 
     @Test
-    void createAndDeleteSecret() {
+    void deleteSecret() {
         Secret sc1 = new SecretBuilder().withNewMetadata().withName("sc1").withNamespace("test").and().build();
 
         server.expect().withPath("/api/v1/namespaces/test/secrets/sc1").andReturn(200, sc1).once();
@@ -115,7 +115,6 @@ public class KubernetesSecretsProducerTest extends KubernetesTestSupport {
                 from("direct:listByLabels")
                         .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: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 ee9fb27c586..7a70d47ed31 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
@@ -78,7 +78,7 @@ public class KubernetesServiceAccountsProducerTest extends KubernetesTestSupport
     }
 
     @Test
-    void createAndDeleteServiceAccount() {
+    void deleteServiceAccount() {
         ServiceAccount pod1 = new ServiceAccountBuilder().withNewMetadata().withName("sa1").withNamespace("test").and().build();
 
         server.expect().withPath("/api/v1/namespaces/test/serviceaccounts/sa1").andReturn(200, pod1).once();
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 85bb4e48f95..15b59aa0782 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
@@ -91,7 +91,7 @@ public class KubernetesServicesProducerTest extends KubernetesTestSupport {
     }
 
     @Test
-    void createAndDeleteService() {
+    void deleteService() {
         Service se1 = new ServiceBuilder().withNewMetadata().withName("se1").withNamespace("test").and().build();
 
         server.expect().withPath("/api/v1/namespaces/test/services/se1").andReturn(200, se1).once();
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 b8b6106ea43..393b6b075a2 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
@@ -77,7 +77,7 @@ public class OpenshiftDeploymentConfigsProducerTest extends KubernetesTestSuppor
     }
 
     @Test
-    void createAndDeleteDeploymentConfig() {
+    void deleteDeploymentConfig() {
         DeploymentConfig de1 = new DeploymentConfigBuilder().withNewMetadata().withNamespace("test").withName("dc1")
                 .withResourceVersion("1").withGeneration(2L).endMetadata().withNewSpec()
                 .withReplicas(0).endSpec().withNewStatus().withReplicas(1).withObservedGeneration(1L).endStatus().build();
@@ -101,7 +101,7 @@ public class OpenshiftDeploymentConfigsProducerTest extends KubernetesTestSuppor
     }
 
     @Test
-    void createScaleAndDeleteDeploymentConfig() {
+    void scaleDeploymentConfig() {
         server.expect().withPath("/apis/apps.openshift.io/v1/namespaces/test/deploymentconfigs/dc1")
                 .andReturn(200, new DeploymentConfigBuilder().withNewMetadata().withName("dc1")
                         .withResourceVersion("1").endMetadata().withNewSpec().withReplicas(5).endSpec().withNewStatus()
@@ -136,8 +136,6 @@ public class OpenshiftDeploymentConfigsProducerTest extends KubernetesTestSuppor
                         .toF("openshift-deploymentconfigs:///?kubernetesClient=#kubernetesClient&operation=listDeploymentConfigsByLabels");
                 from("direct:delete")
                         .toF("openshift-deploymentconfigs:///?kubernetesClient=#kubernetesClient&operation=deleteDeploymentConfig");
-                from("direct:create")
-                        .toF("openshift-deploymentconfigs:///?kubernetesClient=#kubernetesClient&operation=createDeploymentConfig");
                 from("direct:scale")
                         .toF("openshift-deploymentconfigs:///?kubernetesClient=#kubernetesClient&operation=scaleDeploymentConfig");
             }


[camel] 01/04: CAMEL-17438: camel-kubernetes - Fix warnings and deprecations

Posted by nf...@apache.org.
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 0ab2cb0e8701cf9faf80e9662f68f971380c8f21
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Fri Oct 7 08:39:45 2022 +0200

    CAMEL-17438: camel-kubernetes - Fix warnings and deprecations
---
 .../component/kubernetes/KubernetesHelper.java     |   6 +-
 .../cloud/KubernetesClientServiceDiscovery.java    |   4 +-
 .../lock/impl/ConfigMapLeaseResourceManager.java   |  11 +-
 .../lock/impl/NativeLeaseResourceManager.java      |  15 +--
 .../config_maps/KubernetesConfigMapsProducer.java  |   6 +-
 .../KubernetesCustomResourcesProducer.java         |   6 +-
 .../deployments/KubernetesDeploymentsProducer.java |   9 +-
 .../kubernetes/hpa/KubernetesHPAProducer.java      |  13 +--
 .../kubernetes/job/KubernetesJobProducer.java      |   7 +-
 .../namespaces/KubernetesNamespacesProducer.java   |   2 +-
 .../kubernetes/nodes/KubernetesNodesProducer.java  |   6 +-
 .../KubernetesPersistentVolumesProducer.java       |   3 +-
 .../KubernetesPersistentVolumesClaimsProducer.java |  11 +-
 .../kubernetes/pods/KubernetesPodsProducer.java    |   6 +-
 .../properties/BasePropertiesFunction.java         |  11 +-
 .../KubernetesReplicationControllersProducer.java  |  12 +--
 .../KubernetesResourcesQuotaProducer.java          |  10 +-
 .../secrets/KubernetesSecretsProducer.java         |   9 +-
 .../KubernetesServiceAccountsProducer.java         |  10 +-
 .../services/KubernetesServicesProducer.java       |  11 +-
 .../OpenshiftBuildConfigsProducer.java             |   8 +-
 .../openshift/builds/OpenshiftBuildsProducer.java  |   5 +-
 .../OpenshiftDeploymentConfigsProducer.java        |   3 +-
 .../apache/camel/component/KubernetesServer.java   | 111 ---------------------
 .../apache/camel/component/OpenShiftServer.java    | 105 -------------------
 .../kubernetes/KubernetesTestSupport.java          |   3 +-
 .../KubernetesConfigMapsConsumerIT.java            |   6 +-
 .../KubernetesCustomResourcesConsumerIT.java       |  31 +++---
 .../KubernetesNamespacesConsumerIT.java            |  14 +--
 .../integration/KubernetesNodesConsumerIT.java     |   2 +-
 .../integration/KubernetesPodsConsumerIT.java      |   4 +-
 ...KubernetesReplicationControllersConsumerIT.java |   4 +-
 .../integration/KubernetesServicesConsumerIT.java  |   5 +-
 .../producer/KubernetesConfigMapsProducerTest.java |  26 ++---
 .../KubernetesCustomResourcesProducerTest.java     |  39 +++-----
 .../KubernetesDeploymentsProducerTest.java         |  25 ++---
 .../producer/KubernetesHPAProducerTest.java        |  59 +++++------
 .../producer/KubernetesJobProducerTest.java        |  23 +++--
 .../producer/KubernetesNamespacesProducerTest.java |  20 ++--
 .../producer/KubernetesNodesProducerTest.java      |  24 +++--
 ...ernetesPersistentVolumesClaimsProducerTest.java |  24 ++---
 .../KubernetesPersistentVolumesProducerTest.java   |  21 ++--
 .../producer/KubernetesPodsProducerTest.java       |  28 +++---
 ...bernetesReplicationControllersProducerTest.java |  26 ++---
 .../KubernetesResourcesQuotaProducerTest.java      |  18 ++--
 .../producer/KubernetesSecretsProducerTest.java    |  24 +++--
 .../KubernetesServiceAccountsProducerTest.java     |  22 ++--
 .../producer/KubernetesServicesProducerTest.java   |  24 +++--
 .../ConfigMapMountPropertiesFunctionTest.java      |  29 +++---
 .../ConfigMapPropertiesFunctionRouteTest.java      |   4 +-
 .../ConfigMapPropertiesFunctionTest.java           |   9 +-
 .../SecretMountPropertiesFunctionTest.java         |  29 +++---
 .../SecretPropertiesFunctionRouteTest.java         |   6 +-
 .../properties/SecretPropertiesFunctionTest.java   |   9 +-
 .../OpenshiftBuildConfigsProducerTest.java         |  21 ++--
 .../producer/OpenshiftBuildsProducerTest.java      |  39 ++++----
 .../OpenshiftDeploymentConfigsProducerTest.java    |  28 +++---
 57 files changed, 403 insertions(+), 643 deletions(-)

diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesHelper.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesHelper.java
index 6fc390b0143..10fc54863d0 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesHelper.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesHelper.java
@@ -20,8 +20,8 @@ import java.util.function.Supplier;
 
 import io.fabric8.kubernetes.client.Config;
 import io.fabric8.kubernetes.client.ConfigBuilder;
-import io.fabric8.kubernetes.client.DefaultKubernetesClient;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.KubernetesClientBuilder;
 import io.fabric8.kubernetes.client.Watch;
 import org.apache.camel.Exchange;
 import org.apache.camel.support.MessageHelper;
@@ -46,7 +46,7 @@ public final class KubernetesHelper {
             return createKubernetesClient(configuration);
         } else {
             LOG.info("Creating default kubernetes client without applying configuration");
-            return new DefaultKubernetesClient();
+            return new KubernetesClientBuilder().build();
         }
     }
 
@@ -76,7 +76,7 @@ public final class KubernetesHelper {
         ObjectHelper.ifNotEmpty(configuration.getNamespace(), builder::withNamespace);
 
         Config conf = builder.build();
-        return new DefaultKubernetesClient(conf);
+        return new KubernetesClientBuilder().withConfig(conf).build();
     }
 
     public static void close(Runnable runnable, Supplier<Watch> watchGetter) {
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cloud/KubernetesClientServiceDiscovery.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cloud/KubernetesClientServiceDiscovery.java
index 3406bf3f468..3d51d4ba826 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cloud/KubernetesClientServiceDiscovery.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cloud/KubernetesClientServiceDiscovery.java
@@ -24,8 +24,8 @@ import io.fabric8.kubernetes.api.model.EndpointPort;
 import io.fabric8.kubernetes.api.model.EndpointSubset;
 import io.fabric8.kubernetes.api.model.Endpoints;
 import io.fabric8.kubernetes.client.ConfigBuilder;
-import io.fabric8.kubernetes.client.DefaultKubernetesClient;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.KubernetesClientBuilder;
 import org.apache.camel.cloud.ServiceDefinition;
 import org.apache.camel.component.kubernetes.KubernetesConfiguration;
 import org.apache.camel.impl.cloud.DefaultServiceDefinition;
@@ -122,7 +122,7 @@ public class KubernetesClientServiceDiscovery extends KubernetesServiceDiscovery
         ObjectHelper.ifNotEmpty(configuration.getClientKeyPassphrase(), builder::withClientKeyPassphrase);
         ObjectHelper.ifNotEmpty(configuration.getTrustCerts(), builder::withTrustCerts);
 
-        client = new DefaultKubernetesClient(builder.build());
+        client = new KubernetesClientBuilder().withConfig(builder.build()).build();
     }
 
     private boolean hasUsernameAndPassword(KubernetesConfiguration configuration) {
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/impl/ConfigMapLeaseResourceManager.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/impl/ConfigMapLeaseResourceManager.java
index cf8062727ba..0c8b8f5da1e 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/impl/ConfigMapLeaseResourceManager.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/impl/ConfigMapLeaseResourceManager.java
@@ -55,8 +55,8 @@ public class ConfigMapLeaseResourceManager implements KubernetesLeaseResourceMan
         ConfigMap updatedConfigMap = getConfigMapWithoutLeader(leaseResource, group);
         return client.configMaps()
                 .inNamespace(leaseResource.getMetadata().getNamespace())
-                .withName(leaseResource.getMetadata().getName())
-                .lockResourceVersion(leaseResource.getMetadata().getResourceVersion()).replace(updatedConfigMap);
+                .resource(updatedConfigMap)
+                .lockResourceVersion(leaseResource.getMetadata().getResourceVersion()).replace();
     }
 
     @Override
@@ -64,8 +64,8 @@ public class ConfigMapLeaseResourceManager implements KubernetesLeaseResourceMan
         ConfigMap updatedConfigMap = getConfigMapWithNewLeader(leaseResource, newLeaderInfo);
         return client.configMaps()
                 .inNamespace(leaseResource.getMetadata().getNamespace())
-                .withName(leaseResource.getMetadata().getName())
-                .lockResourceVersion(leaseResource.getMetadata().getResourceVersion()).replace(updatedConfigMap);
+                .resource(updatedConfigMap)
+                .lockResourceVersion(leaseResource.getMetadata().getResourceVersion()).replace();
     }
 
     @Override
@@ -81,7 +81,8 @@ public class ConfigMapLeaseResourceManager implements KubernetesLeaseResourceMan
 
         return client.configMaps()
                 .inNamespace(namespace)
-                .create(newConfigMap);
+                .resource(newConfigMap)
+                .create();
     }
 
     @Override
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/impl/NativeLeaseResourceManager.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/impl/NativeLeaseResourceManager.java
index 9a9976ea7b9..8d46d742a2d 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/impl/NativeLeaseResourceManager.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/impl/NativeLeaseResourceManager.java
@@ -45,8 +45,8 @@ public class NativeLeaseResourceManager implements KubernetesLeaseResourceManage
         Lease updatedLease = getLeaseWithoutLeader(leaseResource);
         return client.leases()
                 .inNamespace(leaseResource.getMetadata().getNamespace())
-                .withName(leaseResource.getMetadata().getName())
-                .lockResourceVersion(leaseResource.getMetadata().getResourceVersion()).replace(updatedLease);
+                .resource(updatedLease)
+                .lockResourceVersion(leaseResource.getMetadata().getResourceVersion()).replace();
     }
 
     @Override
@@ -54,8 +54,8 @@ public class NativeLeaseResourceManager implements KubernetesLeaseResourceManage
         Lease updatedLease = getLeaseWithNewLeader(leaseResource, newLeaderInfo);
         return client.leases()
                 .inNamespace(leaseResource.getMetadata().getNamespace())
-                .withName(leaseResource.getMetadata().getName())
-                .lockResourceVersion(leaseResource.getMetadata().getResourceVersion()).replace(updatedLease);
+                .resource(updatedLease)
+                .lockResourceVersion(leaseResource.getMetadata().getResourceVersion()).replace();
     }
 
     @Override
@@ -69,8 +69,8 @@ public class NativeLeaseResourceManager implements KubernetesLeaseResourceManage
                     .build();
             return client.leases()
                     .inNamespace(leaseResource.getMetadata().getNamespace())
-                    .withName(leaseResource.getMetadata().getName())
-                    .lockResourceVersion(leaseResource.getMetadata().getResourceVersion()).replace(updatedLease);
+                    .resource(updatedLease)
+                    .lockResourceVersion(leaseResource.getMetadata().getResourceVersion()).replace();
         }
         return leaseResource;
     }
@@ -92,7 +92,8 @@ public class NativeLeaseResourceManager implements KubernetesLeaseResourceManage
 
         return client.leases()
                 .inNamespace(namespace)
-                .create(newLease);
+                .resource(newLease)
+                .create();
     }
 
     private static Lease getLeaseWithNewLeader(Lease lease, LeaderInfo leaderInfo) {
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 fef5dcf0b69..24638924748 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
@@ -98,13 +98,13 @@ public class KubernetesConfigMapsProducer extends DefaultProducer {
     }
 
     protected void doGetConfigMap(Exchange exchange) {
-        ConfigMap configMap = null;
         String cfMapName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         if (ObjectHelper.isEmpty(cfMapName)) {
             LOG.error("Get a specific ConfigMap require specify a ConfigMap name");
             throw new IllegalArgumentException("Get a specific ConfigMap require specify a ConfigMap name");
         }
+        ConfigMap configMap;
         if (namespaceName != null) {
             configMap = getEndpoint().getKubernetesClient().configMaps().inNamespace(namespaceName).withName(cfMapName).get();
         } else {
@@ -115,7 +115,6 @@ public class KubernetesConfigMapsProducer extends DefaultProducer {
     }
 
     protected void doCreateConfigMap(Exchange exchange) {
-        ConfigMap configMap = null;
         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
@@ -135,7 +134,8 @@ public class KubernetesConfigMapsProducer extends DefaultProducer {
         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 = getEndpoint().getKubernetesClient().configMaps().inNamespace(namespaceName).create(cfMapCreating);
+        ConfigMap configMap
+                = getEndpoint().getKubernetesClient().configMaps().inNamespace(namespaceName).resource(cfMapCreating).create();
 
         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 d8ffad1da96..86e331188f8 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
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.kubernetes.customresources;
 
-import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 
@@ -182,14 +181,15 @@ public class KubernetesCustomResourcesProducer extends DefaultProducer {
 
     }
 
-    protected void doCreate(Exchange exchange, String namespaceName) throws IOException {
+    protected void doCreate(Exchange exchange, String namespaceName) {
         String customResourceInstance = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CRD_INSTANCE, String.class);
         GenericKubernetesResource customResource = new GenericKubernetesResource();
         try {
             customResource = getEndpoint().getKubernetesClient()
                     .genericKubernetesResources(getCRDContext(exchange.getIn()))
                     .inNamespace(namespaceName)
-                    .create(Serialization.unmarshal(customResourceInstance, GenericKubernetesResource.class));
+                    .resource(Serialization.unmarshal(customResourceInstance, GenericKubernetesResource.class))
+                    .create();
         } 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 43be88eb6ab..2f37559da4a 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
@@ -104,13 +104,12 @@ public class KubernetesDeploymentsProducer extends DefaultProducer {
     }
 
     protected void doGetDeployment(Exchange exchange) {
-        Deployment deployment = null;
         String deploymentName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_NAME, String.class);
         if (ObjectHelper.isEmpty(deploymentName)) {
             LOG.error("Get a specific Deployment require specify a Deployment name");
             throw new IllegalArgumentException("Get a specific Deployment require specify a Deployment name");
         }
-        deployment = getEndpoint().getKubernetesClient().apps().deployments().withName(deploymentName).get();
+        Deployment deployment = getEndpoint().getKubernetesClient().apps().deployments().withName(deploymentName).get();
 
         prepareOutboundMessage(exchange, deployment);
     }
@@ -135,7 +134,6 @@ public class KubernetesDeploymentsProducer extends DefaultProducer {
     }
 
     protected void doCreateDeployment(Exchange exchange) {
-        Deployment deployment = null;
         String deploymentName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         DeploymentSpec deSpec
@@ -155,8 +153,9 @@ public class KubernetesDeploymentsProducer extends DefaultProducer {
         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 = getEndpoint().getKubernetesClient().apps().deployments().inNamespace(namespaceName)
-                .create(deploymentCreating);
+        Deployment deployment = getEndpoint().getKubernetesClient().apps().deployments().inNamespace(namespaceName)
+                .resource(deploymentCreating)
+                .create();
 
         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 03a91a16004..cc1a13a31e2 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
@@ -106,7 +106,6 @@ public class KubernetesHPAProducer extends DefaultProducer {
     }
 
     protected void doGetHPA(Exchange exchange) {
-        HorizontalPodAutoscaler hpa = null;
         String podName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_HPA_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         if (ObjectHelper.isEmpty(podName)) {
@@ -117,14 +116,14 @@ public class KubernetesHPAProducer extends DefaultProducer {
             LOG.error("Get a specific hpa require specify a namespace name");
             throw new IllegalArgumentException("Get a specific hpa require specify a namespace name");
         }
-        hpa = getEndpoint().getKubernetesClient().autoscaling().v1().horizontalPodAutoscalers().inNamespace(namespaceName)
-                .withName(podName).get();
+        HorizontalPodAutoscaler hpa
+                = getEndpoint().getKubernetesClient().autoscaling().v1().horizontalPodAutoscalers().inNamespace(namespaceName)
+                        .withName(podName).get();
 
         prepareOutboundMessage(exchange, hpa);
     }
 
     protected void doCreateHPA(Exchange exchange) {
-        HorizontalPodAutoscaler hpa = null;
         String hpaName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_HPA_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         HorizontalPodAutoscalerSpec hpaSpec
@@ -144,8 +143,10 @@ public class KubernetesHPAProducer extends DefaultProducer {
         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();
-        hpa = getEndpoint().getKubernetesClient().autoscaling().v1().horizontalPodAutoscalers().inNamespace(namespaceName)
-                .create(hpaCreating);
+        HorizontalPodAutoscaler hpa
+                = getEndpoint().getKubernetesClient().autoscaling().v1().horizontalPodAutoscalers().inNamespace(namespaceName)
+                        .resource(hpaCreating)
+                        .create();
 
         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 ba3cc282365..51ed0c99cdc 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
@@ -107,7 +107,6 @@ public class KubernetesJobProducer extends DefaultProducer {
     }
 
     protected void doGetJob(Exchange exchange) {
-        Job job = null;
         String jobName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_JOB_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         if (ObjectHelper.isEmpty(jobName)) {
@@ -118,13 +117,12 @@ public class KubernetesJobProducer extends DefaultProducer {
             LOG.error("Get a specific job require specify a namespace name");
             throw new IllegalArgumentException("Get a specific job require specify a namespace name");
         }
-        job = getEndpoint().getKubernetesClient().batch().v1().jobs().inNamespace(namespaceName).withName(jobName).get();
+        Job job = getEndpoint().getKubernetesClient().batch().v1().jobs().inNamespace(namespaceName).withName(jobName).get();
 
         prepareOutboundMessage(exchange, job);
     }
 
     protected void doCreateJob(Exchange exchange) {
-        Job job = null;
         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);
@@ -143,7 +141,8 @@ public class KubernetesJobProducer extends DefaultProducer {
         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 = getEndpoint().getKubernetesClient().batch().v1().jobs().inNamespace(namespaceName).create(jobCreating);
+        Job job = getEndpoint().getKubernetesClient().batch().v1().jobs().inNamespace(namespaceName).resource(jobCreating)
+                .create();
 
         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 9f20bf928ce..0f8428506a9 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
@@ -117,7 +117,7 @@ public class KubernetesNamespacesProducer extends DefaultProducer {
         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().create(ns);
+        Namespace namespace = getEndpoint().getKubernetesClient().namespaces().resource(ns).create();
 
         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 7bc1a8cdf4b..e767af9c89e 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
@@ -97,19 +97,17 @@ public class KubernetesNodesProducer extends DefaultProducer {
     }
 
     protected void doGetNode(Exchange exchange) {
-        Node node = null;
         String pvName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NODE_NAME, String.class);
         if (ObjectHelper.isEmpty(pvName)) {
             LOG.error("Get a specific Node require specify a Node name");
             throw new IllegalArgumentException("Get a specific Node require specify a Node name");
         }
-        node = getEndpoint().getKubernetesClient().nodes().withName(pvName).get();
+        Node node = getEndpoint().getKubernetesClient().nodes().withName(pvName).get();
 
         prepareOutboundMessage(exchange, node);
     }
 
     protected void doCreateNode(Exchange exchange) {
-        Node node = null;
         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)) {
@@ -123,7 +121,7 @@ public class KubernetesNodesProducer extends DefaultProducer {
         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 = getEndpoint().getKubernetesClient().nodes().create(nodeCreating);
+        Node node = getEndpoint().getKubernetesClient().nodes().resource(nodeCreating).create();
 
         prepareOutboundMessage(exchange, node);
     }
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes/KubernetesPersistentVolumesProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes/KubernetesPersistentVolumesProducer.java
index b5b0ccd657e..bea1242e268 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes/KubernetesPersistentVolumesProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes/KubernetesPersistentVolumesProducer.java
@@ -83,13 +83,12 @@ public class KubernetesPersistentVolumesProducer extends DefaultProducer {
     }
 
     protected void doGetPersistentVolume(Exchange exchange) {
-        PersistentVolume pv = null;
         String pvName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_PERSISTENT_VOLUME_NAME, String.class);
         if (ObjectHelper.isEmpty(pvName)) {
             LOG.error("Get a specific Persistent Volume require specify a Persistent Volume name");
             throw new IllegalArgumentException("Get a specific Persistent Volume require specify a Persistent Volume name");
         }
-        pv = getEndpoint().getKubernetesClient().persistentVolumes().withName(pvName).get();
+        PersistentVolume pv = getEndpoint().getKubernetesClient().persistentVolumes().withName(pvName).get();
 
         prepareOutboundMessage(exchange, pv);
     }
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 76b11115d82..0f7d286ebe7 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
@@ -87,10 +87,10 @@ public class KubernetesPersistentVolumesClaimsProducer extends DefaultProducer {
     }
 
     protected void doListPersistentVolumesClaimsByLabels(Exchange exchange) {
-        PersistentVolumeClaimList pvcList = null;
         Map<String, String> labels
                 = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_PERSISTENT_VOLUMES_CLAIMS_LABELS, Map.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
+        PersistentVolumeClaimList pvcList;
         if (!ObjectHelper.isEmpty(namespaceName)) {
             pvcList = getEndpoint()
                     .getKubernetesClient()
@@ -111,7 +111,6 @@ public class KubernetesPersistentVolumesClaimsProducer extends DefaultProducer {
     }
 
     protected void doGetPersistentVolumeClaim(Exchange exchange) {
-        PersistentVolumeClaim pvc = null;
         String pvcName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_PERSISTENT_VOLUME_CLAIM_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         if (ObjectHelper.isEmpty(pvcName)) {
@@ -123,13 +122,13 @@ public class KubernetesPersistentVolumesClaimsProducer extends DefaultProducer {
             LOG.error("Get a specific Persistent Volume Claim require specify a namespace name");
             throw new IllegalArgumentException("Get a specific Persistent Volume Claim require specify a namespace name");
         }
-        pvc = getEndpoint().getKubernetesClient().persistentVolumeClaims().inNamespace(namespaceName).withName(pvcName).get();
+        PersistentVolumeClaim pvc = getEndpoint().getKubernetesClient().persistentVolumeClaims().inNamespace(namespaceName)
+                .withName(pvcName).get();
 
         prepareOutboundMessage(exchange, pvc);
     }
 
     protected void doCreatePersistentVolumeClaim(Exchange exchange) {
-        PersistentVolumeClaim pvc = null;
         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()
@@ -152,7 +151,9 @@ public class KubernetesPersistentVolumesClaimsProducer extends DefaultProducer {
                 = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_PERSISTENT_VOLUMES_CLAIMS_LABELS, Map.class);
         PersistentVolumeClaim pvcCreating = new PersistentVolumeClaimBuilder().withNewMetadata().withName(pvcName)
                 .withLabels(labels).endMetadata().withSpec(pvcSpec).build();
-        pvc = getEndpoint().getKubernetesClient().persistentVolumeClaims().inNamespace(namespaceName).create(pvcCreating);
+        PersistentVolumeClaim pvc
+                = getEndpoint().getKubernetesClient().persistentVolumeClaims().inNamespace(namespaceName).resource(pvcCreating)
+                        .create();
 
         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 f71eef26546..9de34cc7617 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
@@ -108,7 +108,6 @@ public class KubernetesPodsProducer extends DefaultProducer {
     }
 
     protected void doGetPod(Exchange exchange) {
-        Pod pod = null;
         String podName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_POD_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         if (ObjectHelper.isEmpty(podName)) {
@@ -119,13 +118,12 @@ public class KubernetesPodsProducer extends DefaultProducer {
             LOG.error("Get a specific pod require specify a namespace name");
             throw new IllegalArgumentException("Get a specific pod require specify a namespace name");
         }
-        pod = getEndpoint().getKubernetesClient().pods().inNamespace(namespaceName).withName(podName).get();
+        Pod pod = getEndpoint().getKubernetesClient().pods().inNamespace(namespaceName).withName(podName).get();
 
         prepareOutboundMessage(exchange, pod);
     }
 
     protected void doCreatePod(Exchange exchange) {
-        Pod pod = null;
         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);
@@ -144,7 +142,7 @@ public class KubernetesPodsProducer extends DefaultProducer {
         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 = getEndpoint().getKubernetesClient().pods().inNamespace(namespaceName).create(podCreating);
+        Pod pod = getEndpoint().getKubernetesClient().pods().inNamespace(namespaceName).resource(podCreating).create();
 
         prepareOutboundMessage(exchange, pod);
     }
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/properties/BasePropertiesFunction.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/properties/BasePropertiesFunction.java
index c084fc785d2..d2a313354e1 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/properties/BasePropertiesFunction.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/properties/BasePropertiesFunction.java
@@ -25,8 +25,8 @@ import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import io.fabric8.kubernetes.client.ConfigBuilder;
-import io.fabric8.kubernetes.client.DefaultKubernetesClient;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.KubernetesClientBuilder;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.ExtendedCamelContext;
@@ -70,8 +70,7 @@ abstract class BasePropertiesFunction extends ServiceSupport implements Properti
     private String mountPathSecrets;
 
     @Override
-    @SuppressWarnings("unchecked")
-    protected void doInit() throws Exception {
+    protected void doInit() {
         ObjectHelper.notNull(camelContext, "CamelContext");
         if (localMode == null) {
             localMode = "true"
@@ -82,7 +81,7 @@ abstract class BasePropertiesFunction extends ServiceSupport implements Properti
         }
     }
 
-    protected void doInitKubernetesClient() throws Exception {
+    protected void doInitKubernetesClient() {
         if (clientEnabled == null) {
             clientEnabled = "true"
                     .equalsIgnoreCase(camelContext.getPropertiesComponent().resolveProperty(CLIENT_ENABLED).orElse("true"));
@@ -130,7 +129,7 @@ abstract class BasePropertiesFunction extends ServiceSupport implements Properti
                         properties.remove(e.getKey());
                     }
                 }
-                client = new DefaultKubernetesClient(config.build());
+                client = new KubernetesClientBuilder().withConfig(config.build()).build();
                 LOG.info("Auto-configuration KubernetesClient summary");
                 for (var entry : properties.entrySet()) {
                     String k = entry.getKey().toString();
@@ -150,7 +149,7 @@ abstract class BasePropertiesFunction extends ServiceSupport implements Properti
                 }
             } else {
                 // create a default client to use
-                client = new DefaultKubernetesClient();
+                client = new KubernetesClientBuilder().build();
                 LOG.debug("Created default KubernetesClient (auto-configured by itself)");
             }
             // add to registry so the client can be reused
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 11050a7fa38..45a9981961b 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
@@ -87,8 +87,8 @@ public class KubernetesReplicationControllersProducer extends DefaultProducer {
     }
 
     protected void doList(Exchange exchange) {
-        ReplicationControllerList rcList = null;
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
+        ReplicationControllerList rcList;
         if (!ObjectHelper.isEmpty(namespaceName)) {
             rcList = getEndpoint().getKubernetesClient().replicationControllers().inNamespace(namespaceName).list();
         } else {
@@ -99,10 +99,10 @@ public class KubernetesReplicationControllersProducer extends DefaultProducer {
     }
 
     protected void doListReplicationControllersByLabels(Exchange exchange) {
-        ReplicationControllerList rcList = null;
         Map<String, String> labels
                 = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLERS_LABELS, Map.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
+        ReplicationControllerList rcList;
         if (!ObjectHelper.isEmpty(namespaceName)) {
 
             NonNamespaceOperation<ReplicationController, ReplicationControllerList, RollableScalableResource<ReplicationController>> replicationControllers
@@ -123,7 +123,6 @@ public class KubernetesReplicationControllersProducer extends DefaultProducer {
     }
 
     protected void doGetReplicationController(Exchange exchange) {
-        ReplicationController rc = null;
         String rcName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         if (ObjectHelper.isEmpty(rcName)) {
@@ -135,13 +134,13 @@ public class KubernetesReplicationControllersProducer extends DefaultProducer {
             LOG.error("Get a specific replication controller require specify a namespace name");
             throw new IllegalArgumentException("Get a specific replication controller require specify a namespace name");
         }
-        rc = getEndpoint().getKubernetesClient().replicationControllers().inNamespace(namespaceName).withName(rcName).get();
+        ReplicationController rc = getEndpoint().getKubernetesClient().replicationControllers().inNamespace(namespaceName)
+                .withName(rcName).get();
 
         prepareOutboundMessage(exchange, rc);
     }
 
     protected void doCreateReplicationController(Exchange exchange) {
-        ReplicationController rc = null;
         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()
@@ -164,7 +163,8 @@ public class KubernetesReplicationControllersProducer extends DefaultProducer {
                 = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLERS_LABELS, Map.class);
         ReplicationController rcCreating = new ReplicationControllerBuilder().withNewMetadata().withName(rcName)
                 .withLabels(labels).endMetadata().withSpec(rcSpec).build();
-        rc = getEndpoint().getKubernetesClient().replicationControllers().inNamespace(namespaceName).create(rcCreating);
+        ReplicationController rc = getEndpoint().getKubernetesClient().replicationControllers().inNamespace(namespaceName)
+                .resource(rcCreating).create();
 
         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 34549c0b9c4..be90b4cd3e5 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
@@ -90,10 +90,10 @@ public class KubernetesResourcesQuotaProducer extends DefaultProducer {
     }
 
     protected void doListResourceQuotasByLabels(Exchange exchange) {
-        ResourceQuotaList resList = null;
         Map<String, String> labels
                 = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_RESOURCES_QUOTA_LABELS, Map.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
+        ResourceQuotaList resList;
         if (!ObjectHelper.isEmpty(namespaceName)) {
             NonNamespaceOperation<ResourceQuota, ResourceQuotaList, Resource<ResourceQuota>> resQuota
                     = getEndpoint().getKubernetesClient().resourceQuotas().inNamespace(namespaceName);
@@ -114,7 +114,6 @@ public class KubernetesResourcesQuotaProducer extends DefaultProducer {
     }
 
     protected void doGetResourceQuota(Exchange exchange) {
-        ResourceQuota rq = null;
         String rqName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_RESOURCES_QUOTA_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         if (ObjectHelper.isEmpty(rqName)) {
@@ -125,13 +124,13 @@ public class KubernetesResourcesQuotaProducer extends DefaultProducer {
             LOG.error("Get a specific Resource Quota require specify a namespace name");
             throw new IllegalArgumentException("Get a specific Resource Quota require specify a namespace name");
         }
-        rq = getEndpoint().getKubernetesClient().resourceQuotas().inNamespace(namespaceName).withName(rqName).get();
+        ResourceQuota rq
+                = getEndpoint().getKubernetesClient().resourceQuotas().inNamespace(namespaceName).withName(rqName).get();
 
         prepareOutboundMessage(exchange, rq);
     }
 
     protected void doCreateResourceQuota(Exchange exchange) {
-        ResourceQuota rq = null;
         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
@@ -152,7 +151,8 @@ public class KubernetesResourcesQuotaProducer extends DefaultProducer {
                 = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_RESOURCES_QUOTA_LABELS, Map.class);
         ResourceQuota rqCreating = new ResourceQuotaBuilder().withNewMetadata().withName(rqName).withLabels(labels)
                 .endMetadata().withSpec(rqSpec).build();
-        rq = getEndpoint().getKubernetesClient().resourceQuotas().inNamespace(namespaceName).create(rqCreating);
+        ResourceQuota rq
+                = getEndpoint().getKubernetesClient().resourceQuotas().inNamespace(namespaceName).resource(rqCreating).create();
 
         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 bbc27d0874c..30c05103d27 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
@@ -84,9 +84,9 @@ public class KubernetesSecretsProducer extends DefaultProducer {
     }
 
     protected void doListSecretsByLabels(Exchange exchange) {
-        SecretList secretsList = null;
         Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_SECRETS_LABELS, Map.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
+        SecretList secretsList;
         if (!ObjectHelper.isEmpty(namespaceName)) {
             secretsList = getEndpoint()
                     .getKubernetesClient()
@@ -106,7 +106,6 @@ public class KubernetesSecretsProducer extends DefaultProducer {
     }
 
     protected void doGetSecret(Exchange exchange) {
-        Secret secret = null;
         String secretName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_SECRET_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         if (ObjectHelper.isEmpty(secretName)) {
@@ -117,13 +116,12 @@ public class KubernetesSecretsProducer extends DefaultProducer {
             LOG.error("Get a specific Secret require specify a namespace name");
             throw new IllegalArgumentException("Get a specific Secret require specify a namespace name");
         }
-        secret = getEndpoint().getKubernetesClient().secrets().inNamespace(namespaceName).withName(secretName).get();
+        Secret secret = getEndpoint().getKubernetesClient().secrets().inNamespace(namespaceName).withName(secretName).get();
 
         prepareOutboundMessage(exchange, secret);
     }
 
     protected void doCreateSecret(Exchange exchange) {
-        Secret secret = null;
         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)) {
@@ -134,7 +132,8 @@ public class KubernetesSecretsProducer extends DefaultProducer {
             LOG.error("Create a specific secret require specify a secret bean");
             throw new IllegalArgumentException("Create a specific secret require specify a secret bean");
         }
-        secret = getEndpoint().getKubernetesClient().secrets().inNamespace(namespaceName).create(secretToCreate);
+        Secret secret
+                = getEndpoint().getKubernetesClient().secrets().inNamespace(namespaceName).resource(secretToCreate).create();
 
         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 d1677c9cec8..95125bca63f 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
@@ -84,10 +84,10 @@ public class KubernetesServiceAccountsProducer extends DefaultProducer {
     }
 
     protected void doListServiceAccountsByLabels(Exchange exchange) {
-        ServiceAccountList saList = null;
         Map<String, String> labels
                 = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_SERVICE_ACCOUNTS_LABELS, Map.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
+        ServiceAccountList saList;
         if (!ObjectHelper.isEmpty(namespaceName)) {
             saList = getEndpoint()
                     .getKubernetesClient()
@@ -108,7 +108,6 @@ public class KubernetesServiceAccountsProducer extends DefaultProducer {
     }
 
     protected void doGetServiceAccount(Exchange exchange) {
-        ServiceAccount sa = null;
         String saName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_SERVICE_ACCOUNT_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         if (ObjectHelper.isEmpty(saName)) {
@@ -119,13 +118,13 @@ public class KubernetesServiceAccountsProducer extends DefaultProducer {
             LOG.error("Get a specific Service Account require specify a namespace name");
             throw new IllegalArgumentException("Get a specific Service Account require specify a namespace name");
         }
-        sa = getEndpoint().getKubernetesClient().serviceAccounts().inNamespace(namespaceName).withName(saName).get();
+        ServiceAccount sa
+                = getEndpoint().getKubernetesClient().serviceAccounts().inNamespace(namespaceName).withName(saName).get();
 
         prepareOutboundMessage(exchange, sa);
     }
 
     protected void doCreateServiceAccount(Exchange exchange) {
-        ServiceAccount sa = null;
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         ServiceAccount saToCreate
                 = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_SERVICE_ACCOUNT, ServiceAccount.class);
@@ -137,7 +136,8 @@ public class KubernetesServiceAccountsProducer extends DefaultProducer {
             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");
         }
-        sa = getEndpoint().getKubernetesClient().serviceAccounts().inNamespace(namespaceName).create(saToCreate);
+        ServiceAccount sa = getEndpoint().getKubernetesClient().serviceAccounts().inNamespace(namespaceName)
+                .resource(saToCreate).create();
 
         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 2df1c1d29fb..a97e6946fd1 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
@@ -81,8 +81,8 @@ public class KubernetesServicesProducer extends DefaultProducer {
     }
 
     protected void doList(Exchange exchange) {
-        ServiceList servicesList = null;
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
+        ServiceList servicesList;
         if (!ObjectHelper.isEmpty(namespaceName)) {
             servicesList = getEndpoint().getKubernetesClient().services().inNamespace(namespaceName).list();
         } else {
@@ -92,9 +92,9 @@ public class KubernetesServicesProducer extends DefaultProducer {
     }
 
     protected void doListServiceByLabels(Exchange exchange) {
-        ServiceList servicesList = null;
         Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_SERVICE_LABELS, Map.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
+        ServiceList servicesList;
         if (!ObjectHelper.isEmpty(namespaceName)) {
             servicesList = getEndpoint()
                     .getKubernetesClient()
@@ -115,7 +115,6 @@ public class KubernetesServicesProducer extends DefaultProducer {
     }
 
     protected void doGetService(Exchange exchange) {
-        Service service = null;
         String serviceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_SERVICE_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         if (ObjectHelper.isEmpty(serviceName)) {
@@ -126,13 +125,12 @@ public class KubernetesServicesProducer extends DefaultProducer {
             LOG.error("Get a specific service require specify a namespace name");
             throw new IllegalArgumentException("Get a specific service require specify a namespace name");
         }
-        service = getEndpoint().getKubernetesClient().services().inNamespace(namespaceName).withName(serviceName).get();
+        Service service = getEndpoint().getKubernetesClient().services().inNamespace(namespaceName).withName(serviceName).get();
 
         prepareOutboundMessage(exchange, service);
     }
 
     protected void doCreateService(Exchange exchange) {
-        Service service = null;
         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);
@@ -151,7 +149,8 @@ public class KubernetesServicesProducer extends DefaultProducer {
         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 = getEndpoint().getKubernetesClient().services().inNamespace(namespaceName).create(serviceCreating);
+        Service service
+                = getEndpoint().getKubernetesClient().services().inNamespace(namespaceName).resource(serviceCreating).create();
 
         prepareOutboundMessage(exchange, service);
     }
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/build_configs/OpenshiftBuildConfigsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/build_configs/OpenshiftBuildConfigsProducer.java
index e485d3defcd..6057993c645 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/build_configs/OpenshiftBuildConfigsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/build_configs/OpenshiftBuildConfigsProducer.java
@@ -76,9 +76,9 @@ public class OpenshiftBuildConfigsProducer extends DefaultProducer {
     }
 
     protected void doListBuildConfigsByLabels(Exchange exchange) {
-        BuildConfigList buildConfigsList = null;
         Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_BUILD_CONFIGS_LABELS, Map.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
+        BuildConfigList buildConfigsList;
         if (!ObjectHelper.isEmpty(namespaceName)) {
             buildConfigsList = getEndpoint().getKubernetesClient().adapt(OpenShiftClient.class).buildConfigs()
                     .inNamespace(namespaceName).withLabels(labels).list();
@@ -90,7 +90,6 @@ public class OpenshiftBuildConfigsProducer extends DefaultProducer {
     }
 
     protected void doGetBuildConfig(Exchange exchange) {
-        BuildConfig buildConfig = null;
         String buildConfigName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_BUILD_CONFIG_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         if (ObjectHelper.isEmpty(buildConfigName)) {
@@ -101,8 +100,9 @@ public class OpenshiftBuildConfigsProducer extends DefaultProducer {
             LOG.error("Get a specific Build Config require specify a namespace name");
             throw new IllegalArgumentException("Get a specific Build Config require specify a namespace name");
         }
-        buildConfig = getEndpoint().getKubernetesClient().adapt(OpenShiftClient.class).buildConfigs().inNamespace(namespaceName)
-                .withName(buildConfigName).get();
+        BuildConfig buildConfig
+                = getEndpoint().getKubernetesClient().adapt(OpenShiftClient.class).buildConfigs().inNamespace(namespaceName)
+                        .withName(buildConfigName).get();
 
         prepareOutboundMessage(exchange, buildConfig);
     }
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/builds/OpenshiftBuildsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/builds/OpenshiftBuildsProducer.java
index da5474ce895..5a8d3952479 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/builds/OpenshiftBuildsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/builds/OpenshiftBuildsProducer.java
@@ -75,9 +75,9 @@ public class OpenshiftBuildsProducer extends DefaultProducer {
     }
 
     protected void doListBuildByLabels(Exchange exchange) {
-        BuildList buildList = null;
         Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_BUILDS_LABELS, Map.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
+        BuildList buildList;
         if (!ObjectHelper.isEmpty(namespaceName)) {
             buildList = getEndpoint().getKubernetesClient()
                     .adapt(OpenShiftClient.class).builds().inNamespace(namespaceName).withLabels(labels).list();
@@ -90,7 +90,6 @@ public class OpenshiftBuildsProducer extends DefaultProducer {
     }
 
     protected void doGetBuild(Exchange exchange) {
-        Build build = null;
         String buildName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_BUILD_NAME, String.class);
         String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
         if (ObjectHelper.isEmpty(buildName)) {
@@ -101,7 +100,7 @@ public class OpenshiftBuildsProducer extends DefaultProducer {
             LOG.error("Get a specific Build require specify a namespace name");
             throw new IllegalArgumentException("Get a specific Build require specify a namespace name");
         }
-        build = getEndpoint().getKubernetesClient().adapt(OpenShiftClient.class).builds().inNamespace(namespaceName)
+        Build build = getEndpoint().getKubernetesClient().adapt(OpenShiftClient.class).builds().inNamespace(namespaceName)
                 .withName(buildName).get();
 
         prepareOutboundMessage(exchange, build);
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 a2f7732dbaf..9fdad01b7f7 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
@@ -156,7 +156,8 @@ public class OpenshiftDeploymentConfigsProducer extends DefaultProducer {
                 .withLabels(labels).endMetadata().withSpec(dcSpec).build();
         DeploymentConfig deploymentConfig = getEndpoint().getKubernetesClient().adapt(OpenShiftClient.class).deploymentConfigs()
                 .inNamespace(namespaceName)
-                .create(deploymentCreating);
+                .resource(deploymentCreating)
+                .create();
 
         prepareOutboundMessage(exchange, deploymentConfig);
     }
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/KubernetesServer.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/KubernetesServer.java
deleted file mode 100644
index 1f50c32614e..00000000000
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/KubernetesServer.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component;
-
-import java.util.HashMap;
-
-import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
-import io.fabric8.kubernetes.client.server.mock.KubernetesCrudDispatcher;
-import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
-import io.fabric8.mockwebserver.Context;
-import io.fabric8.mockwebserver.dsl.MockServerExpectation;
-import io.fabric8.mockwebserver.dsl.ReturnOrWebsocketable;
-import io.fabric8.mockwebserver.dsl.TimesOnceableOrHttpHeaderable;
-import okhttp3.mockwebserver.MockWebServer;
-import okhttp3.mockwebserver.RecordedRequest;
-import org.junit.jupiter.api.extension.AfterEachCallback;
-import org.junit.jupiter.api.extension.BeforeEachCallback;
-import org.junit.jupiter.api.extension.ExtensionContext;
-
-public class KubernetesServer implements BeforeEachCallback, AfterEachCallback {
-
-    private KubernetesMockServer mock;
-    private NamespacedKubernetesClient client;
-    private boolean https;
-    private boolean crudMode;
-
-    public KubernetesServer() {
-        this(true, false);
-    }
-
-    public KubernetesServer(boolean https) {
-        this(https, false);
-    }
-
-    public KubernetesServer(boolean https, boolean crudMode) {
-        this.https = https;
-        this.crudMode = crudMode;
-    }
-
-    @Override
-    public void beforeEach(ExtensionContext context) {
-        this.mock = this.crudMode
-                ? new KubernetesMockServer(
-                        new Context(), new MockWebServer(), new HashMap(), new KubernetesCrudDispatcher(), true)
-                : new KubernetesMockServer(this.https);
-        this.mock.init();
-        this.client = this.mock.createClient();
-    }
-
-    @Override
-    public void afterEach(ExtensionContext context) {
-        this.mock.destroy();
-        this.client.close();
-    }
-
-    public NamespacedKubernetesClient getClient() {
-        return this.client;
-    }
-
-    public MockServerExpectation expect() {
-        return this.mock.expect();
-    }
-
-    /** @deprecated */
-    @Deprecated
-    public <T> void expectAndReturnAsJson(String path, int code, T body) {
-        ((TimesOnceableOrHttpHeaderable) ((ReturnOrWebsocketable) this.expect().withPath(path)).andReturn(code, body)).always();
-    }
-
-    /** @deprecated */
-    @Deprecated
-    public void expectAndReturnAsString(String path, int code, String body) {
-        ((TimesOnceableOrHttpHeaderable) ((ReturnOrWebsocketable) this.expect().withPath(path)).andReturn(code, body)).always();
-    }
-
-    /** @deprecated */
-    @Deprecated
-    public <T> void expectAndReturnAsJson(String method, String path, int code, T body) {
-        ((TimesOnceableOrHttpHeaderable) ((ReturnOrWebsocketable) this.expect().withPath(path)).andReturn(code, body)).always();
-    }
-
-    /** @deprecated */
-    @Deprecated
-    public void expectAndReturnAsString(String method, String path, int code, String body) {
-        ((TimesOnceableOrHttpHeaderable) ((ReturnOrWebsocketable) this.expect().withPath(path)).andReturn(code, body)).always();
-    }
-
-    public RecordedRequest getLastRequest() throws InterruptedException {
-        int count = this.mock.getRequestCount();
-
-        RecordedRequest request;
-        for (request = null; count-- > 0; request = this.mock.takeRequest()) {
-        }
-
-        return request;
-    }
-}
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/OpenShiftServer.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/OpenShiftServer.java
deleted file mode 100644
index 1223c0e8dac..00000000000
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/OpenShiftServer.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component;
-
-import java.util.HashMap;
-
-import io.fabric8.kubernetes.client.KubernetesClient;
-import io.fabric8.kubernetes.client.server.mock.KubernetesCrudDispatcher;
-import io.fabric8.mockwebserver.Context;
-import io.fabric8.mockwebserver.dsl.MockServerExpectation;
-import io.fabric8.mockwebserver.dsl.ReturnOrWebsocketable;
-import io.fabric8.mockwebserver.dsl.TimesOnceableOrHttpHeaderable;
-import io.fabric8.openshift.client.NamespacedOpenShiftClient;
-import io.fabric8.openshift.client.server.mock.OpenShiftMockServer;
-import okhttp3.mockwebserver.MockWebServer;
-import okhttp3.mockwebserver.RecordedRequest;
-import org.junit.jupiter.api.extension.AfterEachCallback;
-import org.junit.jupiter.api.extension.BeforeEachCallback;
-import org.junit.jupiter.api.extension.ExtensionContext;
-
-public class OpenShiftServer implements BeforeEachCallback, AfterEachCallback {
-
-    protected OpenShiftMockServer mock;
-    private NamespacedOpenShiftClient client;
-    private boolean https;
-    private boolean curdMode;
-
-    public OpenShiftServer() {
-        this(true, false);
-    }
-
-    public OpenShiftServer(boolean https) {
-        this(https, false);
-    }
-
-    public OpenShiftServer(boolean https, boolean curdMode) {
-        this.https = https;
-        this.curdMode = curdMode;
-    }
-
-    @Override
-    public void beforeEach(ExtensionContext context) {
-        this.mock = this.curdMode
-                ? new OpenShiftMockServer(
-                        new Context(), new MockWebServer(), new HashMap(), new KubernetesCrudDispatcher(), true)
-                : new OpenShiftMockServer(this.https);
-        this.mock.init();
-        this.client = this.mock.createOpenShiftClient();
-    }
-
-    @Override
-    public void afterEach(ExtensionContext context) {
-        this.mock.destroy();
-        this.client.close();
-    }
-
-    public KubernetesClient getKubernetesClient() {
-        return this.client;
-    }
-
-    public NamespacedOpenShiftClient getOpenshiftClient() {
-        return this.client;
-    }
-
-    public MockServerExpectation expect() {
-        return this.mock.expect();
-    }
-
-    /** @deprecated */
-    @Deprecated
-    public <T> void expectAndReturnAsJson(String path, int code, T body) {
-        ((TimesOnceableOrHttpHeaderable) ((ReturnOrWebsocketable) this.expect().withPath(path)).andReturn(code, body)).always();
-    }
-
-    /** @deprecated */
-    @Deprecated
-    public void expectAndReturnAsString(String path, int code, String body) {
-        ((TimesOnceableOrHttpHeaderable) ((ReturnOrWebsocketable) this.expect().withPath(path)).andReturn(code, body)).always();
-    }
-
-    public RecordedRequest getLastRequest() throws InterruptedException {
-        int count = this.mock.getRequestCount();
-
-        RecordedRequest request;
-        for (request = null; count-- > 0; request = this.mock.takeRequest()) {
-        }
-
-        return request;
-    }
-
-}
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/KubernetesTestSupport.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/KubernetesTestSupport.java
index ba8253cbc4d..37135c894dc 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/KubernetesTestSupport.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/KubernetesTestSupport.java
@@ -18,6 +18,7 @@ package org.apache.camel.component.kubernetes;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.BeforeEach;
@@ -49,6 +50,6 @@ public class KubernetesTestSupport extends CamelTestSupport {
     }
 
     public static String toUrlEncoded(String str) throws UnsupportedEncodingException {
-        return URLEncoder.encode(str, "UTF-8");
+        return URLEncoder.encode(str, StandardCharsets.UTF_8);
     }
 }
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 d8508157efa..c5f4e7803e5 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
@@ -65,7 +65,7 @@ public class KubernetesConfigMapsConsumerIT extends KubernetesTestSupport {
 
     @Test
     @Order(1)
-    public void createConfigMapWithProperties() {
+    void createConfigMapWithProperties() {
         configureMock();
 
         Exchange ex = template.request("direct:createConfigmap", exchange -> {
@@ -87,7 +87,7 @@ public class KubernetesConfigMapsConsumerIT extends KubernetesTestSupport {
 
     @Test
     @Order(2)
-    public void createConfigMap() {
+    void createConfigMap() {
         configureMock();
 
         Exchange ex = template.request("direct:createConfigmap", exchange -> {
@@ -108,7 +108,7 @@ public class KubernetesConfigMapsConsumerIT extends KubernetesTestSupport {
     @ParameterizedTest
     @Order(3)
     @ValueSource(strings = { "test", "test1" })
-    public void deleteConfigMaps(String configMapName) {
+    void deleteConfigMaps(String configMapName) {
         Exchange ex = template.request("direct:deleteConfigmap", exchange -> {
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default");
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_NAME, configMapName);
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesCustomResourcesConsumerIT.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesCustomResourcesConsumerIT.java
index 3a90ab6de32..e51dc808329 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesCustomResourcesConsumerIT.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesCustomResourcesConsumerIT.java
@@ -22,8 +22,8 @@ import io.fabric8.kubernetes.api.model.apiextensions.v1.CustomResourceDefinition
 import io.fabric8.kubernetes.api.model.apiextensions.v1.CustomResourceDefinitionBuilder;
 import io.fabric8.kubernetes.api.model.apiextensions.v1.CustomResourceDefinitionVersionBuilder;
 import io.fabric8.kubernetes.api.model.apiextensions.v1.JSONSchemaPropsBuilder;
-import io.fabric8.kubernetes.client.DefaultKubernetesClient;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.KubernetesClientBuilder;
 import io.fabric8.kubernetes.client.Watcher;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
@@ -54,23 +54,22 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
 public class KubernetesCustomResourcesConsumerIT extends KubernetesTestSupport {
 
-    private static final KubernetesClient CLIENT = new DefaultKubernetesClient();
+    private static final KubernetesClient CLIENT = new KubernetesClientBuilder().build();
+    private static final String CRD_SOURCE_STRING = "{\n" +
+                                                    "  \"apiVersion\": \"camel.apache.org/v1\",\n" +
+                                                    "  \"kind\": \"CamelTest\",\n" +
+                                                    "  \"metadata\": {\n" +
+                                                    "    \"name\": \"camel-crd-itest\"\n" +
+                                                    "  },\n" +
+                                                    "  \"spec\": {\n" +
+                                                    "    \"message\": \"Apache Camel Rocks!\"\n" +
+                                                    "  }\n" +
+                                                    "}";
     private static CustomResourceDefinition crd;
 
     @EndpointInject("mock:result")
     protected MockEndpoint mockResultEndpoint;
 
-    private String crdSourceString = "{\n" +
-                                     "  \"apiVersion\": \"camel.apache.org/v1\",\n" +
-                                     "  \"kind\": \"CamelTest\",\n" +
-                                     "  \"metadata\": {\n" +
-                                     "    \"name\": \"camel-crd-itest\"\n" +
-                                     "  },\n" +
-                                     "  \"spec\": {\n" +
-                                     "    \"message\": \"Apache Camel Rocks!\"\n" +
-                                     "  }\n" +
-                                     "}";
-
     @BeforeAll
     public static void beforeAll() {
         crd = new CustomResourceDefinitionBuilder()
@@ -115,11 +114,11 @@ public class KubernetesCustomResourcesConsumerIT extends KubernetesTestSupport {
 
     @Test
     @Order(1)
-    public void createCustomResource() throws Exception {
+    void createCustomResource() throws Exception {
         mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_CRD_EVENT_ACTION,
                 Watcher.Action.ADDED);
         Exchange ex = template.request("direct:createCustomResource", exchange -> {
-            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_INSTANCE, crdSourceString);
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_INSTANCE, CRD_SOURCE_STRING);
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_INSTANCE_NAME, "camel-crd-itest");
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default");
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_NAME, "cameltests.camel.apache.org");
@@ -137,7 +136,7 @@ public class KubernetesCustomResourcesConsumerIT extends KubernetesTestSupport {
 
     @Test
     @Order(2)
-    public void deleteCustomResource() throws Exception {
+    void deleteCustomResource() throws Exception {
         mockResultEndpoint.reset();
         mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_CRD_EVENT_ACTION,
                 Watcher.Action.ADDED, Watcher.Action.DELETED);
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesNamespacesConsumerIT.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesNamespacesConsumerIT.java
index e34c62cd465..d4f5b840369 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesNamespacesConsumerIT.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesNamespacesConsumerIT.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.kubernetes.consumer.integration;
 
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ThreadLocalRandom;
@@ -56,7 +55,7 @@ public class KubernetesNamespacesConsumerIT extends KubernetesTestSupport {
 
     @Test
     @Order(1)
-    public void createPod() {
+    void createPod() {
         mockResultEndpoint.expectedMessageCount(5);
         mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_EVENT_ACTION, "ADDED",
                 "MODIFIED", "MODIFIED", "MODIFIED", "DELETED");
@@ -76,20 +75,17 @@ public class KubernetesNamespacesConsumerIT extends KubernetesTestSupport {
 
     @Test
     @Order(2)
-    public void listByLabels() {
+    void listByLabels() {
         Exchange ex = template.request("direct:listByLabels", exchange -> {
             Map<String, String> labels = new HashMap<>();
             labels.put("this", "rocks");
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_LABELS, labels);
         });
 
-        List<Namespace> result = ex.getMessage().getBody(List.class);
-
         boolean testNamespaceExists = false;
 
-        Iterator<Namespace> it = result.iterator();
-        while (it.hasNext()) {
-            Namespace namespace = it.next();
+        for (Object o : ex.getMessage().getBody(List.class)) {
+            Namespace namespace = (Namespace) o;
             if (TEST_NAME_SPACE.equalsIgnoreCase(namespace.getMetadata().getName())) {
                 testNamespaceExists = true;
             }
@@ -100,7 +96,7 @@ public class KubernetesNamespacesConsumerIT extends KubernetesTestSupport {
 
     @Test
     @Order(3)
-    public void deletePod() throws Exception {
+    void deletePod() throws Exception {
         Exchange ex = template.request("direct:deleteNamespace",
                 exchange -> exchange.getIn()
                         .setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, TEST_NAME_SPACE));
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesNodesConsumerIT.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesNodesConsumerIT.java
index b43c04ebeaf..250047c9ab4 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesNodesConsumerIT.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesNodesConsumerIT.java
@@ -47,7 +47,7 @@ public class KubernetesNodesConsumerIT extends KubernetesTestSupport {
 
     @Test
     @Order(1)
-    public void listNode() throws Exception {
+    void listNode() throws Exception {
         configureMock();
         Exchange ex = template.request("direct:listNode", exchange -> {
 
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesPodsConsumerIT.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesPodsConsumerIT.java
index cd552995678..f43758de4d1 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesPodsConsumerIT.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesPodsConsumerIT.java
@@ -88,7 +88,7 @@ public class KubernetesPodsConsumerIT extends KubernetesTestSupport {
 
     @Test
     @Order(1)
-    public void createPod() throws Exception {
+    void createPod() throws Exception {
         mockResultEndpoint.expectedMessageCount(2);
         mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_EVENT_ACTION, "ADDED",
                 "ADDED", "ADDED");
@@ -103,7 +103,7 @@ public class KubernetesPodsConsumerIT extends KubernetesTestSupport {
 
     @Test
     @Order(2)
-    public void deletePod() throws Exception {
+    void deletePod() throws Exception {
         mockResultEndpoint.expectedMessageCount(1);
         mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_EVENT_ACTION,
                 "ADDED", "ADDED", "ADDED");
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesReplicationControllersConsumerIT.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesReplicationControllersConsumerIT.java
index 71b99b80cb4..f0607e6e61a 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesReplicationControllersConsumerIT.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesReplicationControllersConsumerIT.java
@@ -60,7 +60,7 @@ public class KubernetesReplicationControllersConsumerIT extends KubernetesTestSu
 
     @Test
     @Order(1)
-    public void createReplicationController() throws Exception {
+    void createReplicationController() throws Exception {
         mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_EVENT_ACTION, "ADDED",
                 "MODIFIED", "MODIFIED");
 
@@ -93,7 +93,7 @@ public class KubernetesReplicationControllersConsumerIT extends KubernetesTestSu
 
     @Test
     @Order(2)
-    public void deleteReplicationController() throws Exception {
+    void deleteReplicationController() throws Exception {
         Exchange ex = template.request("direct:deleteReplicationController", exchange -> {
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default");
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_NAME, "test");
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesServicesConsumerIT.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesServicesConsumerIT.java
index f4cbfc88c2e..7040cbbf55b 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesServicesConsumerIT.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesServicesConsumerIT.java
@@ -60,8 +60,7 @@ public class KubernetesServicesConsumerIT extends KubernetesTestSupport {
 
     @Test
     @Order(1)
-    public void createService() {
-        //        mockResultEndpoint.expectedMessageCount(1);
+    void createService() {
         mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_EVENT_ACTION, "ADDED");
 
         Exchange ex = template.request("direct:createService", exchange -> {
@@ -94,7 +93,7 @@ public class KubernetesServicesConsumerIT extends KubernetesTestSupport {
 
     @Test
     @Order(2)
-    public void deleteService() {
+    void deleteService() {
         Exchange ex = template.request("direct:deleteService", exchange -> {
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default");
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SERVICE_NAME, TEST_SERVICE_NAME);
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 817e538d8fc..fc18509ca1d 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
@@ -25,39 +25,41 @@ import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
 import io.fabric8.kubernetes.api.model.ConfigMapListBuilder;
 import io.fabric8.kubernetes.api.model.ObjectMeta;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.KubernetesServer;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+@EnableKubernetesMockClient
 public class KubernetesConfigMapsProducerTest extends KubernetesTestSupport {
 
-    @RegisterExtension
-    public KubernetesServer server = new KubernetesServer();
+    KubernetesMockServer server;
+    NamespacedKubernetesClient client;
 
     @BindToRegistry("kubernetesClient")
     public KubernetesClient getClient() {
-        return server.getClient();
+        return client;
     }
 
     @Test
-    public void listTest() {
+    void listTest() {
         server.expect().withPath("/api/v1/configmaps")
                 .andReturn(200, new ConfigMapListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build())
                 .once();
-        List<ConfigMap> result = template.requestBody("direct:list", "", List.class);
+        List<?> result = template.requestBody("direct:list", "", List.class);
         assertEquals(3, result.size());
     }
 
     @Test
-    public void listByLabelsTest() throws Exception {
+    void listByLabelsTest() throws Exception {
         server.expect().withPath("/api/v1/configmaps?labelSelector=" + toUrlEncoded("key1=value1,key2=value2"))
                 .andReturn(200, new ConfigMapListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build())
                 .once();
@@ -68,13 +70,13 @@ public class KubernetesConfigMapsProducerTest extends KubernetesTestSupport {
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAPS_LABELS, labels);
         });
 
-        List<ConfigMap> result = ex.getMessage().getBody(List.class);
+        List<?> result = ex.getMessage().getBody(List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void getConfigMapTestDefaultNamespace() {
+    void getConfigMapTestDefaultNamespace() {
         ObjectMeta meta = new ObjectMeta();
         meta.setName("cm1");
         server.expect().withPath("/api/v1/namespaces/test/configmaps/cm1")
@@ -90,7 +92,7 @@ public class KubernetesConfigMapsProducerTest extends KubernetesTestSupport {
     }
 
     @Test
-    public void getConfigMapTestCustomNamespace() {
+    void getConfigMapTestCustomNamespace() {
         ObjectMeta meta = new ObjectMeta();
         meta.setName("cm1");
         server.expect().withPath("/api/v1/namespaces/custom/configmaps/cm1")
@@ -108,7 +110,7 @@ public class KubernetesConfigMapsProducerTest extends KubernetesTestSupport {
     }
 
     @Test
-    public void createGetAndDeleteConfigMap() {
+    void createGetAndDeleteConfigMap() {
         ConfigMap cm1 = new ConfigMapBuilder().withNewMetadata().withName("cm1").withNamespace("test").and().build();
         server.expect().withPath("/api/v1/namespaces/test/configmaps/cm1").andReturn(200, cm1).once();
 
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 039a0a26490..d203627c727 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
@@ -25,12 +25,13 @@ import java.util.Map;
 import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
 import io.fabric8.kubernetes.api.model.GenericKubernetesResourceList;
 import io.fabric8.kubernetes.client.KubernetesClient;
-import io.fabric8.kubernetes.client.dsl.base.CustomResourceDefinitionContext;
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import io.fabric8.kubernetes.client.utils.Serialization;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.KubernetesServer;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.apache.camel.util.IOHelper;
@@ -39,7 +40,6 @@ import org.junit.jupiter.api.MethodOrderer;
 import org.junit.jupiter.api.Order;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestMethodOrder;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -47,22 +47,13 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+@EnableKubernetesMockClient
 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
 public class KubernetesCustomResourcesProducerTest extends KubernetesTestSupport {
     private static String githubSourceString;
 
-    @RegisterExtension
-    public KubernetesServer server = new KubernetesServer();
-
-    private CustomResourceDefinitionContext getCustomResourceContext() {
-        return new CustomResourceDefinitionContext.Builder()
-                .withName("githubsources.sources.knative.dev")
-                .withGroup("sources.knative.dev")
-                .withScope("Namespaced")
-                .withVersion("v1alpha1")
-                .withPlural("githubsources")
-                .build();
-    }
+    KubernetesMockServer server;
+    NamespacedKubernetesClient client;
 
     @BeforeAll
     public static void readResource() throws IOException {
@@ -73,10 +64,10 @@ public class KubernetesCustomResourcesProducerTest extends KubernetesTestSupport
 
     @BindToRegistry("kubernetesClient")
     public KubernetesClient getClient() {
-        return server.getClient();
+        return client;
     }
 
-    private String setupGithubSourceList() throws Exception {
+    private String setupGithubSourceList() {
         GenericKubernetesResourceList list = new GenericKubernetesResourceList();
         list.getItems().add(Serialization.unmarshal(githubSourceString, GenericKubernetesResource.class));
         return Serialization.asJson(list);
@@ -84,7 +75,7 @@ public class KubernetesCustomResourcesProducerTest extends KubernetesTestSupport
 
     @Test
     @Order(1)
-    public void createTest() throws Exception {
+    void createTest() {
         server.expect().post().withPath("/apis/sources.knative.dev/v1alpha1/namespaces/testnamespace/githubsources")
                 .andReturn(200, githubSourceString).once();
         server.expect().delete().withPath("/apis/sources.knative.dev/v1alpha1/namespaces/testnamespace/githubsources/samplecr")
@@ -110,7 +101,7 @@ public class KubernetesCustomResourcesProducerTest extends KubernetesTestSupport
 
     @Test
     @Order(2)
-    public void listTest() throws Exception {
+    void listTest() throws Exception {
         server.expect().get().withPath("/apis/sources.knative.dev/v1alpha1/namespaces/testnamespace/githubsources")
                 .andReturn(200, setupGithubSourceList()).once();
 
@@ -126,14 +117,14 @@ public class KubernetesCustomResourcesProducerTest extends KubernetesTestSupport
         assertFalse(ex.isFailed());
         assertNull(ex.getException());
 
-        List<Map<String, Object>> result = ex.getMessage().getBody(List.class);
+        List<?> result = ex.getMessage().getBody(List.class);
 
         assertEquals(1, result.size());
     }
 
     @Test
     @Order(3)
-    public void listByLabelsTest() throws Exception {
+    void listByLabelsTest() throws Exception {
         server.expect().get()
                 .withPath("/apis/sources.knative.dev/v1alpha1/namespaces/testnamespace/githubsources?labelSelector="
                           + toUrlEncoded("key1=value1,key2=value2"))
@@ -155,14 +146,14 @@ public class KubernetesCustomResourcesProducerTest extends KubernetesTestSupport
         assertFalse(ex.isFailed());
         assertNull(ex.getException());
 
-        List<Map<String, Object>> result = ex.getMessage().getBody(List.class);
+        List<?> result = ex.getMessage().getBody(List.class);
 
         assertEquals(1, result.size());
     }
 
     @Test
     @Order(4)
-    public void deleteTest() throws Exception {
+    void deleteTest() {
         server.expect().post().withPath("/apis/sources.knative.dev/v1alpha1/namespaces/testnamespace/githubsources")
                 .andReturn(200, githubSourceString).once();
         server.expect().delete().withPath("/apis/sources.knative.dev/v1alpha1/namespaces/testnamespace/githubsources/samplecr")
@@ -184,7 +175,7 @@ public class KubernetesCustomResourcesProducerTest extends KubernetesTestSupport
 
     @Test
     @Order(5)
-    public void testListNotFound() {
+    void testListNotFound() {
         server.expect().get().withPath("/apis/sources.knative.dev/v1alpha1/namespaces/testnamespace/githubsources")
                 .andReturn(404, "").once();
         Exchange ex4 = template.request("direct:listCustomResources", exchange -> {
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 230e6a8929e..3f6d1c78d19 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
@@ -24,39 +24,41 @@ import io.fabric8.kubernetes.api.model.apps.Deployment;
 import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder;
 import io.fabric8.kubernetes.api.model.apps.DeploymentListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.KubernetesServer;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+@EnableKubernetesMockClient
 public class KubernetesDeploymentsProducerTest extends KubernetesTestSupport {
 
-    @RegisterExtension
-    public KubernetesServer server = new KubernetesServer();
+    KubernetesMockServer server;
+    NamespacedKubernetesClient client;
 
     @BindToRegistry("kubernetesClient")
     public KubernetesClient getClient() {
-        return server.getClient();
+        return client;
     }
 
     @Test
-    public void listTest() {
+    void listTest() {
         server.expect().withPath("/apis/apps/v1/namespaces/test/deployments")
                 .andReturn(200, new DeploymentListBuilder().addNewItem().and().build()).once();
-        List<Deployment> result = template.requestBody("direct:list", "", List.class);
+        List<?> result = template.requestBody("direct:list", "", List.class);
 
         assertEquals(1, result.size());
     }
 
     @Test
-    public void listByLabelsTest() throws Exception {
+    void listByLabelsTest() throws Exception {
         server.expect()
                 .withPath("/apis/apps/v1/namespaces/test/deployments?labelSelector="
                           + toUrlEncoded("key1=value1,key2=value2"))
@@ -69,13 +71,13 @@ public class KubernetesDeploymentsProducerTest extends KubernetesTestSupport {
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_DEPLOYMENTS_LABELS, labels);
         });
 
-        List<Deployment> result = ex.getMessage().getBody(List.class);
+        List<?> result = ex.getMessage().getBody(List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void createAndDeleteDeployment() {
+    void createAndDeleteDeployment() {
         Deployment de1 = new DeploymentBuilder().withNewMetadata().withNamespace("test").withName("de1")
                 .withResourceVersion("1").withGeneration(2L).endMetadata().withNewSpec()
                 .withReplicas(0).endSpec().withNewStatus().withReplicas(1).withObservedGeneration(1L).endStatus().build();
@@ -98,7 +100,7 @@ public class KubernetesDeploymentsProducerTest extends KubernetesTestSupport {
     }
 
     @Test
-    public void createScaleAndDeleteDeployment() {
+    void createScaleAndDeleteDeployment() {
         server.expect().withPath("/apis/apps/v1/namespaces/test/deployments/de1")
                 .andReturn(200, new DeploymentBuilder().withNewMetadata().withName("de1")
                         .withResourceVersion("1").endMetadata().withNewSpec().withReplicas(5).endSpec().withNewStatus()
@@ -116,7 +118,6 @@ public class KubernetesDeploymentsProducerTest extends KubernetesTestSupport {
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_REPLICAS, 5);
         });
 
-        // Thread.sleep(3000);
         int replicas = ex.getMessage().getBody(Integer.class);
 
         assertEquals(5, replicas);
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 17791425bf3..95e08e2aa84 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
@@ -25,64 +25,61 @@ 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.HorizontalPodAutoscalerListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.KubernetesServer;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+@EnableKubernetesMockClient
 public class KubernetesHPAProducerTest extends KubernetesTestSupport {
 
-    @RegisterExtension
-    public KubernetesServer server = new KubernetesServer();
+    KubernetesMockServer server;
+    NamespacedKubernetesClient client;
 
     @BindToRegistry("kubernetesClient")
     public KubernetesClient getClient() {
-        return server.getClient();
+        return client;
     }
 
     @Test
-    public void listTest() {
+    void listTest() {
         server.expect().withPath("/apis/autoscaling/v1/namespaces/test/horizontalpodautoscalers")
                 .andReturn(200, new HorizontalPodAutoscalerListBuilder().addNewItem().and().addNewItem().and().addNewItem()
                         .and().build())
                 .once();
-        List<HorizontalPodAutoscaler> result = template.requestBody("direct:list", "", List.class);
+        List<?> result = template.requestBody("direct:list", "", List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void listByLabelsTest() throws Exception {
+    void listByLabelsTest() throws Exception {
         server.expect()
                 .withPath("/apis/autoscaling/v1/namespaces/test/horizontalpodautoscalers?labelSelector="
                           + toUrlEncoded("key1=value1,key2=value2"))
                 .andReturn(200, new PodListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build()).once();
-        Exchange ex = template.request("direct:listByLabels", new Processor() {
-
-            @Override
-            public void process(Exchange exchange) {
-                Map<String, String> labels = new HashMap<>();
-                labels.put("key1", "value1");
-                labels.put("key2", "value2");
-                exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_HPA_LABELS, labels);
-            }
+        Exchange ex = template.request("direct:listByLabels", exchange -> {
+            Map<String, String> labels = new HashMap<>();
+            labels.put("key1", "value1");
+            labels.put("key2", "value2");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_HPA_LABELS, labels);
         });
 
-        List<HorizontalPodAutoscaler> result = ex.getMessage().getBody(List.class);
+        List<?> result = ex.getMessage().getBody(List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void getHPATest() {
+    void getHPATest() {
         HorizontalPodAutoscaler hpa1
                 = new HorizontalPodAutoscalerBuilder().withNewMetadata().withName("hpa1").withNamespace("test").and().build();
         HorizontalPodAutoscaler hpa2
@@ -92,13 +89,9 @@ public class KubernetesHPAProducerTest extends KubernetesTestSupport {
                 .once();
         server.expect().withPath("/apis/autoscaling/v1/namespaces/ns1/horizontalpodautoscalers/hpa2").andReturn(200, hpa2)
                 .once();
-        Exchange ex = template.request("direct:getHPA", new Processor() {
-
-            @Override
-            public void process(Exchange exchange) {
-                exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
-                exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_HPA_NAME, "hpa1");
-            }
+        Exchange ex = template.request("direct:getHPA", exchange -> {
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_HPA_NAME, "hpa1");
         });
 
         HorizontalPodAutoscaler result = ex.getMessage().getBody(HorizontalPodAutoscaler.class);
@@ -107,19 +100,15 @@ public class KubernetesHPAProducerTest extends KubernetesTestSupport {
     }
 
     @Test
-    public void deleteHPATest() {
+    void deleteHPATest() {
         HorizontalPodAutoscaler hpa1
                 = new HorizontalPodAutoscalerBuilder().withNewMetadata().withName("hpa1").withNamespace("test").and().build();
         server.expect().withPath("/apis/autoscaling/v1/namespaces/test/horizontalpodautoscalers/hpa1").andReturn(200, hpa1)
                 .once();
 
-        Exchange ex = template.request("direct:deleteHPA", new Processor() {
-
-            @Override
-            public void process(Exchange exchange) {
-                exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
-                exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_HPA_NAME, "hpa1");
-            }
+        Exchange ex = template.request("direct:deleteHPA", exchange -> {
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_HPA_NAME, "hpa1");
         });
 
         boolean podDeleted = ex.getMessage().getBody(Boolean.class);
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 334ea500e48..05df966fca0 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,45 +20,46 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import io.fabric8.kubernetes.api.model.Secret;
 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;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.KubernetesServer;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
+@EnableKubernetesMockClient
 public class KubernetesJobProducerTest extends KubernetesTestSupport {
 
-    @RegisterExtension
-    public KubernetesServer server = new KubernetesServer();
+    KubernetesMockServer server;
+    NamespacedKubernetesClient client;
 
     @BindToRegistry("kubernetesClient")
     public KubernetesClient getClient() {
-        return server.getClient();
+        return client;
     }
 
     @Test
-    public void listTest() {
+    void listTest() {
         server.expect().withPath("/apis/batch/v1/namespaces/test/jobs")
                 .andReturn(200, new JobListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build())
                 .once();
-        List<Secret> result = template.requestBody("direct:list", "", List.class);
+        List<?> result = template.requestBody("direct:list", "", List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void listByLabelsTest() throws Exception {
+    void listByLabelsTest() throws Exception {
         server.expect().withPath("/apis/batch/v1/namespaces/test/jobs?labelSelector=" + toUrlEncoded("key1=value1,key2=value2"))
                 .andReturn(200, new JobListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build()).once();
         Exchange ex = template.request("direct:listByLabels", exchange -> {
@@ -68,13 +69,13 @@ public class KubernetesJobProducerTest extends KubernetesTestSupport {
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_JOB_LABELS, labels);
         });
 
-        List<Job> result = ex.getMessage().getBody(List.class);
+        List<?> result = ex.getMessage().getBody(List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void getJobTest() {
+    void getJobTest() {
         Job sc1 = new JobBuilder().withNewMetadata().withName("sc1").withNamespace("test").and().build();
 
         server.expect().withPath("/apis/batch/v1/namespaces/test/jobs/sc1").andReturn(200, sc1).once();
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 ac149508f8b..abddf8a5b6c 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
@@ -23,39 +23,41 @@ import io.fabric8.kubernetes.api.model.NamespaceBuilder;
 import io.fabric8.kubernetes.api.model.NamespaceListBuilder;
 import io.fabric8.kubernetes.api.model.ObjectMeta;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.KubernetesServer;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+@EnableKubernetesMockClient
 public class KubernetesNamespacesProducerTest extends KubernetesTestSupport {
 
-    @RegisterExtension
-    public KubernetesServer server = new KubernetesServer();
+    KubernetesMockServer server;
+    NamespacedKubernetesClient client;
 
     @BindToRegistry("kubernetesClient")
     public KubernetesClient getClient() {
-        return server.getClient();
+        return client;
     }
 
     @Test
-    public void listTest() {
+    void listTest() {
         server.expect().withPath("/api/v1/namespaces")
                 .andReturn(200, new NamespaceListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build())
                 .once();
-        List<Namespace> result = template.requestBody("direct:list", "", List.class);
+        List<?> result = template.requestBody("direct:list", "", List.class);
         assertEquals(3, result.size());
     }
 
     @Test
-    public void getNamespace() {
+    void getNamespace() {
         ObjectMeta meta = new ObjectMeta();
         meta.setName("test");
         server.expect().withPath("/api/v1/namespaces/test").andReturn(200, new NamespaceBuilder().withMetadata(meta).build())
@@ -70,7 +72,7 @@ public class KubernetesNamespacesProducerTest extends KubernetesTestSupport {
     }
 
     @Test
-    public void createAndDeleteNamespace() {
+    void createAndDeleteNamespace() {
         Namespace ns1 = new NamespaceBuilder().withNewMetadata().withName("ns1").endMetadata().build();
         server.expect().withPath("/api/v1/namespaces/ns1").andReturn(200, ns1).once();
 
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 3449a712dff..32de775f6b2 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
@@ -27,38 +27,40 @@ import io.fabric8.kubernetes.api.model.NodeSpec;
 import io.fabric8.kubernetes.api.model.NodeSpecBuilder;
 import io.fabric8.kubernetes.api.model.ObjectMeta;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.KubernetesServer;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+@EnableKubernetesMockClient
 public class KubernetesNodesProducerTest extends KubernetesTestSupport {
 
-    @RegisterExtension
-    public KubernetesServer server = new KubernetesServer();
+    KubernetesMockServer server;
+    NamespacedKubernetesClient client;
 
     @BindToRegistry("kubernetesClient")
     public KubernetesClient getClient() {
-        return server.getClient();
+        return client;
     }
 
     @Test
-    public void listTest() {
+    void listTest() {
         server.expect().withPath("/api/v1/nodes").andReturn(200, new NodeListBuilder().addNewItem().and().build()).once();
-        List<Node> result = template.requestBody("direct:list", "", List.class);
+        List<?> result = template.requestBody("direct:list", "", List.class);
 
         assertEquals(1, result.size());
     }
 
     @Test
-    public void listByLabelsTest() throws Exception {
+    void listByLabelsTest() throws Exception {
         server.expect().withPath("/api/v1/nodes?labelSelector=" + toUrlEncoded("key1=value1,key2=value2"))
                 .andReturn(200, new NodeListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build()).once();
         Exchange ex = template.request("direct:listByLabels", exchange -> {
@@ -68,13 +70,13 @@ public class KubernetesNodesProducerTest extends KubernetesTestSupport {
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NODES_LABELS, labels);
         });
 
-        List<Node> result = ex.getMessage().getBody(List.class);
+        List<?> result = ex.getMessage().getBody(List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void createNodeTest() {
+    void createNodeTest() {
         ObjectMeta meta = new ObjectMeta();
         meta.setName("test");
         server.expect().withPath("/api/v1/nodes").andReturn(200, new NodeBuilder().withMetadata(meta).build()).once();
@@ -94,7 +96,7 @@ public class KubernetesNodesProducerTest extends KubernetesTestSupport {
     }
 
     @Test
-    public void deleteNode() {
+    void deleteNode() {
         Node node1 = new NodeBuilder().withNewMetadata().withName("node1").withNamespace("test").and().build();
         server.expect().withPath("/api/v1/nodes/node1").andReturn(200, node1).once();
 
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 261692c5e05..e088baa35f2 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
@@ -21,46 +21,46 @@ import java.util.List;
 import java.util.Map;
 
 import io.fabric8.kubernetes.api.model.ObjectMeta;
-import io.fabric8.kubernetes.api.model.PersistentVolume;
-import io.fabric8.kubernetes.api.model.PersistentVolumeClaim;
 import io.fabric8.kubernetes.api.model.PersistentVolumeClaimBuilder;
 import io.fabric8.kubernetes.api.model.PersistentVolumeClaimListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.KubernetesServer;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+@EnableKubernetesMockClient
 public class KubernetesPersistentVolumesClaimsProducerTest extends KubernetesTestSupport {
 
-    @RegisterExtension
-    public KubernetesServer server = new KubernetesServer();
+    KubernetesMockServer server;
+    NamespacedKubernetesClient client;
 
     @BindToRegistry("kubernetesClient")
     public KubernetesClient getClient() {
-        return server.getClient();
+        return client;
     }
 
     @Test
-    public void listTest() {
+    void listTest() {
         server.expect().withPath("/api/v1/namespaces/test/persistentvolumeclaims")
                 .andReturn(200,
                         new PersistentVolumeClaimListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build())
                 .once();
-        List<PersistentVolumeClaim> result = template.requestBody("direct:list", "", List.class);
+        List<?> result = template.requestBody("direct:list", "", List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void listByLabelsTest() throws Exception {
+    void listByLabelsTest() throws Exception {
         server.expect()
                 .withPath("/api/v1/namespaces/test/persistentvolumeclaims?labelSelector="
                           + toUrlEncoded("key1=value1,key2=value2"))
@@ -75,12 +75,12 @@ public class KubernetesPersistentVolumesClaimsProducerTest extends KubernetesTes
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_PERSISTENT_VOLUMES_CLAIMS_LABELS, labels);
         });
 
-        List<PersistentVolume> result = ex.getMessage().getBody(List.class);
+        List<?> result = ex.getMessage().getBody(List.class);
         assertEquals(3, result.size());
     }
 
     @Test
-    public void createListAndDeletePersistentVolumeClaim() {
+    void createListAndDeletePersistentVolumeClaim() {
         ObjectMeta meta = new ObjectMeta();
         meta.setName("pvc1");
         server.expect().withPath("/api/v1/namespaces/test/persistentvolumeclaims/pvc1")
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesProducerTest.java
index 7013aed2783..b875449d8f9 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesProducerTest.java
@@ -20,43 +20,44 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import io.fabric8.kubernetes.api.model.PersistentVolume;
 import io.fabric8.kubernetes.api.model.PersistentVolumeListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.KubernetesServer;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
+@EnableKubernetesMockClient
 public class KubernetesPersistentVolumesProducerTest extends KubernetesTestSupport {
 
-    @RegisterExtension
-    public KubernetesServer server = new KubernetesServer();
+    KubernetesMockServer server;
+    NamespacedKubernetesClient client;
 
     @BindToRegistry("kubernetesClient")
     public KubernetesClient getClient() {
-        return server.getClient();
+        return client;
     }
 
     @Test
-    public void listTest() {
+    void listTest() {
         server.expect().withPath("/api/v1/persistentvolumes")
                 .andReturn(200,
                         new PersistentVolumeListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build())
                 .once();
-        List<PersistentVolume> result = template.requestBody("direct:list", "", List.class);
+        List<?> result = template.requestBody("direct:list", "", List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void listByLabelsTest() throws Exception {
+    void listByLabelsTest() throws Exception {
         server.expect().withPath("/api/v1/persistentvolumes?labelSelector=" + toUrlEncoded("key1=value1,key2=value2"))
                 .andReturn(200,
                         new PersistentVolumeListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build())
@@ -68,7 +69,7 @@ public class KubernetesPersistentVolumesProducerTest extends KubernetesTestSuppo
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_PERSISTENT_VOLUMES_LABELS, labels);
         });
 
-        List<PersistentVolume> result = ex.getMessage().getBody(List.class);
+        List<?> result = ex.getMessage().getBody(List.class);
 
         assertEquals(3, result.size());
     }
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 80e6db521f5..5f437db56c6 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
@@ -24,46 +24,48 @@ import io.fabric8.kubernetes.api.model.Pod;
 import io.fabric8.kubernetes.api.model.PodBuilder;
 import io.fabric8.kubernetes.api.model.PodListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.KubernetesServer;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+@EnableKubernetesMockClient
 public class KubernetesPodsProducerTest extends KubernetesTestSupport {
 
-    @RegisterExtension
-    public KubernetesServer server = new KubernetesServer();
+    KubernetesMockServer server;
+    NamespacedKubernetesClient client;
 
     @BindToRegistry("kubernetesClient")
     public KubernetesClient getClient() {
-        return server.getClient();
+        return client;
     }
 
     @Test
-    public void listTest() {
+    void listTest() {
         server.expect().withPath("/api/v1/pods")
                 .andReturn(200, new PodListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build()).once();
         server.expect().withPath("/api/v1/namespaces/test/pods")
                 .andReturn(200, new PodListBuilder().addNewItem().and().addNewItem().and().build()).once();
-        List<Pod> result = template.requestBody("direct:list", "", List.class);
+        List<?> result = template.requestBody("direct:list", "", List.class);
         assertEquals(3, result.size());
 
         Exchange ex = template.request("direct:list",
                 exchange -> exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test"));
-        List<Pod> resultNamespaced = ex.getMessage().getBody(List.class);
+        List<?> resultNamespace = ex.getMessage().getBody(List.class);
 
-        assertEquals(2, resultNamespaced.size());
+        assertEquals(2, resultNamespace.size());
     }
 
     @Test
-    public void listByLabelsTest() throws Exception {
+    void listByLabelsTest() throws Exception {
         server.expect().withPath("/api/v1/pods?labelSelector=" + toUrlEncoded("key1=value1,key2=value2"))
                 .andReturn(200, new PodListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build()).once();
         Exchange ex = template.request("direct:listByLabels", exchange -> {
@@ -73,13 +75,13 @@ public class KubernetesPodsProducerTest extends KubernetesTestSupport {
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_PODS_LABELS, labels);
         });
 
-        List<Pod> result = ex.getMessage().getBody(List.class);
+        List<?> result = ex.getMessage().getBody(List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void getPodTest() {
+    void getPodTest() {
         Pod pod1 = new PodBuilder().withNewMetadata().withName("pod1").withNamespace("test").and().build();
         Pod pod2 = new PodBuilder().withNewMetadata().withName("pod2").withNamespace("ns1").and().build();
 
@@ -96,7 +98,7 @@ public class KubernetesPodsProducerTest extends KubernetesTestSupport {
     }
 
     @Test
-    public void deletePod() {
+    void deletePod() {
         Pod pod1 = new PodBuilder().withNewMetadata().withName("pod1").withNamespace("test").and().build();
         server.expect().withPath("/api/v1/namespaces/test/pods/pod1").andReturn(200, pod1).once();
 
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 ffd87f95bc3..0f9d16dbff4 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
@@ -25,43 +25,45 @@ import io.fabric8.kubernetes.api.model.ReplicationController;
 import io.fabric8.kubernetes.api.model.ReplicationControllerBuilder;
 import io.fabric8.kubernetes.api.model.ReplicationControllerListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.KubernetesServer;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.awaitility.Awaitility;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+@EnableKubernetesMockClient
 public class KubernetesReplicationControllersProducerTest extends KubernetesTestSupport {
 
-    @RegisterExtension
-    public KubernetesServer server = new KubernetesServer();
+    KubernetesMockServer server;
+    NamespacedKubernetesClient client;
 
     @BindToRegistry("kubernetesClient")
     public KubernetesClient getClient() {
-        return server.getClient();
+        return client;
     }
 
     @Test
-    public void listTest() {
+    void listTest() {
         server.expect().withPath("/api/v1/replicationcontrollers")
                 .andReturn(200,
                         new ReplicationControllerListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build())
                 .once();
-        List<ReplicationController> result = template.requestBody("direct:list", "", List.class);
+        List<?> result = template.requestBody("direct:list", "", List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void listByLabelsTest() throws Exception {
+    void listByLabelsTest() throws Exception {
         server.expect().withPath("/api/v1/replicationcontrollers?labelSelector=" + toUrlEncoded("key1=value1,key2=value2"))
                 .andReturn(200,
                         new ReplicationControllerListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build())
@@ -73,13 +75,13 @@ public class KubernetesReplicationControllersProducerTest extends KubernetesTest
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLERS_LABELS, labels);
         });
 
-        List<ReplicationController> result = ex.getMessage().getBody(List.class);
+        List<?> result = ex.getMessage().getBody(List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void getReplicationControllerTest() {
+    void getReplicationControllerTest() {
         ReplicationController rc1
                 = new ReplicationControllerBuilder().withNewMetadata().withName("rc1").withNamespace("test").and().build();
 
@@ -95,7 +97,7 @@ public class KubernetesReplicationControllersProducerTest extends KubernetesTest
     }
 
     @Test
-    public void createAndDeleteReplicationController() {
+    void createAndDeleteReplicationController() {
         server.expect().withPath("/api/v1/namespaces/test/replicationcontrollers/repl1")
                 .andReturn(200, new ReplicationControllerBuilder().withNewMetadata().withName("repl1")
                         .withResourceVersion("1").endMetadata().withNewSpec().withReplicas(0).endSpec().withNewStatus()
@@ -119,7 +121,7 @@ public class KubernetesReplicationControllersProducerTest extends KubernetesTest
     }
 
     @Test
-    public void createScaleAndDeleteReplicationController() {
+    void createScaleAndDeleteReplicationController() {
         server.expect().withPath("/api/v1/namespaces/test/replicationcontrollers/repl1")
                 .andReturn(200, new ReplicationControllerBuilder().withNewMetadata().withName("repl1")
                         .withResourceVersion("1").endMetadata().withNewSpec().withReplicas(5).endSpec().withNewStatus()
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 9cf7fa36522..4b799d1a03f 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
@@ -22,40 +22,42 @@ import io.fabric8.kubernetes.api.model.ResourceQuota;
 import io.fabric8.kubernetes.api.model.ResourceQuotaBuilder;
 import io.fabric8.kubernetes.api.model.ResourceQuotaListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.KubernetesServer;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+@EnableKubernetesMockClient
 public class KubernetesResourcesQuotaProducerTest extends KubernetesTestSupport {
 
-    @RegisterExtension
-    public KubernetesServer server = new KubernetesServer();
+    KubernetesMockServer server;
+    NamespacedKubernetesClient client;
 
     @BindToRegistry("kubernetesClient")
     public KubernetesClient getClient() {
-        return server.getClient();
+        return client;
     }
 
     @Test
-    public void listTest() {
+    void listTest() {
         server.expect().withPath("/api/v1/resourcequotas")
                 .andReturn(200, new ResourceQuotaListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build())
                 .once();
-        List<ResourceQuota> result = template.requestBody("direct:list", "", List.class);
+        List<?> result = template.requestBody("direct:list", "", List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void deleteResourceQuota() {
+    void deleteResourceQuota() {
         ResourceQuota rq1 = new ResourceQuotaBuilder().withNewMetadata().withName("rq1").withNamespace("test").and().build();
         server.expect().withPath("/api/v1/namespaces/test/resourcequotas/rq1").andReturn(200, rq1).once();
 
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 363a9ffd3d3..b9fb1c75caa 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
@@ -24,41 +24,43 @@ import io.fabric8.kubernetes.api.model.Secret;
 import io.fabric8.kubernetes.api.model.SecretBuilder;
 import io.fabric8.kubernetes.api.model.SecretListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.KubernetesServer;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+@EnableKubernetesMockClient
 public class KubernetesSecretsProducerTest extends KubernetesTestSupport {
 
-    @RegisterExtension
-    public KubernetesServer server = new KubernetesServer();
+    KubernetesMockServer server;
+    NamespacedKubernetesClient client;
 
     @BindToRegistry("kubernetesClient")
     public KubernetesClient getClient() {
-        return server.getClient();
+        return client;
     }
 
     @Test
-    public void listTest() {
+    void listTest() {
         server.expect().withPath("/api/v1/secrets")
                 .andReturn(200, new SecretListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build())
                 .once();
-        List<Secret> result = template.requestBody("direct:list", "", List.class);
+        List<?> result = template.requestBody("direct:list", "", List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void listByLabelsTest() throws Exception {
+    void listByLabelsTest() throws Exception {
         server.expect().withPath("/api/v1/secrets?labelSelector=" + toUrlEncoded("key1=value1,key2=value2"))
                 .andReturn(200, new SecretListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build())
                 .once();
@@ -69,13 +71,13 @@ public class KubernetesSecretsProducerTest extends KubernetesTestSupport {
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SECRETS_LABELS, labels);
         });
 
-        List<Secret> result = ex.getMessage().getBody(List.class);
+        List<?> result = ex.getMessage().getBody(List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void getSecretTest() {
+    void getSecretTest() {
         Secret sc1 = new SecretBuilder().withNewMetadata().withName("sc1").withNamespace("test").and().build();
 
         server.expect().withPath("/api/v1/namespaces/test/secrets/sc1").andReturn(200, sc1).once();
@@ -90,7 +92,7 @@ public class KubernetesSecretsProducerTest extends KubernetesTestSupport {
     }
 
     @Test
-    public void createAndDeleteSecret() {
+    void createAndDeleteSecret() {
         Secret sc1 = new SecretBuilder().withNewMetadata().withName("sc1").withNamespace("test").and().build();
 
         server.expect().withPath("/api/v1/namespaces/test/secrets/sc1").andReturn(200, sc1).once();
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 bd54fff8a57..ee9fb27c586 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
@@ -24,41 +24,43 @@ import io.fabric8.kubernetes.api.model.ServiceAccount;
 import io.fabric8.kubernetes.api.model.ServiceAccountBuilder;
 import io.fabric8.kubernetes.api.model.ServiceAccountListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.KubernetesServer;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+@EnableKubernetesMockClient
 public class KubernetesServiceAccountsProducerTest extends KubernetesTestSupport {
 
-    @RegisterExtension
-    public KubernetesServer server = new KubernetesServer();
+    KubernetesMockServer server;
+    NamespacedKubernetesClient client;
 
     @BindToRegistry("kubernetesClient")
     public KubernetesClient getClient() {
-        return server.getClient();
+        return client;
     }
 
     @Test
-    public void listTest() {
+    void listTest() {
         server.expect().withPath("/api/v1/serviceaccounts")
                 .andReturn(200,
                         new ServiceAccountListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build())
                 .once();
-        List<ServiceAccount> result = template.requestBody("direct:list", "", List.class);
+        List<?> result = template.requestBody("direct:list", "", List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void listByLabelsTest() throws Exception {
+    void listByLabelsTest() throws Exception {
         server.expect().withPath("/api/v1/serviceaccounts?labelSelector=" + toUrlEncoded("key1=value1,key2=value2"))
                 .andReturn(200,
                         new ServiceAccountListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build())
@@ -70,13 +72,13 @@ public class KubernetesServiceAccountsProducerTest extends KubernetesTestSupport
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SERVICE_ACCOUNTS_LABELS, labels);
         });
 
-        List<ServiceAccount> result = ex.getMessage().getBody(List.class);
+        List<?> result = ex.getMessage().getBody(List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void createAndDeleteServiceAccount() {
+    void createAndDeleteServiceAccount() {
         ServiceAccount pod1 = new ServiceAccountBuilder().withNewMetadata().withName("sa1").withNamespace("test").and().build();
 
         server.expect().withPath("/api/v1/namespaces/test/serviceaccounts/sa1").andReturn(200, pod1).once();
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 64163fae41b..85bb4e48f95 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
@@ -25,41 +25,43 @@ import io.fabric8.kubernetes.api.model.Service;
 import io.fabric8.kubernetes.api.model.ServiceBuilder;
 import io.fabric8.kubernetes.api.model.ServiceListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.KubernetesServer;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+@EnableKubernetesMockClient
 public class KubernetesServicesProducerTest extends KubernetesTestSupport {
 
-    @RegisterExtension
-    public KubernetesServer server = new KubernetesServer();
+    KubernetesMockServer server;
+    NamespacedKubernetesClient client;
 
     @BindToRegistry("kubernetesClient")
     public KubernetesClient getClient() {
-        return server.getClient();
+        return client;
     }
 
     @Test
-    public void listTest() {
+    void listTest() {
         server.expect().withPath("/api/v1/services")
                 .andReturn(200, new ServiceListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build())
                 .once();
-        List<Service> result = template.requestBody("direct:list", "", List.class);
+        List<?> result = template.requestBody("direct:list", "", List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void listByLabelsTest() throws Exception {
+    void listByLabelsTest() throws Exception {
         server.expect().withPath("/api/v1/services?labelSelector=" + toUrlEncoded("key1=value1,key2=value2"))
                 .andReturn(200, new PodListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build()).once();
         Exchange ex = template.request("direct:listByLabels", exchange -> {
@@ -69,12 +71,12 @@ public class KubernetesServicesProducerTest extends KubernetesTestSupport {
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SERVICE_LABELS, labels);
         });
 
-        List<Service> result = ex.getMessage().getBody(List.class);
+        List<?> result = ex.getMessage().getBody(List.class);
         assertEquals(3, result.size());
     }
 
     @Test
-    public void getServiceTest() {
+    void getServiceTest() {
         Service se1 = new ServiceBuilder().withNewMetadata().withName("se1").withNamespace("test").and().build();
 
         server.expect().withPath("/api/v1/namespaces/test/services/se1").andReturn(200, se1).once();
@@ -89,7 +91,7 @@ public class KubernetesServicesProducerTest extends KubernetesTestSupport {
     }
 
     @Test
-    public void createAndDeleteService() {
+    void createAndDeleteService() {
         Service se1 = new ServiceBuilder().withNewMetadata().withName("se1").withNamespace("test").and().build();
 
         server.expect().withPath("/api/v1/namespaces/test/services/se1").andReturn(200, se1).once();
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/ConfigMapMountPropertiesFunctionTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/ConfigMapMountPropertiesFunctionTest.java
index 63606f17641..5f74a2f6340 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/ConfigMapMountPropertiesFunctionTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/ConfigMapMountPropertiesFunctionTest.java
@@ -29,25 +29,24 @@ public class ConfigMapMountPropertiesFunctionTest extends KubernetesTestSupport
     @Test
     @Order(1)
     public void configMapMountPropertiesFunction() throws Exception {
-        ConfigMapPropertiesFunction cmf = new ConfigMapPropertiesFunction();
-        cmf.setClientEnabled(false);
-        cmf.setMountPathConfigMaps("src/test/resources/");
-        cmf.setCamelContext(context);
-        cmf.start();
+        try (ConfigMapPropertiesFunction cmf = new ConfigMapPropertiesFunction()) {
+            cmf.setClientEnabled(false);
+            cmf.setMountPathConfigMaps("src/test/resources/");
+            cmf.setCamelContext(context);
+            cmf.start();
 
-        String out = cmf.apply("myconfig/foo");
-        Assertions.assertEquals("456", out);
+            String out = cmf.apply("myconfig/foo");
+            Assertions.assertEquals("456", out);
 
-        out = cmf.apply("myconfig/unknown");
-        Assertions.assertNull(out);
+            out = cmf.apply("myconfig/unknown");
+            Assertions.assertNull(out);
 
-        out = cmf.apply("myconfig/unknown:444");
-        Assertions.assertEquals("444", out);
+            out = cmf.apply("myconfig/unknown:444");
+            Assertions.assertEquals("444", out);
 
-        out = cmf.apply("myconfig/bar");
-        Assertions.assertEquals("Jacks Bar", out);
-
-        cmf.stop();
+            out = cmf.apply("myconfig/bar");
+            Assertions.assertEquals("Jacks Bar", out);
+        }
     }
 
 }
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/ConfigMapPropertiesFunctionRouteTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/ConfigMapPropertiesFunctionRouteTest.java
index 9dd34684da5..764fb073cab 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/ConfigMapPropertiesFunctionRouteTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/ConfigMapPropertiesFunctionRouteTest.java
@@ -21,8 +21,8 @@ import java.util.Map;
 import io.fabric8.kubernetes.api.model.ConfigMap;
 import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
 import io.fabric8.kubernetes.client.ConfigBuilder;
-import io.fabric8.kubernetes.client.DefaultKubernetesClient;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.KubernetesClientBuilder;
 import org.apache.camel.CamelContext;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
@@ -64,7 +64,7 @@ public class ConfigMapPropertiesFunctionRouteTest extends KubernetesTestSupport
         ConfigBuilder builder = new ConfigBuilder();
         builder.withOauthToken(authToken);
         builder.withMasterUrl(host);
-        client = new DefaultKubernetesClient(builder.build());
+        client = new KubernetesClientBuilder().withConfig(builder.build()).build();
         context.getRegistry().bind("KubernetesClient", client);
 
         Map<String, String> data = Map.of("foo", "123", "bar", "Moes Bar");
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/ConfigMapPropertiesFunctionTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/ConfigMapPropertiesFunctionTest.java
index bf687d3716a..dab7c355f08 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/ConfigMapPropertiesFunctionTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/ConfigMapPropertiesFunctionTest.java
@@ -21,8 +21,8 @@ import java.util.Map;
 import io.fabric8.kubernetes.api.model.ConfigMap;
 import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
 import io.fabric8.kubernetes.client.ConfigBuilder;
-import io.fabric8.kubernetes.client.DefaultKubernetesClient;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.KubernetesClientBuilder;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.MethodOrderer;
@@ -47,14 +47,13 @@ public class ConfigMapPropertiesFunctionTest extends KubernetesTestSupport {
         builder.withOauthToken(authToken);
         builder.withMasterUrl(host);
 
-        KubernetesClient client = new DefaultKubernetesClient(builder.build());
+        KubernetesClient client = new KubernetesClientBuilder().withConfig(builder.build()).build();
 
         Map<String, String> data = Map.of("foo", "123", "bar", "Moes Bar");
         ConfigMap cm = new ConfigMapBuilder().editOrNewMetadata().withName("myconfig").endMetadata().withData(data).build();
         client.resource(cm).createOrReplace();
 
-        try {
-            ConfigMapPropertiesFunction cmf = new ConfigMapPropertiesFunction();
+        try (ConfigMapPropertiesFunction cmf = new ConfigMapPropertiesFunction()) {
             cmf.setClient(client);
             cmf.setCamelContext(context);
             cmf.start();
@@ -70,8 +69,6 @@ public class ConfigMapPropertiesFunctionTest extends KubernetesTestSupport {
 
             out = cmf.apply("myconfig/bar");
             Assertions.assertEquals("Moes Bar", out);
-
-            cmf.stop();
         } finally {
             client.resource(cm).delete();
         }
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/SecretMountPropertiesFunctionTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/SecretMountPropertiesFunctionTest.java
index fa6e88f1c75..a60fbe77874 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/SecretMountPropertiesFunctionTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/SecretMountPropertiesFunctionTest.java
@@ -29,25 +29,24 @@ public class SecretMountPropertiesFunctionTest extends KubernetesTestSupport {
     @Test
     @Order(1)
     public void secretMountPropertiesFunction() throws Exception {
-        SecretPropertiesFunction cmf = new SecretPropertiesFunction();
-        cmf.setMountPathSecrets("src/test/resources/");
-        cmf.setClientEnabled(false);
-        cmf.setCamelContext(context);
-        cmf.start();
+        try (SecretPropertiesFunction cmf = new SecretPropertiesFunction()) {
+            cmf.setMountPathSecrets("src/test/resources/");
+            cmf.setClientEnabled(false);
+            cmf.setCamelContext(context);
+            cmf.start();
 
-        String out = cmf.apply("mysecret/myuser");
-        Assertions.assertEquals("donald", out);
+            String out = cmf.apply("mysecret/myuser");
+            Assertions.assertEquals("donald", out);
 
-        out = cmf.apply("mysecret/unknown");
-        Assertions.assertNull(out);
+            out = cmf.apply("mysecret/unknown");
+            Assertions.assertNull(out);
 
-        out = cmf.apply("mysecret/unknown:444");
-        Assertions.assertEquals("444", out);
+            out = cmf.apply("mysecret/unknown:444");
+            Assertions.assertEquals("444", out);
 
-        out = cmf.apply("mysecret/mypass");
-        Assertions.assertEquals("seCre!t", out);
-
-        cmf.stop();
+            out = cmf.apply("mysecret/mypass");
+            Assertions.assertEquals("seCre!t", out);
+        }
     }
 
 }
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/SecretPropertiesFunctionRouteTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/SecretPropertiesFunctionRouteTest.java
index d9f734f581b..d5c4c6872f6 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/SecretPropertiesFunctionRouteTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/SecretPropertiesFunctionRouteTest.java
@@ -23,8 +23,8 @@ import java.util.Map;
 import io.fabric8.kubernetes.api.model.Secret;
 import io.fabric8.kubernetes.api.model.SecretBuilder;
 import io.fabric8.kubernetes.client.ConfigBuilder;
-import io.fabric8.kubernetes.client.DefaultKubernetesClient;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.KubernetesClientBuilder;
 import org.apache.camel.CamelContext;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
@@ -66,7 +66,7 @@ public class SecretPropertiesFunctionRouteTest extends KubernetesTestSupport {
         ConfigBuilder builder = new ConfigBuilder();
         builder.withOauthToken(authToken);
         builder.withMasterUrl(host);
-        client = new DefaultKubernetesClient(builder.build());
+        client = new KubernetesClientBuilder().withConfig(builder.build()).build();
         context.getRegistry().bind("KubernetesClient", client);
 
         Map<String, String> data
@@ -93,7 +93,7 @@ public class SecretPropertiesFunctionRouteTest extends KubernetesTestSupport {
 
     @Test
     @Order(1)
-    public void secretPropertiesFunction() throws Exception {
+    public void secretPropertiesFunction() {
         String out = template.requestBody("direct:start", null, String.class);
         Assertions.assertEquals("Connect with scott:tiger", out);
     }
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/SecretPropertiesFunctionTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/SecretPropertiesFunctionTest.java
index 49db700b436..669690b0e70 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/SecretPropertiesFunctionTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/SecretPropertiesFunctionTest.java
@@ -23,8 +23,8 @@ import java.util.Map;
 import io.fabric8.kubernetes.api.model.Secret;
 import io.fabric8.kubernetes.api.model.SecretBuilder;
 import io.fabric8.kubernetes.client.ConfigBuilder;
-import io.fabric8.kubernetes.client.DefaultKubernetesClient;
 import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.KubernetesClientBuilder;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.MethodOrderer;
@@ -49,7 +49,7 @@ public class SecretPropertiesFunctionTest extends KubernetesTestSupport {
         builder.withOauthToken(authToken);
         builder.withMasterUrl(host);
 
-        KubernetesClient client = new DefaultKubernetesClient(builder.build());
+        KubernetesClient client = new KubernetesClientBuilder().withConfig(builder.build()).build();
 
         Map<String, String> data
                 = Map.of("myuser", Base64.getEncoder().encodeToString("scott".getBytes(StandardCharsets.UTF_8)),
@@ -57,8 +57,7 @@ public class SecretPropertiesFunctionTest extends KubernetesTestSupport {
         Secret sec = new SecretBuilder().editOrNewMetadata().withName("mysecret").endMetadata().withData(data).build();
         client.resource(sec).createOrReplace();
 
-        try {
-            SecretPropertiesFunction cmf = new SecretPropertiesFunction();
+        try (SecretPropertiesFunction cmf = new SecretPropertiesFunction()) {
             cmf.setClient(client);
             cmf.setCamelContext(context);
             cmf.start();
@@ -74,8 +73,6 @@ public class SecretPropertiesFunctionTest extends KubernetesTestSupport {
 
             out = cmf.apply("mysecret/mypass");
             Assertions.assertEquals("tiger", out);
-
-            cmf.stop();
         } finally {
             client.resource(sec).delete();
         }
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftBuildConfigsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftBuildConfigsProducerTest.java
index 5861b4b38cc..2abd1841687 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftBuildConfigsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftBuildConfigsProducerTest.java
@@ -19,25 +19,25 @@ package org.apache.camel.component.openshift.producer;
 import java.util.List;
 
 import io.fabric8.kubernetes.api.model.APIGroupListBuilder;
-import io.fabric8.openshift.api.model.BuildConfig;
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import io.fabric8.openshift.api.model.BuildConfigListBuilder;
-import io.fabric8.openshift.client.NamespacedOpenShiftClient;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.OpenShiftServer;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
+@EnableKubernetesMockClient
 public class OpenshiftBuildConfigsProducerTest extends KubernetesTestSupport {
 
-    @RegisterExtension
-    public OpenShiftServer server = new OpenShiftServer();
+    KubernetesMockServer server;
+    NamespacedKubernetesClient client;
 
     @BindToRegistry("client")
-    public NamespacedOpenShiftClient loadClient() {
+    public NamespacedKubernetesClient loadClient() {
         server.expect().withPath("/apis/build.openshift.io/v1/namespaces/test/buildconfigs")
                 .andReturn(200, new BuildConfigListBuilder().build()).once();
 
@@ -55,13 +55,12 @@ public class OpenshiftBuildConfigsProducerTest extends KubernetesTestSupport {
                 .andReturn(200, new BuildConfigListBuilder().addNewItem().and().addNewItem().and().addNewItem().and().build())
                 .once();
 
-        return server.getOpenshiftClient();
+        return client;
     }
 
     @Test
-    public void listTest() {
-        List<BuildConfig> result = template.requestBody("direct:list", "", List.class);
-
+    void listTest() {
+        List<?> result = template.requestBody("direct:list", "", List.class);
         assertEquals(3, result.size());
     }
 
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftBuildsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftBuildsProducerTest.java
index 8c15d2e3b8f..3340714d140 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftBuildsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftBuildsProducerTest.java
@@ -21,28 +21,27 @@ import java.util.List;
 import java.util.Map;
 
 import io.fabric8.kubernetes.api.model.APIGroupListBuilder;
-import io.fabric8.openshift.api.model.Build;
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import io.fabric8.openshift.api.model.BuildListBuilder;
-import io.fabric8.openshift.client.OpenShiftClient;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.OpenShiftServer;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
+@EnableKubernetesMockClient
 public class OpenshiftBuildsProducerTest extends KubernetesTestSupport {
 
-    @RegisterExtension
-    public OpenShiftServer server = new OpenShiftServer();
+    KubernetesMockServer server;
+    NamespacedKubernetesClient client;
 
     @BindToRegistry("client")
-    public OpenShiftClient loadClient() throws Exception {
+    public NamespacedKubernetesClient loadClient() throws Exception {
         server.expect().withPath("/apis/build.openshift.io/v1/builds")
                 .andReturn(200, new BuildListBuilder().addNewItem().and().addNewItem().and().build()).once();
         server.expect().withPath("/apis/build.openshift.io/v1/builds?labelSelector=" + toUrlEncoded("key1=value1,key2=value2"))
@@ -53,30 +52,26 @@ public class OpenshiftBuildsProducerTest extends KubernetesTestSupport {
                                 .addNewGroup()
                                 .withApiVersion("v1").withName("security.openshift.io").endGroup().build())
                 .always();
-        return server.getOpenshiftClient();
+        return client;
     }
 
     @Test
-    public void listTest() {
-        List<Build> result = template.requestBody("direct:list", "", List.class);
+    void listTest() {
+        List<?> result = template.requestBody("direct:list", "", List.class);
 
         assertEquals(2, result.size());
     }
 
     @Test
-    public void listByLabelsTest() {
-        Exchange ex = template.request("direct:listByLabels", new Processor() {
-
-            @Override
-            public void process(Exchange exchange) {
-                Map<String, String> labels = new HashMap<>();
-                labels.put("key1", "value1");
-                labels.put("key2", "value2");
-                exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_BUILDS_LABELS, labels);
-            }
+    void listByLabelsTest() {
+        Exchange ex = template.request("direct:listByLabels", exchange -> {
+            Map<String, String> labels = new HashMap<>();
+            labels.put("key1", "value1");
+            labels.put("key2", "value2");
+            exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_BUILDS_LABELS, labels);
         });
 
-        List<Build> result = ex.getMessage().getBody(List.class);
+        List<?> result = ex.getMessage().getBody(List.class);
 
         assertEquals(2, result.size());
     }
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 1f874a6856c..b8b6106ea43 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
@@ -20,43 +20,44 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import io.fabric8.kubernetes.client.NamespacedKubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import io.fabric8.openshift.api.model.DeploymentConfig;
 import io.fabric8.openshift.api.model.DeploymentConfigBuilder;
 import io.fabric8.openshift.api.model.DeploymentConfigListBuilder;
-import io.fabric8.openshift.client.OpenShiftClient;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.OpenShiftServer;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+@EnableKubernetesMockClient
 public class OpenshiftDeploymentConfigsProducerTest extends KubernetesTestSupport {
 
-    @RegisterExtension
-    public OpenShiftServer server = new OpenShiftServer();
+    KubernetesMockServer server;
+    NamespacedKubernetesClient client;
 
     @BindToRegistry("kubernetesClient")
-    public OpenShiftClient getClient() {
-        return server.getOpenshiftClient();
+    public NamespacedKubernetesClient getClient() {
+        return client;
     }
 
     @Test
-    public void listTest() {
+    void listTest() {
         server.expect().withPath("/apis/apps.openshift.io/v1/namespaces/test/deploymentconfigs")
                 .andReturn(200, new DeploymentConfigListBuilder().addNewItem().and().build()).once();
-        List<DeploymentConfig> result = template.requestBody("direct:list", "", List.class);
+        List<?> result = template.requestBody("direct:list", "", List.class);
 
         assertEquals(1, result.size());
     }
 
     @Test
-    public void listByLabelsTest() throws Exception {
+    void listByLabelsTest() throws Exception {
         server.expect()
                 .withPath("/apis/apps.openshift.io/v1/namespaces/test/deploymentconfigs?labelSelector="
                           + toUrlEncoded("key1=value1,key2=value2"))
@@ -70,13 +71,13 @@ public class OpenshiftDeploymentConfigsProducerTest extends KubernetesTestSuppor
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_DEPLOYMENTS_LABELS, labels);
         });
 
-        List<DeploymentConfig> result = ex.getMessage().getBody(List.class);
+        List<?> result = ex.getMessage().getBody(List.class);
 
         assertEquals(3, result.size());
     }
 
     @Test
-    public void createAndDeleteDeploymentConfig() {
+    void createAndDeleteDeploymentConfig() {
         DeploymentConfig de1 = new DeploymentConfigBuilder().withNewMetadata().withNamespace("test").withName("dc1")
                 .withResourceVersion("1").withGeneration(2L).endMetadata().withNewSpec()
                 .withReplicas(0).endSpec().withNewStatus().withReplicas(1).withObservedGeneration(1L).endStatus().build();
@@ -100,7 +101,7 @@ public class OpenshiftDeploymentConfigsProducerTest extends KubernetesTestSuppor
     }
 
     @Test
-    public void createScaleAndDeleteDeploymentConfig() {
+    void createScaleAndDeleteDeploymentConfig() {
         server.expect().withPath("/apis/apps.openshift.io/v1/namespaces/test/deploymentconfigs/dc1")
                 .andReturn(200, new DeploymentConfigBuilder().withNewMetadata().withName("dc1")
                         .withResourceVersion("1").endMetadata().withNewSpec().withReplicas(5).endSpec().withNewStatus()
@@ -119,7 +120,6 @@ public class OpenshiftDeploymentConfigsProducerTest extends KubernetesTestSuppor
             exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_DEPLOYMENT_REPLICAS, 1);
         });
 
-        // Thread.sleep(3000);
         int replicas = ex.getMessage().getBody(Integer.class);
 
         assertEquals(5, replicas);


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

Posted by nf...@apache.org.
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")