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

pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit e117f51ad262c6c46a40023ab3ca1601863da066
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Fri Jun 7 15:36:42 2024 +0200

    fix(install): simplify kustomize procedure
---
 e2e/install/kustomize/operator_test.go             | 171 --------
 e2e/install/kustomize/setup_test.go                | 246 ++++++++---
 e2e/install/kustomize/uninstall_test.go            | 126 ------
 e2e/install/upgrade/cli_upgrade_test.go            |   3 -
 e2e/install/upgrade/kustomize_upgrade_test.go      | 164 ++++++++
 install/Makefile                                   | 465 ---------------------
 install/base/config                                |   1 +
 install/{setup => base}/kustomization.yaml         |   4 +-
 install/config                                     |   1 -
 install/operator/kustomization.yaml                |  50 ---
 .../kubernetes/descoped/integration-platform.yaml  |  25 +-
 .../kubernetes/descoped}/kustomization.yaml        |  11 +-
 .../descoped}/patch-watch-namespace-global.yaml    |   2 +-
 .../namespaced/integration-platform.yaml           |  25 +-
 .../kubernetes/namespaced}/kustomization.yaml      |  23 +-
 .../patch-image-pull-policy-always.yaml            |   0
 .../patch-install-default-kamelets.yaml            |   0
 .../kubernetes/namespaced}/patch-log-level.yaml    |   0
 .../namespaced}/patch-node-selector.yaml           |   0
 .../kubernetes/namespaced}/patch-ports.yaml        |   0
 .../namespaced}/patch-resource-requirements.yaml   |   0
 .../kubernetes/namespaced}/patch-toleration.yaml   |   0
 install/script/Makefile                            |   1 -
 install/script/check_crd_api_support.sh            |   1 -
 install/script/check_platform.sh                   |   1 -
 install/script/help.sh                             |  30 --
 install/setup-cluster/kustomization.yaml           |  22 -
 pkg/resources/config/manager/kustomization.yaml    |   9 -
 pkg/resources/config/manifests/kustomization.yaml  |   1 -
 .../config/manifests/patch-delete-pvc.yaml         |  28 --
 .../operator-cluster-role-binding-events.yaml      |   1 -
 .../operator-cluster-role-binding-keda.yaml        |   1 -
 .../operator-cluster-role-binding-knative.yaml     |   1 -
 .../operator-cluster-role-binding-leases.yaml      |   1 -
 .../operator-cluster-role-binding-podmonitors.yaml |   1 -
 .../operator-cluster-role-binding-strimzi.yaml     |   1 -
 .../descoped/operator-cluster-role-binding.yaml    |   1 -
 37 files changed, 423 insertions(+), 994 deletions(-)

diff --git a/e2e/install/kustomize/operator_test.go 
b/e2e/install/kustomize/operator_test.go
deleted file mode 100644
index c8d686241..000000000
--- a/e2e/install/kustomize/operator_test.go
+++ /dev/null
@@ -1,171 +0,0 @@
-//go:build integration
-// +build integration
-
-// To enable compilation of this file in Goland, go to "Settings -> Go -> 
Vendoring & Build Tags -> Custom Tags" and add "integration"
-
-/*
-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 kustomize
-
-import (
-       "context"
-       "fmt"
-       "os"
-       "testing"
-
-       corev1 "k8s.io/api/core/v1"
-
-       . "github.com/apache/camel-k/v2/e2e/support"
-       testutil "github.com/apache/camel-k/v2/e2e/support/util"
-       v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1"
-       "github.com/apache/camel-k/v2/pkg/util/kubernetes"
-
-       . "github.com/onsi/gomega"
-)
-
-func TestOperatorBasic(t *testing.T) {
-       makeDir := testutil.MakeTempCopyDir(t, "../../../install")
-       os.Setenv("CAMEL_K_TEST_MAKE_DIR", makeDir)
-
-       ctx := TestContext()
-
-       // Ensure no CRDs are already installed
-       g := NewWithT(t)
-       g.Expect(UninstallAll(t, ctx)).To(Succeed())
-
-       // Return the cluster to previous state
-       defer Cleanup(t, ctx)
-
-       WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
-               namespaceArg := fmt.Sprintf("NAMESPACE=%s", ns)
-               ExpectExecSucceed(t, g, Make(t, "setup-cluster", namespaceArg))
-               ExpectExecSucceed(t, g, Make(t, "setup", namespaceArg))
-               // Skip default kamelets installation for faster test runs
-               ExpectExecSucceed(t, g, Make(t, "operator",
-                       namespaceArg,
-                       "INSTALL_DEFAULT_KAMELETS=false"))
-
-               // Refresh the test client to account for the newly installed 
CRDs
-               RefreshClient(t)
-
-               g.Eventually(OperatorPod(t, ctx, ns)).ShouldNot(BeNil())
-               g.Eventually(OperatorPodPhase(t, ctx, ns), 
TestTimeoutMedium).Should(Equal(corev1.PodRunning))
-
-               // Check if restricted security context has been applyed
-               operatorPod := OperatorPod(t, ctx, ns)()
-               
g.Expect(operatorPod.Spec.Containers[0].SecurityContext.RunAsNonRoot).To(Equal(kubernetes.DefaultOperatorSecurityContext().RunAsNonRoot))
-               
g.Expect(operatorPod.Spec.Containers[0].SecurityContext.Capabilities).To(Equal(kubernetes.DefaultOperatorSecurityContext().Capabilities))
-               
g.Expect(operatorPod.Spec.Containers[0].SecurityContext.SeccompProfile).To(Equal(kubernetes.DefaultOperatorSecurityContext().SeccompProfile))
-               
g.Expect(operatorPod.Spec.Containers[0].SecurityContext.AllowPrivilegeEscalation).To(Equal(kubernetes.DefaultOperatorSecurityContext().AllowPrivilegeEscalation))
-
-               g.Eventually(Platform(t, ctx, ns)).ShouldNot(BeNil())
-               registry := os.Getenv("KIND_REGISTRY")
-               if registry != "" {
-                       g.Eventually(PlatformHas(t, ctx, ns, func(pl 
*v1.IntegrationPlatform) bool {
-                               return pl.Status.Build.Registry.Address == 
registry
-                       }), TestTimeoutShort).Should(BeTrue())
-               }
-
-       })
-}
-
-func TestOperatorKustomizeAlternativeImage(t *testing.T) {
-       makeDir := testutil.MakeTempCopyDir(t, "../../../install")
-       os.Setenv("CAMEL_K_TEST_MAKE_DIR", makeDir)
-
-       ctx := TestContext()
-
-       // Ensure no CRDs are already installed
-       g := NewWithT(t)
-       g.Expect(UninstallAll(t, ctx)).To(Succeed())
-
-       // Return the cluster to previous state
-       defer Cleanup(t, ctx)
-
-       WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
-               namespaceArg := fmt.Sprintf("NAMESPACE=%s", ns)
-               ExpectExecSucceed(t, g, Make(t, "setup-cluster", namespaceArg))
-               ExpectExecSucceed(t, g, Make(t, "setup", namespaceArg))
-
-               // Skip default kamelets installation for faster test runs
-               newImage := "quay.io/kameltest/kamel-operator"
-               newTag := "1.1.1"
-               ExpectExecSucceed(t, g, Make(t, "operator",
-                       fmt.Sprintf("CUSTOM_IMAGE=%s", newImage),
-                       fmt.Sprintf("CUSTOM_VERSION=%s", newTag),
-                       namespaceArg,
-                       "INSTALL_DEFAULT_KAMELETS=false"))
-
-               // Refresh the test client to account for the newly installed 
CRDs
-               RefreshClient(t)
-
-               g.Eventually(OperatorImage(t, ctx, 
ns)).Should(Equal(fmt.Sprintf("%s:%s", newImage, newTag)))
-       })
-}
-
-func TestOperatorKustomizeGlobal(t *testing.T) {
-       makeDir := testutil.MakeTempCopyDir(t, "../../../install")
-       os.Setenv("CAMEL_K_TEST_MAKE_DIR", makeDir)
-
-       ctx := TestContext()
-
-       // Ensure no CRDs are already installed
-       g := NewWithT(t)
-       g.Expect(UninstallAll(t, ctx)).To(Succeed())
-
-       // Return the cluster to previous state
-       defer Cleanup(t, ctx)
-
-       WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
-               namespaceArg := fmt.Sprintf("NAMESPACE=%s", ns)
-               ExpectExecSucceed(t, g, Make(t, "setup-cluster", namespaceArg))
-               ExpectExecSucceed(t, g, Make(t, "setup", namespaceArg, 
"GLOBAL=true"))
-
-               // Skip default kamelets installation for faster test runs
-               ExpectExecSucceed(t, g, Make(t, "operator",
-                       namespaceArg,
-                       "GLOBAL=true",
-                       "INSTALL_DEFAULT_KAMELETS=false"))
-
-               // Refresh the test client to account for the newly installed 
CRDs
-               RefreshClient(t)
-
-               podFunc := OperatorPod(t, ctx, ns)
-               g.Eventually(podFunc).ShouldNot(BeNil())
-               g.Eventually(OperatorPodPhase(t, ctx, ns), 
TestTimeoutMedium).Should(Equal(corev1.PodRunning))
-               pod := podFunc()
-
-               containers := pod.Spec.Containers
-               g.Expect(containers).NotTo(BeEmpty())
-
-               envvars := containers[0].Env
-               g.Expect(envvars).NotTo(BeEmpty())
-
-               found := false
-               for _, v := range envvars {
-                       if v.Name == "WATCH_NAMESPACE" {
-                               g.Expect(v.Value).To(Equal("\"\""))
-                               found = true
-                               break
-                       }
-               }
-               g.Expect(found).To(BeTrue())
-
-               g.Eventually(Platform(t, ctx, ns)).ShouldNot(BeNil())
-       })
-}
diff --git a/e2e/install/kustomize/setup_test.go 
b/e2e/install/kustomize/setup_test.go
index 79a2d1b72..90db17876 100644
--- a/e2e/install/kustomize/setup_test.go
+++ b/e2e/install/kustomize/setup_test.go
@@ -26,73 +26,219 @@ import (
        "context"
        "fmt"
        "os"
+       "os/exec"
        "testing"
 
+       corev1 "k8s.io/api/core/v1"
+
        . "github.com/apache/camel-k/v2/e2e/support"
        testutil "github.com/apache/camel-k/v2/e2e/support/util"
-       "github.com/apache/camel-k/v2/pkg/util/defaults"
+       v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1"
+       "github.com/apache/camel-k/v2/pkg/util/kubernetes"
+
        . "github.com/onsi/gomega"
 )
 
-func TestSetupKustomizeBasic(t *testing.T) {
+func TestKustomizeNamespaced(t *testing.T) {
+       // TODO, likely we need to adjust this test with a Kustomize overlay 
for Openshift
+       // which would not require the registry setting
+       registry := os.Getenv("KIND_REGISTRY")
+       kustomizeDir := testutil.MakeTempCopyDir(t, "../../../install")
        ctx := TestContext()
        g := NewWithT(t)
-       makeDir := testutil.MakeTempCopyDir(t, "../../../install")
-       os.Setenv("CAMEL_K_TEST_MAKE_DIR", makeDir)
-
-       // Ensure no CRDs are already installed
-       g.Expect(UninstallAll(t, ctx)).To(Succeed())
-       g.Eventually(CRDs(t)).Should(HaveLen(0))
-
-       // Return the cluster to previous state
-       defer Cleanup(t, ctx)
+       g.Expect(registry).NotTo(Equal(""))
+       // Ensure no CRDs are already installed: we can skip to check as it may 
fail
+       // if no CRDs was previously installed.
+       UninstallAll(t, ctx)
 
        WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
-               namespaceArg := fmt.Sprintf("NAMESPACE=%s", ns)
-               ExpectExecSucceed(t, g, Make(t, "setup-cluster", namespaceArg))
-               
g.Eventually(CRDs(t)).Should(HaveLen(GetExpectedCRDs(defaults.Version)))
-
-               ExpectExecSucceed(t, g, Make(t, "setup", namespaceArg))
-
-               kpRoles := ExpectedKubePromoteRoles
-               opRoles := kpRoles + ExpectedOSPromoteRoles
-               g.Eventually(Role(t, ctx, ns)).Should(Or(HaveLen(kpRoles), 
HaveLen(opRoles)))
-
-               kcRoles := ExpectedKubeClusterRoles
-               ocRoles := kcRoles + ExpectedOSClusterRoles
-               g.Eventually(ClusterRole(t, ctx)).Should(Or(HaveLen(kcRoles), 
HaveLen(ocRoles)))
-
-               // Tidy up to ensure next test works
-               g.Expect(Kamel(t, ctx, "uninstall", "-n", 
ns).Execute()).To(Succeed())
+               // We must change a few values in the Kustomize config
+               ExpectExecSucceed(t, g,
+                       exec.Command(
+                               "sed",
+                               "-i",
+                               fmt.Sprintf("s/namespace: .*/namespace: %s/", 
ns),
+                               
fmt.Sprintf("%s/overlays/kubernetes/namespaced/kustomization.yaml", 
kustomizeDir),
+                       ))
+               ExpectExecSucceed(t, g,
+                       exec.Command(
+                               "sed",
+                               "-i",
+                               fmt.Sprintf("s/address: .*/address: %s/", 
registry),
+                               
fmt.Sprintf("%s/overlays/kubernetes/namespaced/integration-platform.yaml", 
kustomizeDir),
+                       ))
+
+               ExpectExecSucceed(t, g, Kubectl(
+                       "apply",
+                       "-k",
+                       fmt.Sprintf("%s/overlays/kubernetes/namespaced", 
kustomizeDir),
+                       "--server-side",
+               ))
+               // Refresh the test client to account for the newly installed 
CRDs
+               RefreshClient(t)
+               g.Eventually(OperatorPod(t, ctx, ns)).ShouldNot(BeNil())
+               g.Eventually(OperatorPodPhase(t, ctx, ns), 
TestTimeoutMedium).Should(Equal(corev1.PodRunning))
+               // Check if restricted security context has been applied
+               operatorPod := OperatorPod(t, ctx, ns)()
+               
g.Expect(operatorPod.Spec.Containers[0].SecurityContext.RunAsNonRoot).To(
+                       
Equal(kubernetes.DefaultOperatorSecurityContext().RunAsNonRoot),
+               )
+               
g.Expect(operatorPod.Spec.Containers[0].SecurityContext.Capabilities).To(
+                       
Equal(kubernetes.DefaultOperatorSecurityContext().Capabilities),
+               )
+               
g.Expect(operatorPod.Spec.Containers[0].SecurityContext.SeccompProfile).To(
+                       
Equal(kubernetes.DefaultOperatorSecurityContext().SeccompProfile),
+               )
+               
g.Expect(operatorPod.Spec.Containers[0].SecurityContext.AllowPrivilegeEscalation).To(
+                       
Equal(kubernetes.DefaultOperatorSecurityContext().AllowPrivilegeEscalation),
+               )
+               g.Eventually(Platform(t, ctx, ns)).ShouldNot(BeNil())
+               g.Eventually(PlatformHas(t, ctx, ns, func(pl 
*v1.IntegrationPlatform) bool {
+                       return pl.Status.Build.Registry.Address == registry
+               }), TestTimeoutShort).Should(BeTrue())
+
+               // Test a simple integration is running
+               g.Expect(KamelRun(t, ctx, ns, 
"files/yaml.yaml").Execute()).To(Succeed())
+               g.Eventually(IntegrationPodPhase(t, ctx, ns, "yaml"), 
TestTimeoutLong).Should(Equal(corev1.PodRunning))
+               g.Eventually(IntegrationConditionStatus(t, ctx, ns, "yaml", 
v1.IntegrationConditionReady), 
TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
+               g.Eventually(IntegrationLogs(t, ctx, ns, "yaml"), 
TestTimeoutShort).Should(ContainSubstring("Magicstring!"))
+
+               // Test operator only uninstall
+               ExpectExecSucceed(t, g, Kubectl(
+                       "delete",
+                       
"deploy,configmap,secret,sa,rolebindings,clusterrolebindings,roles,clusterroles",
+                       "-l",
+                       "app=camel-k",
+                       "-n",
+                       ns,
+               ))
+               g.Eventually(OperatorPod(t, ctx, ns)).Should(BeNil())
+               g.Eventually(Integration(t, ctx, ns, "yaml"), 
TestTimeoutShort).ShouldNot(BeNil())
+               g.Eventually(IntegrationConditionStatus(t, ctx, ns, "yaml", 
v1.IntegrationConditionReady), 
TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
+
+               // Test CRD uninstall (will remove Integrations as well)
+               ExpectExecSucceed(t, g, Kubectl(
+                       "delete",
+                       "crd",
+                       "-l",
+                       "app=camel-k",
+                       "-n",
+                       ns,
+               ))
+               g.Eventually(OperatorPod(t, ctx, ns)).Should(BeNil())
+               g.Eventually(Integration(t, ctx, ns, "yaml"), 
TestTimeoutShort).Should(BeNil())
+               g.Eventually(CRDs(t)).Should(BeNil())
        })
-
 }
 
-func TestSetupKustomizeGlobal(t *testing.T) {
-       makeDir := testutil.MakeTempCopyDir(t, "../../../install")
-       os.Setenv("CAMEL_K_TEST_MAKE_DIR", makeDir)
-
+func TestKustomizeDescoped(t *testing.T) {
+       // TODO, likely we need to adjust this test with a Kustomize overlay 
for Openshift
+       // which would not require the registry setting
+       registry := os.Getenv("KIND_REGISTRY")
+       kustomizeDir := testutil.MakeTempCopyDir(t, "../../../install")
        ctx := TestContext()
-
-       // Ensure no CRDs are already installed
        g := NewWithT(t)
-       g.Expect(UninstallAll(t, ctx)).To(Succeed())
-       g.Eventually(CRDs(t)).Should(HaveLen(0))
-
-       // Return the cluster to previous state
-       defer Cleanup(t, ctx)
+       g.Expect(registry).NotTo(Equal(""))
+       // Ensure no CRDs are already installed: we can skip to check as it may 
fail
+       // if no CRDs was previously installed.
+       UninstallAll(t, ctx)
 
        WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
-               namespaceArg := fmt.Sprintf("NAMESPACE=%s", ns)
-               ExpectExecSucceed(t, g, Make(t, "setup-cluster", namespaceArg))
-               
g.Eventually(CRDs(t)).Should(HaveLen(GetExpectedCRDs(defaults.Version)))
-
-               ExpectExecSucceed(t, g, Make(t, "setup", "GLOBAL=true", 
namespaceArg))
-
-               g.Eventually(Role(t, ctx, ns)).Should(HaveLen(0))
-
-               kcpRoles := ExpectedKubeClusterRoles + ExpectedKubePromoteRoles
-               ocpRoles := kcpRoles + ExpectedOSClusterRoles + 
ExpectedOSPromoteRoles
-               g.Eventually(ClusterRole(t, ctx)).Should(Or(HaveLen(kcpRoles), 
HaveLen(ocpRoles)))
+               // We must change a few values in the Kustomize config
+               ExpectExecSucceed(t, g,
+                       exec.Command(
+                               "sed",
+                               "-i",
+                               fmt.Sprintf("s/namespace: .*/namespace: %s/", 
ns),
+                               
fmt.Sprintf("%s/overlays/kubernetes/descoped/kustomization.yaml", kustomizeDir),
+                       ))
+               ExpectExecSucceed(t, g,
+                       exec.Command(
+                               "sed",
+                               "-i",
+                               fmt.Sprintf("s/address: .*/address: %s/", 
registry),
+                               
fmt.Sprintf("%s/overlays/kubernetes/descoped/integration-platform.yaml", 
kustomizeDir),
+                       ))
+
+               ExpectExecSucceed(t, g, Kubectl(
+                       "apply",
+                       "-k",
+                       fmt.Sprintf("%s/overlays/kubernetes/descoped", 
kustomizeDir),
+                       "--server-side",
+               ))
+
+               // Refresh the test client to account for the newly installed 
CRDs
+               RefreshClient(t)
+
+               podFunc := OperatorPod(t, ctx, ns)
+               g.Eventually(podFunc).ShouldNot(BeNil())
+               g.Eventually(OperatorPodPhase(t, ctx, ns), 
TestTimeoutMedium).Should(Equal(corev1.PodRunning))
+               pod := podFunc()
+
+               containers := pod.Spec.Containers
+               g.Expect(containers).NotTo(BeEmpty())
+
+               envvars := containers[0].Env
+               g.Expect(envvars).NotTo(BeEmpty())
+
+               found := false
+               for _, v := range envvars {
+                       if v.Name == "WATCH_NAMESPACE" {
+                               g.Expect(v.Value).To(Equal(""))
+                               found = true
+                               break
+                       }
+               }
+               g.Expect(found).To(BeTrue())
+               // Check if restricted security context has been applied
+               operatorPod := OperatorPod(t, ctx, ns)()
+               
g.Expect(operatorPod.Spec.Containers[0].SecurityContext.RunAsNonRoot).To(
+                       
Equal(kubernetes.DefaultOperatorSecurityContext().RunAsNonRoot),
+               )
+               
g.Expect(operatorPod.Spec.Containers[0].SecurityContext.Capabilities).To(
+                       
Equal(kubernetes.DefaultOperatorSecurityContext().Capabilities),
+               )
+               
g.Expect(operatorPod.Spec.Containers[0].SecurityContext.SeccompProfile).To(
+                       
Equal(kubernetes.DefaultOperatorSecurityContext().SeccompProfile),
+               )
+               
g.Expect(operatorPod.Spec.Containers[0].SecurityContext.AllowPrivilegeEscalation).To(
+                       
Equal(kubernetes.DefaultOperatorSecurityContext().AllowPrivilegeEscalation),
+               )
+               g.Eventually(Platform(t, ctx, ns)).ShouldNot(BeNil())
+
+               // We need a different namespace from the global operator
+               WithNewTestNamespace(t, func(ctx context.Context, g *WithT, 
nsIntegration string) {
+                       // Test a simple integration is running
+                       g.Expect(KamelRun(t, ctx, nsIntegration, 
"files/yaml.yaml").Execute()).To(Succeed())
+                       g.Eventually(IntegrationPodPhase(t, ctx, nsIntegration, 
"yaml"), TestTimeoutLong).Should(Equal(corev1.PodRunning))
+                       g.Eventually(IntegrationConditionStatus(t, ctx, 
nsIntegration, "yaml", v1.IntegrationConditionReady), 
TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
+                       g.Eventually(IntegrationLogs(t, ctx, nsIntegration, 
"yaml"), TestTimeoutShort).Should(ContainSubstring("Magicstring!"))
+
+                       // Test operator only uninstall
+                       ExpectExecSucceed(t, g, Kubectl(
+                               "delete",
+                               
"deploy,configmap,secret,sa,rolebindings,clusterrolebindings,roles,clusterroles",
+                               "-l",
+                               "app=camel-k",
+                               "-n",
+                               ns,
+                       ))
+                       g.Eventually(OperatorPod(t, ctx, ns)).Should(BeNil())
+                       g.Eventually(Integration(t, ctx, nsIntegration, 
"yaml"), TestTimeoutShort).ShouldNot(BeNil())
+                       g.Eventually(IntegrationConditionStatus(t, ctx, 
nsIntegration, "yaml", v1.IntegrationConditionReady), 
TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
+
+                       // Test CRD uninstall (will remove Integrations as well)
+                       ExpectExecSucceed(t, g, Kubectl(
+                               "delete",
+                               "crd",
+                               "-l",
+                               "app=camel-k",
+                               "-n",
+                               ns,
+                       ))
+                       g.Eventually(OperatorPod(t, ctx, ns)).Should(BeNil())
+                       g.Eventually(Integration(t, ctx, nsIntegration, 
"yaml"), TestTimeoutShort).Should(BeNil())
+                       g.Eventually(CRDs(t)).Should(BeNil())
+               })
        })
 }
diff --git a/e2e/install/kustomize/uninstall_test.go 
b/e2e/install/kustomize/uninstall_test.go
deleted file mode 100644
index 305fa7512..000000000
--- a/e2e/install/kustomize/uninstall_test.go
+++ /dev/null
@@ -1,126 +0,0 @@
-//go:build integration
-// +build integration
-
-// To enable compilation of this file in Goland, go to "Settings -> Go -> 
Vendoring & Build Tags -> Custom Tags" and add "integration"
-
-/*
-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 kustomize
-
-import (
-       "context"
-       "fmt"
-       "os"
-       "testing"
-
-       corev1 "k8s.io/api/core/v1"
-
-       . "github.com/apache/camel-k/v2/e2e/support"
-       testutil "github.com/apache/camel-k/v2/e2e/support/util"
-       "github.com/apache/camel-k/v2/pkg/util/defaults"
-       . "github.com/onsi/gomega"
-)
-
-func TestKustomizeUninstallBasic(t *testing.T) {
-       ctx := TestContext()
-       g := NewWithT(t)
-       makeDir := testutil.MakeTempCopyDir(t, "../../../install")
-       os.Setenv("CAMEL_K_TEST_MAKE_DIR", makeDir)
-
-       // Ensure no CRDs are already installed
-       g.Expect(UninstallAll(t, ctx)).To(Succeed())
-       g.Eventually(CRDs(t)).Should(HaveLen(0))
-
-       // Return the cluster to previous state
-       defer Cleanup(t, ctx)
-
-       WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
-               namespaceArg := fmt.Sprintf("NAMESPACE=%s", ns)
-               ExpectExecSucceed(t, g, Make(t, "setup-cluster", namespaceArg))
-               ExpectExecSucceed(t, g, Make(t, "setup", namespaceArg))
-               ExpectExecSucceed(t, g, Make(t, "platform", namespaceArg))
-               // Skip default kamelets installation for faster test runs
-               ExpectExecSucceed(t, g, Make(t, "operator", namespaceArg, 
"INSTALL_DEFAULT_KAMELETS=false"))
-               g.Eventually(OperatorPod(t, ctx, ns)).ShouldNot(BeNil())
-               g.Eventually(OperatorPodPhase(t, ctx, ns), 
TestTimeoutMedium).Should(Equal(corev1.PodRunning))
-
-               // Do uninstall
-               ExpectExecSucceed(t, g, Make(t, "uninstall", namespaceArg))
-
-               // Refresh the test client to account for the newly installed 
CRDs
-               RefreshClient(t)
-
-               g.Eventually(OperatorPod(t, ctx, ns)).Should(BeNil())
-               g.Eventually(Platform(t, ctx, ns)).Should(BeNil())
-               // The operator can dynamically create a for its builders
-               // so, in case there is a build strategy "pod", expect this to 
have 1 role
-               g.Eventually(Role(t, ctx, ns)).Should(BeNil())
-               g.Eventually(ClusterRole(t, ctx)).Should(BeNil())
-               // CRDs should be still there
-               
g.Eventually(CRDs(t)).Should(HaveLen(GetExpectedCRDs(defaults.Version)))
-
-               // Do uninstall all
-               ExpectExecSucceed(t, g, Make(t, "uninstall", namespaceArg, 
"UNINSTALL_ALL=true"))
-
-               g.Eventually(CRDs(t)).Should(BeNil())
-       })
-
-}
-
-func TestUninstallGlobal(t *testing.T) {
-       ctx := TestContext()
-       g := NewWithT(t)
-       makeDir := testutil.MakeTempCopyDir(t, "../../../install")
-       os.Setenv("CAMEL_K_TEST_MAKE_DIR", makeDir)
-
-       // Ensure no CRDs are already installed
-       g.Expect(UninstallAll(t, ctx)).To(Succeed())
-       g.Eventually(CRDs(t)).Should(HaveLen(0))
-
-       // Return the cluster to previous state
-       defer Cleanup(t, ctx)
-
-       WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
-               namespaceArg := fmt.Sprintf("NAMESPACE=%s", ns)
-               ExpectExecSucceed(t, g, Make(t, "setup-cluster", namespaceArg))
-               ExpectExecSucceed(t, g, Make(t, "setup", namespaceArg, 
"GLOBAL=true"))
-               ExpectExecSucceed(t, g, Make(t, "platform", namespaceArg))
-               // Skip default kamelets installation for faster test runs
-               ExpectExecSucceed(t, g, Make(t, "operator", namespaceArg, 
"GLOBAL=true", "INSTALL_DEFAULT_KAMELETS=false"))
-               g.Eventually(OperatorPod(t, ctx, ns)).ShouldNot(BeNil())
-               g.Eventually(OperatorPodPhase(t, ctx, ns), 
TestTimeoutMedium).Should(Equal(corev1.PodRunning))
-
-               // Do uninstall
-               ExpectExecSucceed(t, g, Make(t, "uninstall", namespaceArg))
-
-               // Refresh the test client to account for the newly installed 
CRDs
-               RefreshClient(t)
-
-               g.Eventually(OperatorPod(t, ctx, ns)).Should(BeNil())
-               g.Eventually(Platform(t, ctx, ns)).Should(BeNil())
-               g.Eventually(Role(t, ctx, ns)).Should(BeNil())
-               g.Eventually(ClusterRole(t, ctx)).Should(BeNil())
-               // CRDs should be still there
-               
g.Eventually(CRDs(t)).Should(HaveLen(GetExpectedCRDs(defaults.Version)))
-
-               // Do uninstall all
-               ExpectExecSucceed(t, g, Make(t, "uninstall", namespaceArg, 
"UNINSTALL_ALL=true"))
-
-               g.Eventually(CRDs(t)).Should(BeNil())
-       })
-}
diff --git a/e2e/install/upgrade/cli_upgrade_test.go 
b/e2e/install/upgrade/cli_upgrade_test.go
index 8f607fa92..b90d96446 100644
--- a/e2e/install/upgrade/cli_upgrade_test.go
+++ b/e2e/install/upgrade/cli_upgrade_test.go
@@ -43,13 +43,10 @@ func TestCLIOperatorUpgrade(t *testing.T) {
        WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
                version, ok := os.LookupEnv("KAMEL_K_TEST_RELEASE_VERSION")
                g.Expect(ok).To(BeTrue())
-
                image, ok := os.LookupEnv("KAMEL_K_TEST_OPERATOR_CURRENT_IMAGE")
                g.Expect(ok).To(BeTrue())
-
                kamel, ok := os.LookupEnv("RELEASED_KAMEL_BIN")
                g.Expect(ok).To(BeTrue())
-
                // Set KAMEL_BIN only for this test - don't override the ENV 
variable for all tests
                g.Expect(os.Setenv("KAMEL_BIN", kamel)).To(Succeed())
 
diff --git a/e2e/install/upgrade/kustomize_upgrade_test.go 
b/e2e/install/upgrade/kustomize_upgrade_test.go
new file mode 100644
index 000000000..e3bbdbdfb
--- /dev/null
+++ b/e2e/install/upgrade/kustomize_upgrade_test.go
@@ -0,0 +1,164 @@
+//go:build integration
+// +build integration
+
+// To enable compilation of this file in Goland, go to "Settings -> Go -> 
Vendoring & Build Tags -> Custom Tags" and add "integration"
+
+/*
+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 upgrade
+
+import (
+       "context"
+       "fmt"
+       "os"
+       "os/exec"
+       "testing"
+       "time"
+
+       . "github.com/onsi/gomega"
+
+       corev1 "k8s.io/api/core/v1"
+       kerrors "k8s.io/apimachinery/pkg/api/errors"
+
+       . "github.com/apache/camel-k/v2/e2e/support"
+       testutil "github.com/apache/camel-k/v2/e2e/support/util"
+       v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1"
+       "github.com/apache/camel-k/v2/pkg/util/defaults"
+)
+
+// WARNING: this test is not OLM specific but needs certain setting we provide 
in OLM installation scenario
+func TestKustomizeUpgrade(t *testing.T) {
+       WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
+               // ********* START
+               // TODO: we need to replace this CLI based installation with 
Kustomize installation after 2.4 release
+               // this is a workaround as Kustomize was not working properly 
pre 2.4
+               version, ok := os.LookupEnv("KAMEL_K_TEST_RELEASE_VERSION")
+               g.Expect(ok).To(BeTrue())
+               image, ok := os.LookupEnv("KAMEL_K_TEST_OPERATOR_CURRENT_IMAGE")
+               g.Expect(ok).To(BeTrue())
+               kamel, ok := os.LookupEnv("RELEASED_KAMEL_BIN")
+               g.Expect(ok).To(BeTrue())
+               // Set KAMEL_BIN only for this test - don't override the ENV 
variable for all tests
+               g.Expect(os.Setenv("KAMEL_BIN", kamel)).To(Succeed())
+
+               if len(CRDs(t)()) > 0 {
+                       // Clean up old installation - maybe leftover from 
another test
+                       if err := UninstallAll(t, ctx); err != nil && 
!kerrors.IsNotFound(err) {
+                               t.Error(err)
+                               t.FailNow()
+                       }
+               }
+               g.Eventually(CRDs(t)).Should(HaveLen(0))
+
+               // Should both install the CRDs and kamel in the given namespace
+               g.Expect(Kamel(t, ctx, "install", "-n", ns, 
"--global").Execute()).To(Succeed())
+               // Check the operator pod is running
+               g.Eventually(OperatorPodPhase(t, ctx, ns), 
TestTimeoutMedium).Should(Equal(corev1.PodRunning))
+               // Refresh the test client to account for the newly installed 
CRDs
+               RefreshClient(t)
+               // Check the IntegrationPlatform has been reconciled
+               g.Eventually(PlatformVersion(t, ctx, ns), 
TestTimeoutMedium).Should(Equal(version))
+               // TODO: replace the code above
+               // ************* END
+
+               // We need a different namespace from the global operator
+               WithNewTestNamespace(t, func(ctx context.Context, g *WithT, 
nsIntegration string) {
+                       // Run the Integration
+                       name := RandomizedSuffixName("yaml")
+                       g.Expect(Kamel(t, ctx, "run", "-n", nsIntegration, 
"--name", name, "files/yaml.yaml").Execute()).To(Succeed())
+                       g.Eventually(IntegrationPodPhase(t, ctx, nsIntegration, 
name)).Should(Equal(corev1.PodRunning))
+                       g.Eventually(IntegrationConditionStatus(t, ctx, 
nsIntegration, name, 
v1.IntegrationConditionReady)).Should(Equal(corev1.ConditionTrue))
+                       // Check the Integration version
+                       g.Eventually(IntegrationVersion(t, ctx, nsIntegration, 
name)).Should(Equal(version))
+
+                       // Clear the KAMEL_BIN environment variable so that the 
current version is used from now on
+                       g.Expect(os.Setenv("KAMEL_BIN", "")).To(Succeed())
+
+                       // Upgrade the operator by installing the current 
version
+                       registry := os.Getenv("KIND_REGISTRY")
+                       kustomizeDir := testutil.MakeTempCopyDir(t, 
"../../../install")
+                       g.Expect(registry).NotTo(Equal(""))
+                       // We must change a few values in the Kustomize config
+                       ExpectExecSucceed(t, g,
+                               exec.Command(
+                                       "sed",
+                                       "-i",
+                                       fmt.Sprintf("s/namespace: .*/namespace: 
%s/", ns),
+                                       
fmt.Sprintf("%s/overlays/kubernetes/descoped/kustomization.yaml", kustomizeDir),
+                               ))
+                       ExpectExecSucceed(t, g,
+                               exec.Command(
+                                       "sed",
+                                       "-i",
+                                       fmt.Sprintf("s/address: .*/address: 
%s/", registry),
+                                       
fmt.Sprintf("%s/overlays/kubernetes/descoped/integration-platform.yaml", 
kustomizeDir),
+                               ))
+
+                       ExpectExecSucceed(t, g, Kubectl(
+                               "apply",
+                               "-k",
+                               fmt.Sprintf("%s/overlays/kubernetes/descoped", 
kustomizeDir),
+                               "--server-side",
+                               "--force-conflicts",
+                       ))
+
+                       // Check the operator image is the current built one
+                       g.Eventually(OperatorImage(t, ctx, 
ns)).Should(Equal(image))
+                       // Check the operator pod is running
+                       g.Eventually(OperatorPodPhase(t, ctx, ns), 
TestTimeoutMedium).Should(Equal(corev1.PodRunning))
+                       // Check the IntegrationPlatform has been reconciled
+                       g.Eventually(PlatformPhase(t, ctx, ns), 
TestTimeoutMedium).Should(Equal(v1.IntegrationPlatformPhaseReady))
+                       g.Eventually(PlatformVersion(t, ctx, ns), 
TestTimeoutMedium).Should(Equal(defaults.Version))
+
+                       // Check the Integration hasn't been upgraded
+                       g.Consistently(IntegrationVersion(t, ctx, 
nsIntegration, name), 15*time.Second, 3*time.Second).Should(Equal(version))
+                       // Make sure that any Pod rollout is completing 
successfully
+                       // otherwise we are probably in front of a non breaking 
compatibility change
+                       g.Consistently(IntegrationConditionStatus(t, ctx, 
nsIntegration, name, v1.IntegrationConditionReady),
+                               2*time.Minute, 
15*time.Second).Should(Equal(corev1.ConditionTrue))
+
+                       // Force the Integration upgrade
+                       g.Expect(Kamel(t, ctx, "rebuild", name, "-n", 
nsIntegration).Execute()).To(Succeed())
+
+                       // A catalog should be created with the new 
configuration
+                       g.Eventually(DefaultCamelCatalogPhase(t, ctx, ns), 
TestTimeoutMedium).Should(Equal(v1.CamelCatalogPhaseReady))
+                       // Check the Integration version has been upgraded
+                       g.Eventually(IntegrationVersion(t, ctx, nsIntegration, 
name), TestTimeoutMedium).Should(Equal(defaults.Version))
+
+                       // Check the previous kit is not garbage collected
+                       g.Eventually(Kits(t, ctx, ns, 
KitWithVersion(version))).Should(HaveLen(1))
+                       // Check a new kit is created with the current version
+                       g.Eventually(Kits(t, ctx, ns, 
KitWithVersion(defaults.Version))).Should(HaveLen(1))
+                       // Check the new kit is ready
+                       g.Eventually(Kits(t, ctx, ns, 
KitWithVersion(defaults.Version), KitWithPhase(v1.IntegrationKitPhaseReady)),
+                               TestTimeoutMedium).Should(HaveLen(1))
+
+                       kit := Kits(t, ctx, ns, 
KitWithVersion(defaults.Version))()[0]
+
+                       // Check the Integration uses the new image
+                       g.Eventually(IntegrationKit(t, ctx, nsIntegration, 
name), TestTimeoutMedium).Should(Equal(kit.Name))
+                       // Check the Integration Pod uses the new kit
+                       g.Eventually(IntegrationPodImage(t, ctx, nsIntegration, 
name)).Should(Equal(kit.Status.Image))
+
+                       // Check the Integration runs correctly
+                       g.Eventually(IntegrationPodPhase(t, ctx, nsIntegration, 
name), TestTimeoutLong).Should(Equal(corev1.PodRunning))
+                       g.Eventually(IntegrationConditionStatus(t, ctx, 
nsIntegration, name, v1.IntegrationConditionReady), 
TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
+               })
+               // TODO: we should verify new CRDs installed are the same as 
the one defined in the source core here
+       })
+}
diff --git a/install/Makefile b/install/Makefile
deleted file mode 100644
index 692d32f9a..000000000
--- a/install/Makefile
+++ /dev/null
@@ -1,465 +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.
-
-#
-# Use bash explicitly in this Makefile to avoid unexpected platform
-# incompatibilities among Linux distros.
-#
-SHELL := /bin/bash
-
-MAKE := make --no-print-directory
-
-#
-# Allows for resources to be loaded from outside the root location of
-# the kustomize config file. Ensures that resource don't need to be
-# copied around the file system.
-#
-# See https://kubectl.docs.kubernetes.io/faq/kustomize
-#
-KOPTIONS := --load-restrictor LoadRestrictionsNone
-
-#
-# Include the main camel-k Makefile containing
-# basic common recipes like kustomize and vars
-# like VERSION
-#
-include script/Makefile
-
-#
-# Vars that can be overridden by external env vars
-#
-DRY_RUN ?= false
-NAMESPACE ?= camel-k
-
-# Global: [true|false]
-# - On setup: will promote roles and bindings to cluster-level
-# - On operator: set namespace to all using WATCH_NAMESPACE env var
-GLOBAL ?= false
-# Always Pull Images: [true|false]
-ALWAYS_PULL_IMAGES ?= false
-# Monitoring: [true|false]
-# - On operator: will add the prometheus resources to install
-MONITORING ?= false
-# Monitoring Port: integer
-MONITORING_PORT ?= 8080
-# Health Port: integer
-HEALTH_PORT ?= 8081
-# Operator Logging Level: string [info, debug, 0, 1]
-LOGGING_LEVEL ?= info
-# Install default kamelets: [true|false]
-INSTALL_DEFAULT_KAMELETS ?= true
-# Install default pvc: [true|false]
-INSTALL_DEFAULT_PVC ?= true
-# Uninstall all Camel K resources: [true|false]
-UNINSTALL_ALL ?=false
-
-CONFIG := config
-MANAGER := $(CONFIG)/manager
-SAMPLES := $(CONFIG)/samples
-RBAC := $(CONFIG)/rbac
-RBAC_OS := $(RBAC)/openshift
-RBAC_GLOBAL := global
-OPERATOR := operator
-PLACEHOLDER := placeholder
-YAML := yaml
-
-# Fetch the latest image name - may override the original constant
-IMAGE_NAME := $(shell grep image: $(MANAGER)/operator-deployment.yaml | sed 
's/.*image: \(.*\):.*/\1/')
-
-# Setup patches
-ROLE_TO_CROLE_PATCH := $(RBAC)/patch-role-to-clusterrole
-ROLEBIN_TO_CROLEBIN_PATCH := $(RBAC)/patch-rolebinding-to-clusterrolebinding
-# Operator patches
-PORTS_PATCH := patch-ports
-LOG_LEVEL_PATCH := patch-log-level
-INSTALL_DEFAULT_KAMELETS_PATCH := patch-install-default-kamelets
-IMAGE_PULL_POLICY_PATCH := patch-image-pull-policy-always
-WATCH_NAMESPACE_PATCH := patch-watch-namespace-global
-# Platform patches
-INT_PLATFORM_PATCH := patch-integration-platform
-
-#
-# Macro for editing kustomization to define
-# the image reference
-#
-# Parameter: directory of the kustomization.yaml
-#
-define set-kustomize-image
-       $(if $(filter $(IMAGE_NAME),$(CUSTOM_IMAGE):$(CUSTOM_VERSION)),,\
-               @cd $(1) || exit 1 && \
-                       $(KUSTOMIZE) edit set image 
$(IMAGE_NAME)=$(CUSTOM_IMAGE):$(CUSTOM_VERSION))
-endef
-
-#
-# Macro for editing kustomization to define
-# the namespace
-#
-# Parameter: directory of the kustomization.yaml
-#
-define set-kustomize-namespace
-       @cd $(1) || exit 1 && \
-               $(KUSTOMIZE) edit set namespace $(NAMESPACE)
-endef
-
-#
-# Add or remove a patch on a kustomization.yaml
-# targetting a kind of resource
-#
-# Parameters:
-# * directory of the kustomization.yaml
-# * [add, remove]
-# * path of patch
-# * kind of resources, eg. Deployment, Role
-#
-define add-remove-kind-patch
-       @cd $(1) || exit 1 && \
-               $(KUSTOMIZE) edit $(2) patch --path $(3) --kind $(4) &> 
/dev/null
-endef
-
-#
-# Macro for adding / removing the prometheus resources for monitoring
-#
-define add-remove-operator-monitoring
-       @cd $(1) || exit 1 && \
-               $(KUSTOMIZE) edit $(2) resource ../$(CONFIG)/prometheus &> 
/dev/null
-endef
-
-.PHONY: have-platform check_admin setup-cluster .setup-kubernetes 
.setup-openshift setup
-
-#
-# Determine the platform of the cluster based on
-# either the use of querying through a go-client
-# or using an installed client, ie. oc or kubectl
-#
-find-platform:
-ifndef PLATFORM
-PLATFORM=$(shell script/check_platform.sh)
-endif
-
-#
-# Checks if the cluster platform has been defined correctly either by the user
-# or by the platform_check script.
-#
-have-platform: find-platform
-ifeq ($(PLATFORM),openshift)
-       @echo Platform identified as 'openshift'
-else ifeq ($(PLATFORM),kubernetes)
-       @echo Platform identified as 'kubernetes'
-else
-       @echo "****"
-       @echo "**** ERROR: Cannot continue as cluster platform cannot be 
identified ****"
-       @echo "****"
-       @exit 1
-endif
-
-#
-# Checks if the cluster user has the necessary privileges to be a cluster-admin
-# In this case if the user can list the CRDs then probably a cluster-admin
-#
-check-admin: kubectl
-       @output=$$(kubectl get crd 2>&1) || (echo "****" && echo "**** ERROR: 
Cannot continue as user is not a Cluster-Admin ****" && echo "****"; exit 1)
-
-crd-api-support: kubectl
-ifndef CRD_SUPPORT
-CRD_SUPPORT=$(shell script/check_crd_api_support.sh)
-endif
-
-check-crd-api-support: crd-api-support
-ifneq ($(CRD_SUPPORT),OK)
-       $(error *** CRD API FAILURE: $(CRD_SUPPORT) ****)
-endif
-
-#---
-#
-#@ setup-cluster
-#
-#== Setup the cluster installation by installing crds and cluster roles.
-#
-# Will either call setup-cluster-openshift (then setup-cluster-kubernetes) or
-# setup-cluster-kubernetes depending on the identity of the cluster
-#
-#=== Cluster-admin privileges are required.
-#
-#* PARAMETERS:
-#** NAMESPACE: Set the namespace for the resources
-#** PLATFORM:  Override the discovered platform, if required
-#** DRY_RUN:   Print the resources to be applied instead of applying them 
[true|false]
-#
-#---
-setup-cluster: check-admin check-crd-api-support have-platform kustomize 
kubectl
-# Set the namespace in the setup-cluster kustomization yaml
-       @$(call set-kustomize-namespace,$@)
-ifeq ($(PLATFORM), openshift)
-       @cd $@ || exit 1 && $(KUSTOMIZE) edit add resource ../$(RBAC_OS) && cd 
- &> /dev/null;
-endif
-#
-# Build the resources
-# Post-process ClusterRoleBindings to fix the namespace in the refs (not yet 
handled by kustomize)
-# Either apply to the cluster or output to CLI
-#
-ifeq ($(DRY_RUN), false)
-       @$(KUSTOMIZE) build $(KOPTIONS) $@ | \
-               sed 's/$(PLACEHOLDER)/$(NAMESPACE)/' | \
-               kubectl apply --server-side -f -
-else
-       @$(KUSTOMIZE) build $(KOPTIONS) $@ | \
-               sed 's/$(PLACEHOLDER)/$(NAMESPACE)/'
-endif
-
-#---
-#
-#@ setup
-#
-#== Setup the installation by installing roles and granting privileges for the 
installing operator.
-#
-#=== Calls setup-cluster
-#=== Cluster-admin privileges are required.
-#
-#* PARAMETERS:
-#** NAMESPACE: Set the namespace for the resources
-#** GLOBAL:    Convert all roles & bindings to cluster-level [true|false]
-#** PLATFORM:  Override the discovered platform, if required
-#** DRY_RUN:   Print the resources to be applied instead of applying them 
[true|false]
-#
-#---
-setup: setup-cluster
-# Set the namespace in the setup kustomization yaml
-       @$(call set-kustomize-namespace,$@)
-# If GLOBAL then add the versions with clusterroles and clusterrolebindings
-ifeq ($(GLOBAL), true)
-       @cd $@ || exit 1 && $(KUSTOMIZE) edit add resource ../$(RBAC)/descoped 
&& cd - &> /dev/null;
-else
-       @cd $@ || exit 1 && $(KUSTOMIZE) edit add resource 
../$(RBAC)/namespaced && cd - &> /dev/null;
-endif
-ifeq ($(PLATFORM), openshift)
-ifeq ($(GLOBAL), true)
-       @cd $@ || exit 1 && $(KUSTOMIZE) edit add resource 
../$(RBAC_OS)/descoped && cd - &> /dev/null;
-else
-       @cd $@ || exit 1 && $(KUSTOMIZE) edit add resource 
../$(RBAC_OS)/namespaced && cd - &> /dev/null;
-endif
-endif
-#
-# Build the resources
-# Post-process RoleBindings to fix the namespace in the refs (not yet handled 
by kustomize)
-# Either apply to the cluster or output to CLI
-#
-ifeq ($(DRY_RUN), false)
-       @$(KUSTOMIZE) build $(KOPTIONS) $@ | \
-               sed 's/$(PLACEHOLDER)/$(NAMESPACE)/' | \
-               kubectl apply --server-side -f -
-else
-       @$(KUSTOMIZE) build $(KOPTIONS) $@ | \
-               sed 's/$(PLACEHOLDER)/$(NAMESPACE)/'
-endif
-
-.PHONY: operator .operator-port-patch .operator-can-monitor 
.operator-log-level-patch
-
-#
-# Customizes the port patch
-#
-.operator-port-patch:
-       @sed -i 's/--monitoring-port=.*/--monitoring-port=$(MONITORING_PORT)/' 
$(MANAGER)/$(PORTS_PATCH).$(YAML)
-       @sed -i '/path:.*\/containerPort/,/- op/{s/value: .*/value: 
$(MONITORING_PORT)/}' $(MANAGER)/$(PORTS_PATCH).$(YAML)
-       @sed -i 's/--health-port=.*/--health-port=$(HEALTH_PORT)/' 
$(MANAGER)/$(PORTS_PATCH).$(YAML)
-       @sed -i '/path:.*\/httpGet\/port/,/- op/{s/value: .*/value: 
$(HEALTH_PORT)/}' $(MANAGER)/$(PORTS_PATCH).$(YAML)
-
-#
-# Customizes the log level patch
-#
-.operator-log-level-patch:
-       @sed -i 's/    value:.*/    value: "$(LOGGING_LEVEL)"/' 
$(MANAGER)/$(LOG_LEVEL_PATCH).$(YAML)
-
-.operator-can-monitor: kubectl
-       @output=$$(kubectl get crd prometheusrules.monitoring.coreos.com 2>&1) 
|| (echo "****" && echo "**** ERROR: Montoring not available as Prometheus CRDs 
not installed in cluster ****" && echo "****"; exit 1)
-
-#---
-#
-#@ operator
-#
-#== Install the operator deployment and related resources.
-#
-#=== Cluster-admin privileges are required.
-#
-#* PARAMETERS:
-#** NAMESPACE:                Set the namespace to install the operator into
-#** PLATFORM:                 Override the discovered platform, if required
-#** GLOBAL:                   Set the operator to watch all namespaces for 
custom resources [true|false]
-#** CUSTOM_IMAGE:             Set a custom operator image name
-#** CUSTOM_VERSION:           Set a custom operator image version/tag
-#** ALWAYS_PULL_IMAGES:       Set whether to always pull the operator image 
[true|false]
-#** MONITORING:               Add the prometheus monitoring resources
-#** MONITORING_PORT:          Set a custom monitoring port
-#** HEALTH_PORT:              Set a custom health port
-#** LOGGING_LEVEL:            Set the level of logging [info|debug]
-#** INSTALL_DEFAULT_KAMELETS: Install the default Kamelets from catalog 
[true|false]
-#** DRY_RUN:                  Print the resources to be applied instead of 
applying them [true|false]
-#
-#---
-operator: check-admin have-platform check-crd-api-support kustomize kubectl 
.operator-port-patch .operator-log-level-patch
-ifeq ($(MONITORING), true)
-       @$(MAKE) -s .operator-can-monitor
-       @$(call add-remove-operator-monitoring,$@,add)
-else
-       @$(call add-remove-operator-monitoring,$@,remove)
-endif
-# Set the namespace in the operator kustomization yaml
-       @$(call set-kustomize-namespace,$@)
-# Set the image reference of the kustomization
-       @$(call set-kustomize-image,$@)
-# Set the WATCH NAMESPACE env var depending on GLOBAL var
-ifeq ($(GLOBAL), true)
-       @$(call 
add-remove-kind-patch,$(MANAGER),add,$(WATCH_NAMESPACE_PATCH).$(YAML),Deployment)
-else
-       @$(call 
add-remove-kind-patch,$(MANAGER),remove,$(WATCH_NAMESPACE_PATCH).$(YAML),Deployment)
-endif
-# Set the ALWAYS_PULL_IMAGES config depending on var
-ifeq ($(ALWAYS_PULL_IMAGES),true)
-       @$(call 
add-remove-kind-patch,$(MANAGER),add,$(IMAGE_PULL_POLICY_PATCH).$(YAML),Deployment)
-else
-       @$(call 
add-remove-kind-patch,$(MANAGER),remove,$(IMAGE_PULL_POLICY_PATCH).$(YAML),Deployment)
-endif
-# Set the PORTS depending on vars
-ifneq ($(MONITORING_PORT), 8080)
-       @$(call 
add-remove-kind-patch,$(MANAGER),add,$(PORTS_PATCH).$(YAML),Deployment)
-else ifneq ($(HEALTH_PORT), 8081)
-       @$(call 
add-remove-kind-patch,$(MANAGER),add,$(PORTS_PATCH).$(YAML),Deployment)
-endif
-# Set the Log level of the operator
-ifneq ($(LOGGING_LEVEL), info)
-       @$(call 
add-remove-kind-patch,$(MANAGER),add,$(LOG_LEVEL_PATCH).$(YAML),Deployment)
-else ifneq ($(LOGGING_LEVEL), 0)
-               @$(call 
add-remove-kind-patch,$(MANAGER),add,$(LOG_LEVEL_PATCH).$(YAML),Deployment)
-else
-       @$(call 
add-remove-kind-patch,$(MANAGER),remove,$(LOG_LEVEL_PATCH).$(YAML),Deployment)
-endif
-# Set the INSTALL_DEFAULT_KAMELETS config depending on var
-ifeq ($(INSTALL_DEFAULT_KAMELETS),false)
-       @$(call 
add-remove-kind-patch,$(MANAGER),add,$(INSTALL_DEFAULT_KAMELETS_PATCH).$(YAML),Deployment)
-else
-       @$(call 
add-remove-kind-patch,$(MANAGER),remove,$(INSTALL_DEFAULT_KAMELETS_PATCH).$(YAML),Deployment)
-endif
-ifeq ($(DRY_RUN), false)
-       @$(KUSTOMIZE) build $(KOPTIONS) $@ | kubectl apply -f -
-else
-       @$(KUSTOMIZE) build $(KOPTIONS) $@
-endif
-
-.PHONY: platform .platform-openshift-patch .platform-kubernetes-patch
-
-#
-# Customizes the samples patches for kubernetes
-#
-.platform-kubernetes-patch:
-       @sed -i 's/.*profile:.*/  profile: Kubernetes/' 
$(SAMPLES)/$(INT_PLATFORM_PATCH).$(YAML)
-
-#
-# Customizes the samples patches for openshift
-#
-.platform-openshift-patch:
-       @sed -i 's/.*profile:.*/  profile: OpenShift/' 
$(SAMPLES)/$(INT_PLATFORM_PATCH).$(YAML)
-
-#---
-#
-#@ platform
-#
-#== Install the integration platform.
-#
-#=== Cluster-admin privileges are required.
-#
-#* PARAMETERS:
-#** NAMESPACE: Set the namespace to install the operator into
-#** PLATFORM:  Override the discovered platform, if required
-#** DRY_RUN:   Print the resources to be applied instead of applying them 
[true|false]
-#
-#---
-platform: have-platform kustomize kubectl
-# Cannot be a dependency as PLATFORM could contain 'ERROR: '
-       @$(MAKE) .platform-$(PLATFORM)-patch
-# Set the namespace in the platform kustomization yaml
-       @$(call set-kustomize-namespace,$@)
-ifeq ($(DRY_RUN), false)
-       @$(KUSTOMIZE) build $(KOPTIONS) $@ | kubectl apply -f -
-else
-       @$(KUSTOMIZE) build $(KOPTIONS) $@
-endif
-
-.PHONY: example
-
-#---
-#
-#@ example
-#
-#== Install the example integration.
-#
-#* PARAMETERS:
-#** NAMESPACE: Set the namespace to install the example into
-#** PLATFORM:  Override the discovered platform, if required
-#** DRY_RUN:   Print the resources to be applied instead of applying them 
[true|false]
-#
-#---
-example: kubectl
-# Set the namespace in the example kustomization yaml
-       @$(call set-kustomize-namespace,$@)
-ifeq ($(DRY_RUN), false)
-       @$(KUSTOMIZE) build $(KOPTIONS) $@ | kubectl apply -f -
-else
-       @$(KUSTOMIZE) build $(KOPTIONS) $@
-endif
-
-.PHONY: uninstall
-
-#---
-#
-#@ uninstall
-#
-#== Uninstall the resources previously installed by the platform, operator, 
setup, and setup-cluster targets.
-#
-#=== Cluster-admin privileges are required.
-#
-#* PARAMETERS:
-#** NAMESPACE:     Set the namespace to uninstall the resources from
-#** UNINSTALL_ALL: Uninstall all Camel K resources including crds and cluster 
roles installed by setup-cluster [true|false]
-#** DRY_RUN:       Print the resources to be applied instead of applying them 
[true|false]
-#
-#---
-uninstall: kubectl
-# Set the namespace in the all target kustomization yaml
-       @$(call set-kustomize-namespace, platform)
-       @$(call set-kustomize-namespace, operator)
-       @$(call set-kustomize-namespace, setup)
-ifeq ($(UNINSTALL_ALL), true)
-       @$(call set-kustomize-namespace, setup-cluster)
-endif
-ifeq ($(DRY_RUN), false)
-       @$(KUSTOMIZE) build $(KOPTIONS) platform | kubectl delete 
--ignore-not-found=true -f -
-       @$(KUSTOMIZE) build $(KOPTIONS) operator | kubectl delete 
--ignore-not-found=true -f -
-       @$(KUSTOMIZE) build $(KOPTIONS) setup    | kubectl delete 
--ignore-not-found=true -f -
-ifeq ($(UNINSTALL_ALL), true)
-       @$(KUSTOMIZE) build $(KOPTIONS) setup-cluster | kubectl delete 
--ignore-not-found=true -f -
-endif
-else
-       @$(KUSTOMIZE) build $(KOPTIONS) platform | kubectl delete 
--dry-run=client -f -
-       @$(KUSTOMIZE) build $(KOPTIONS) operator | kubectl delete 
--dry-run=client -f -
-       @$(KUSTOMIZE) build $(KOPTIONS) setup    | kubectl delete 
--dry-run=client -f -
-ifeq ($(UNINSTALL_ALL), true)
-       @$(KUSTOMIZE) build $(KOPTIONS) setup-cluster | kubectl delete 
--dry-run=client -f -
-endif
-endif
-
-.DEFAULT_GOAL := help
-.PHONY: help
-help: ## Show this help screen.
-       @#./script/help.sh $(MAKEFILE_LIST)
-       @awk 'BEGIN { printf "\nUsage: make \033[31m<PARAM1=val1 
PARAM2=val2>\033[0m \033[36m<target>\033[0m\n"; printf "\nAvailable targets 
are:\n" } /^#@/ { printf "\033[36m%-15s\033[0m", $$2; subdesc=0; next } /^#===/ 
{ printf "%-14s \033[32m%s\033[0m\n", " ", substr($$0, 5); subdesc=1; next } 
/^#==/ { printf "\033[0m%s\033[0m\n\n", substr($$0, 4); next } /^#\*\*/ { 
printf "%-14s \033[31m%s\033[0m\n", " ", substr($$0, 4); next } /^#\*/ && 
(subdesc == 1) { printf "\n"; next } /^#\-\-\-/ { pri [...]
diff --git a/install/base/config b/install/base/config
new file mode 120000
index 000000000..82818de8a
--- /dev/null
+++ b/install/base/config
@@ -0,0 +1 @@
+../../pkg/resources/config/
\ No newline at end of file
diff --git a/install/setup/kustomization.yaml b/install/base/kustomization.yaml
similarity index 96%
rename from install/setup/kustomization.yaml
rename to install/base/kustomization.yaml
index 9598726ca..fd44ce4a6 100644
--- a/install/setup/kustomization.yaml
+++ b/install/base/kustomization.yaml
@@ -18,7 +18,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1
 kind: Kustomization
 
 resources:
-- ../config/rbac
+- ./config/crd
+- ./config/rbac
+- ./config/manager
 
 transformers:
 - |-
diff --git a/install/config b/install/config
deleted file mode 120000
index 90c8cdbdc..000000000
--- a/install/config
+++ /dev/null
@@ -1 +0,0 @@
-../pkg/resources/config/
\ No newline at end of file
diff --git a/install/operator/kustomization.yaml 
b/install/operator/kustomization.yaml
deleted file mode 100644
index dc1a8db59..000000000
--- a/install/operator/kustomization.yaml
+++ /dev/null
@@ -1,50 +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.
-# ---------------------------------------------------------------------------
-
-#
-# Add patches for modifying the deployment
-#
-# * patch-image-pull-policy-always.yaml
-#   modifies the image pull policy property to "Always"
-#
-# * patch-monitoring-port.yaml
-#   modifies the monitoring port
-#
-# * patch-health-port.yaml
-#   modifies the health port
-#
-# * patch-watch-namespace-global.yaml
-#   modifies the WATCH_NAMESPACE env var to wildcard for all namespaces
-#
-# * patch-toleration.yaml
-#   modifies the tolerations configuration of the deployment
-#   Edit the patch manually to add the required keys
-#
-# * patch-nodes-selector.yaml
-#   modifies the nodeSelector configuration of the deployment
-#   to bind the deployment to a particular labelled group of nodes
-#   Edit the patch manually to add the required configuration
-#
-apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-resources:
-- ../config/manager
-images:
-- name: docker.io/apache/camel-k
-  newName: docker.io/apache/camel-k
-  newTag: 2.0.0-SNAPSHOT
diff --git a/pkg/resources/config/manager/patch-image-pull-policy-always.yaml 
b/install/overlays/kubernetes/descoped/integration-platform.yaml
similarity index 57%
copy from pkg/resources/config/manager/patch-image-pull-policy-always.yaml
copy to install/overlays/kubernetes/descoped/integration-platform.yaml
index e03b90dc7..05136f15b 100644
--- a/pkg/resources/config/manager/patch-image-pull-policy-always.yaml
+++ b/install/overlays/kubernetes/descoped/integration-platform.yaml
@@ -15,13 +15,22 @@
 # limitations under the License.
 # ---------------------------------------------------------------------------
 
-apiVersion: apps/v1
-kind: Deployment
+apiVersion: camel.apache.org/v1
+kind: IntegrationPlatform
 metadata:
-  name: camel-k-operator
+  name: camel-k
 spec:
-  template:
-    spec:
-      containers:
-        - name: camel-k-operator
-          imagePullPolicy: Always
+  build:
+    # Registry is required unless your cluster has KEP-1755 enabled and you 
want to use the local registry.
+    # This is a feature recommended for development purpose only.
+    # more info at 
https://github.com/kubernetes/enhancements/tree/master/keps/sig-cluster-lifecycle/generic/1755-communicating-a-local-registry
+    registry:
+      # For minikube local cluster you can enable one with
+      #
+      # $ minikube addons enable registry
+      #
+      # and get the value from
+      # $ kubectl -n kube-system get service registry -o 
jsonpath='{.spec.clusterIP}'
+      #
+      address: registry-host.io
+      insecure: true
diff --git a/install/example/kustomization.yaml 
b/install/overlays/kubernetes/descoped/kustomization.yaml
similarity index 84%
rename from install/example/kustomization.yaml
rename to install/overlays/kubernetes/descoped/kustomization.yaml
index 6b9541ac7..1f0e96900 100644
--- a/install/example/kustomization.yaml
+++ b/install/overlays/kubernetes/descoped/kustomization.yaml
@@ -18,4 +18,13 @@ apiVersion: kustomize.config.k8s.io/v1beta1
 kind: Kustomization
 
 resources:
-- ../config/samples/bases/camel_v1_integration.yaml
+- ../../../base
+- ../../../base/config/rbac/descoped
+- integration-platform.yaml
+
+namespace: camel-k
+
+patches:
+- path: patch-watch-namespace-global.yaml
+  target:
+    kind: Deployment
diff --git a/pkg/resources/config/manager/patch-watch-namespace-global.yaml 
b/install/overlays/kubernetes/descoped/patch-watch-namespace-global.yaml
similarity index 98%
rename from pkg/resources/config/manager/patch-watch-namespace-global.yaml
rename to install/overlays/kubernetes/descoped/patch-watch-namespace-global.yaml
index 626fa2b7a..69c6ae502 100644
--- a/pkg/resources/config/manager/patch-watch-namespace-global.yaml
+++ b/install/overlays/kubernetes/descoped/patch-watch-namespace-global.yaml
@@ -19,4 +19,4 @@
   path: /spec/template/spec/containers/0/env/0/valueFrom
 - op: add
   path: /spec/template/spec/containers/0/env/0/value
-  value: '""'
+  value: ""
diff --git a/pkg/resources/config/manager/patch-image-pull-policy-always.yaml 
b/install/overlays/kubernetes/namespaced/integration-platform.yaml
similarity index 57%
copy from pkg/resources/config/manager/patch-image-pull-policy-always.yaml
copy to install/overlays/kubernetes/namespaced/integration-platform.yaml
index e03b90dc7..05136f15b 100644
--- a/pkg/resources/config/manager/patch-image-pull-policy-always.yaml
+++ b/install/overlays/kubernetes/namespaced/integration-platform.yaml
@@ -15,13 +15,22 @@
 # limitations under the License.
 # ---------------------------------------------------------------------------
 
-apiVersion: apps/v1
-kind: Deployment
+apiVersion: camel.apache.org/v1
+kind: IntegrationPlatform
 metadata:
-  name: camel-k-operator
+  name: camel-k
 spec:
-  template:
-    spec:
-      containers:
-        - name: camel-k-operator
-          imagePullPolicy: Always
+  build:
+    # Registry is required unless your cluster has KEP-1755 enabled and you 
want to use the local registry.
+    # This is a feature recommended for development purpose only.
+    # more info at 
https://github.com/kubernetes/enhancements/tree/master/keps/sig-cluster-lifecycle/generic/1755-communicating-a-local-registry
+    registry:
+      # For minikube local cluster you can enable one with
+      #
+      # $ minikube addons enable registry
+      #
+      # and get the value from
+      # $ kubectl -n kube-system get service registry -o 
jsonpath='{.spec.clusterIP}'
+      #
+      address: registry-host.io
+      insecure: true
diff --git a/install/platform/kustomization.yaml 
b/install/overlays/kubernetes/namespaced/kustomization.yaml
similarity index 72%
rename from install/platform/kustomization.yaml
rename to install/overlays/kubernetes/namespaced/kustomization.yaml
index b425aeb51..54d318512 100644
--- a/install/platform/kustomization.yaml
+++ b/install/overlays/kubernetes/namespaced/kustomization.yaml
@@ -14,17 +14,22 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 # ---------------------------------------------------------------------------
-
 apiVersion: kustomize.config.k8s.io/v1beta1
 kind: Kustomization
 
-#
-# * patch-integration-platform.yaml
-# customizes the integration platform custom resource
-# Edit the patch manually to add required configuration
-#
 resources:
-- ../config/samples/bases/camel_v1_integrationplatform.yaml
+- ../../../base
+- ../../../base/config/rbac/namespaced
+- integration-platform.yaml
+
+namespace: default
 
-patchesStrategicMerge:
-- ../config/samples/patch-integration-platform.yaml
+# You can provide any required adjustement here. Take the following as 
references:
+# patchesStrategicMerge:
+# - patch-toleration.yaml
+# - patch-node-selector.yaml
+# - patch-resource-requirements.yaml
+# patches:
+# - path: patch-log-level.yaml
+#   target:
+#     kind: Deployment
\ No newline at end of file
diff --git a/pkg/resources/config/manager/patch-image-pull-policy-always.yaml 
b/install/overlays/kubernetes/namespaced/patch-image-pull-policy-always.yaml
similarity index 100%
rename from pkg/resources/config/manager/patch-image-pull-policy-always.yaml
rename to 
install/overlays/kubernetes/namespaced/patch-image-pull-policy-always.yaml
diff --git a/pkg/resources/config/manager/patch-install-default-kamelets.yaml 
b/install/overlays/kubernetes/namespaced/patch-install-default-kamelets.yaml
similarity index 100%
rename from pkg/resources/config/manager/patch-install-default-kamelets.yaml
rename to 
install/overlays/kubernetes/namespaced/patch-install-default-kamelets.yaml
diff --git a/pkg/resources/config/manager/patch-log-level.yaml 
b/install/overlays/kubernetes/namespaced/patch-log-level.yaml
similarity index 100%
rename from pkg/resources/config/manager/patch-log-level.yaml
rename to install/overlays/kubernetes/namespaced/patch-log-level.yaml
diff --git a/pkg/resources/config/manager/patch-node-selector.yaml 
b/install/overlays/kubernetes/namespaced/patch-node-selector.yaml
similarity index 100%
rename from pkg/resources/config/manager/patch-node-selector.yaml
rename to install/overlays/kubernetes/namespaced/patch-node-selector.yaml
diff --git a/pkg/resources/config/manager/patch-ports.yaml 
b/install/overlays/kubernetes/namespaced/patch-ports.yaml
similarity index 100%
rename from pkg/resources/config/manager/patch-ports.yaml
rename to install/overlays/kubernetes/namespaced/patch-ports.yaml
diff --git a/pkg/resources/config/manager/patch-resource-requirements.yaml 
b/install/overlays/kubernetes/namespaced/patch-resource-requirements.yaml
similarity index 100%
rename from pkg/resources/config/manager/patch-resource-requirements.yaml
rename to 
install/overlays/kubernetes/namespaced/patch-resource-requirements.yaml
diff --git a/pkg/resources/config/manager/patch-toleration.yaml 
b/install/overlays/kubernetes/namespaced/patch-toleration.yaml
similarity index 100%
rename from pkg/resources/config/manager/patch-toleration.yaml
rename to install/overlays/kubernetes/namespaced/patch-toleration.yaml
diff --git a/install/script/Makefile b/install/script/Makefile
deleted file mode 120000
index d89e34fe5..000000000
--- a/install/script/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-../../script/Makefile
\ No newline at end of file
diff --git a/install/script/check_crd_api_support.sh 
b/install/script/check_crd_api_support.sh
deleted file mode 120000
index 3d144aabd..000000000
--- a/install/script/check_crd_api_support.sh
+++ /dev/null
@@ -1 +0,0 @@
-../../script/check_crd_api_support.sh
\ No newline at end of file
diff --git a/install/script/check_platform.sh b/install/script/check_platform.sh
deleted file mode 120000
index 329d24665..000000000
--- a/install/script/check_platform.sh
+++ /dev/null
@@ -1 +0,0 @@
-../../script/check_platform.sh
\ No newline at end of file
diff --git a/install/script/help.sh b/install/script/help.sh
deleted file mode 100755
index c79347664..000000000
--- a/install/script/help.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/bash
-
-# ---------------------------------------------------------------------------
-# 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.
-# ---------------------------------------------------------------------------
-
-
-awk 'BEGIN {
-      printf "\nUsage: make \033[31m<PARAM1=val1 PARAM2=val2>\033[0m 
\033[36m<target>\033[0m\n"
-      printf "\nAvailable targets are:\n"
-    }
-    /^#@/ { printf "\033[36m%-15s\033[0m", $2; subdesc=0; next }
-    /^#===/ { printf "%-14s \033[32m%s\033[0m\n", " ", substr($0, 5); 
subdesc=1; next }
-    /^#==/ { printf "\033[0m%s\033[0m\n\n", substr($0, 4); next }
-    /^#\*\*/ { printf "%-14s \033[31m%s\033[0m\n", " ", substr($0, 4); next }
-    /^#\*/ && (subdesc == 1) { printf "\n"; next }
-    /^#\-\-\-/ { printf "\n"; next }' ${1}
diff --git a/install/setup-cluster/kustomization.yaml 
b/install/setup-cluster/kustomization.yaml
deleted file mode 100644
index cfce7838b..000000000
--- a/install/setup-cluster/kustomization.yaml
+++ /dev/null
@@ -1,22 +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.
-# ---------------------------------------------------------------------------
-apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-resources:
-- ../config/crd
-- ../config/rbac/user-cluster-role.yaml
diff --git a/pkg/resources/config/manager/kustomization.yaml 
b/pkg/resources/config/manager/kustomization.yaml
index 38c67427f..895978ab4 100644
--- a/pkg/resources/config/manager/kustomization.yaml
+++ b/pkg/resources/config/manager/kustomization.yaml
@@ -21,12 +21,3 @@ kind: Kustomization
 resources:
 - operator-deployment.yaml
 - operator-service-account.yaml
-
-patchesStrategicMerge:
-- patch-toleration.yaml
-- patch-node-selector.yaml
-- patch-resource-requirements.yaml
-patches:
-- path: patch-log-level.yaml
-  target:
-    kind: Deployment
diff --git a/pkg/resources/config/manifests/kustomization.yaml 
b/pkg/resources/config/manifests/kustomization.yaml
index 7c6754326..bd94db03f 100644
--- a/pkg/resources/config/manifests/kustomization.yaml
+++ b/pkg/resources/config/manifests/kustomization.yaml
@@ -33,7 +33,6 @@ resources:
 
 patchesStrategicMerge:
 - patch-delete-user-cluster-role.yaml
-- patch-delete-pvc.yaml
 images:
 - name: docker.io/apache/camel-k
   newName: docker.io/apache/camel-k
diff --git a/pkg/resources/config/manifests/patch-delete-pvc.yaml 
b/pkg/resources/config/manifests/patch-delete-pvc.yaml
deleted file mode 100644
index ef4d9825a..000000000
--- a/pkg/resources/config/manifests/patch-delete-pvc.yaml
+++ /dev/null
@@ -1,28 +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.
-# ---------------------------------------------------------------------------
-
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: camel-k-operator
-spec:
-  template:
-    spec:
-      containers:
-        - name: camel-k-operator
-          volumeMounts: null
-      volumes: null
diff --git 
a/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-events.yaml 
b/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-events.yaml
index 9dd5228d2..abc12cf9b 100644
--- 
a/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-events.yaml
+++ 
b/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-events.yaml
@@ -24,7 +24,6 @@ metadata:
 subjects:
 - kind: ServiceAccount
   name: camel-k-operator
-  namespace: placeholder
 roleRef:
   kind: ClusterRole
   name: camel-k-operator-events
diff --git 
a/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-keda.yaml 
b/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-keda.yaml
index 92e154e87..5ee70de10 100644
--- a/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-keda.yaml
+++ b/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-keda.yaml
@@ -24,7 +24,6 @@ metadata:
 subjects:
 - kind: ServiceAccount
   name: camel-k-operator
-  namespace: placeholder
 roleRef:
   kind: ClusterRole
   name: camel-k-operator-keda
diff --git 
a/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-knative.yaml 
b/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-knative.yaml
index 739b0dd06..717ea682d 100644
--- 
a/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-knative.yaml
+++ 
b/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-knative.yaml
@@ -24,7 +24,6 @@ metadata:
 subjects:
 - kind: ServiceAccount
   name: camel-k-operator
-  namespace: placeholder
 roleRef:
   kind: ClusterRole
   name: camel-k-operator-knative
diff --git 
a/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-leases.yaml 
b/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-leases.yaml
index 35d667fd1..84099b3d1 100644
--- 
a/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-leases.yaml
+++ 
b/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-leases.yaml
@@ -24,7 +24,6 @@ metadata:
 subjects:
 - kind: ServiceAccount
   name: camel-k-operator
-  namespace: placeholder
 roleRef:
   kind: ClusterRole
   name: camel-k-operator-leases
diff --git 
a/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-podmonitors.yaml
 
b/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-podmonitors.yaml
index bef231b07..a8cee53ea 100644
--- 
a/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-podmonitors.yaml
+++ 
b/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-podmonitors.yaml
@@ -24,7 +24,6 @@ metadata:
 subjects:
 - kind: ServiceAccount
   name: camel-k-operator
-  namespace: placeholder
 roleRef:
   kind: ClusterRole
   name: camel-k-operator-podmonitors
diff --git 
a/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-strimzi.yaml 
b/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-strimzi.yaml
index fefd14352..876c161ec 100644
--- 
a/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-strimzi.yaml
+++ 
b/pkg/resources/config/rbac/descoped/operator-cluster-role-binding-strimzi.yaml
@@ -24,7 +24,6 @@ metadata:
 subjects:
 - kind: ServiceAccount
   name: camel-k-operator
-  namespace: placeholder
 roleRef:
   kind: ClusterRole
   name: camel-k-operator-strimzi
diff --git 
a/pkg/resources/config/rbac/descoped/operator-cluster-role-binding.yaml 
b/pkg/resources/config/rbac/descoped/operator-cluster-role-binding.yaml
index 83f227d62..0d6f587a1 100644
--- a/pkg/resources/config/rbac/descoped/operator-cluster-role-binding.yaml
+++ b/pkg/resources/config/rbac/descoped/operator-cluster-role-binding.yaml
@@ -24,7 +24,6 @@ metadata:
 subjects:
 - kind: ServiceAccount
   name: camel-k-operator
-  namespace: placeholder
 roleRef:
   kind: ClusterRole
   name: camel-k-operator

Reply via email to