You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@submarine.apache.org by ka...@apache.org on 2021/06/18 02:53:35 UTC

[submarine] branch master updated: SUBMARINE-848. Make submarine CR and resources created in the same namespace

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

kaihsun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/submarine.git


The following commit(s) were added to refs/heads/master by this push:
     new 7430d03  SUBMARINE-848. Make submarine CR and resources created in the same namespace
7430d03 is described below

commit 7430d03c29018ac22c09cf4fd64e0b0b269c3eaf
Author: MortalHappiness <b0...@ntu.edu.tw>
AuthorDate: Mon Jun 14 02:39:42 2021 +0800

    SUBMARINE-848. Make submarine CR and resources created in the same namespace
    
    ### What is this PR for?
    
    https://pkg.go.dev/k8s.io/apimachineryv0.20.4/pkg/apis/meta/v1#OwnerReference
    
    The documentation above says that we should not create cross-namespace ownerReferences but our submarine CR and the resources created by operator are in different namespaces. After discussion with others, we decided to put them in the same namespace temporarily.
    
    ### What type of PR is it?
    [Bug Fix]
    
    ### Todos
    
    ### What is the Jira issue?
    https://issues.apache.org/jira/projects/SUBMARINE/issues/SUBMARINE-848
    
    ### How should this be tested?
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Do the license files need updating? No
    * Are there breaking changes for older versions? No
    * Does this need new documentation? No
    
    Author: MortalHappiness <b0...@ntu.edu.tw>
    
    Signed-off-by: Kai-Hsun Chen <ka...@apache.org>
    
    Closes #606 from MortalHappiness/SUBMARINE-848 and squashes the following commits:
    
    91c2f955 [MortalHappiness] SUBMARINE-848. Make submarine CR and resources created in the same namespace
---
 submarine-cloud-v2/README.md     | 18 ++++++++++--------
 submarine-cloud-v2/controller.go | 41 ++++++++--------------------------------
 2 files changed, 18 insertions(+), 41 deletions(-)

diff --git a/submarine-cloud-v2/README.md b/submarine-cloud-v2/README.md
index 1d5e7b0..00f3a31 100644
--- a/submarine-cloud-v2/README.md
+++ b/submarine-cloud-v2/README.md
@@ -61,8 +61,9 @@ go build -o submarine-operator
 ./submarine-operator
 
 # Step2: Deploy a submarine
-kubectl create ns submarine-admin
-kubectl apply -n submarine-admin -f artifacts/examples/example-submarine.yaml
+kubectl apply -f artifacts/examples/crd.yaml
+kubectl create ns submarine-user-test
+kubectl apply -n submarine-user-test -f artifacts/examples/example-submarine.yaml
 
 # Step3: Exposing Service
 # Method1 -- using minikube ip + NodePort
@@ -79,8 +80,8 @@ $ kubectl port-forward --address 0.0.0.0 -n submarine-user-test service/traefik
 #   (1) Remove all relevant Helm chart releases
 #   (2) Remove all resources in the namespace "submariner-user-test"
 #   (3) Remove all non-namespaced resources (Ex: PersistentVolume) created by client-go API
-#   (4) **Note:** The namespace "submarine-admin" will not be deleted
-kubectl delete submarine example-submarine -n submarine-admin
+#   (4) **Note:** The namespace "submarine-user-test" will not be deleted
+kubectl delete submarine example-submarine -n submarine-user-test
 ```
 
 # Run operator in-cluster
@@ -97,8 +98,9 @@ kubectl apply -f artifacts/examples/submarine-operator-service-account.yaml
 kubectl apply -f artifacts/examples/submarine-operator.yaml
 
 # Step4: Deploy a submarine
-kubectl create ns submarine-admin
-kubectl apply -n submarine-admin -f artifacts/examples/example-submarine.yaml
+kubectl apply -f artifacts/examples/crd.yaml
+kubectl create ns submarine-user-test
+kubectl apply -n submarine-user-test -f artifacts/examples/example-submarine.yaml
 
 # Step5: Inspect submarine-operator POD logs
 kubectl logs -f ${submarine-operator POD}
@@ -121,8 +123,8 @@ $ kubectl port-forward --address 0.0.0.0 -n submarine-user-test service/traefik
 #   (1) Remove all relevant Helm chart releases
 #   (2) Remove all resources in the namespace "submariner-user-test"
 #   (3) Remove all non-namespaced resources (Ex: PersistentVolume) created by client-go API
-#   (4) **Note:** The namespace "submarine-admin" will not be deleted
-kubectl delete submarine example-submarine -n submarine-admin
+#   (4) **Note:** The namespace "submarine-user-test" will not be deleted
+kubectl delete submarine example-submarine -n submarine-user-test
 
 # Step10: Delete "submarine-operator"
 kubectl delete deployment submarine-operator-demo
diff --git a/submarine-cloud-v2/controller.go b/submarine-cloud-v2/controller.go
index 294c0e7..2b1cbcb 100644
--- a/submarine-cloud-v2/controller.go
+++ b/submarine-cloud-v2/controller.go
@@ -112,8 +112,8 @@ type Controller struct {
 
 	// TODO: Need to be modified to implement multi-tenant
 	// Store charts
-	charts     []helm.HelmUninstallInfo
-	incluster  bool
+	charts    []helm.HelmUninstallInfo
+	incluster bool
 }
 
 const (
@@ -1327,8 +1327,6 @@ func (c *Controller) syncHandler(workqueueItem WorkQueueItem) error {
 		utilruntime.HandleError(fmt.Errorf("Invalid resource key: %s", key))
 		return nil
 	}
-	newNamespace := "submarine-user-test"
-
 	klog.Info("syncHandler: ", key, " / ", action)
 
 	if action != DELETE { // Case: ADD & UPDATE
@@ -1348,31 +1346,8 @@ func (c *Controller) syncHandler(workqueueItem WorkQueueItem) error {
 		b, err := json.MarshalIndent(submarine.Spec, "", "  ")
 		fmt.Println(string(b))
 
-		// create submarine in a new namespace
-		ns, err := c.namespaceLister.Get(newNamespace)
-		if errors.IsNotFound(err) {
-			ns, err = c.kubeclientset.CoreV1().Namespaces().Create(context.TODO(),
-				&corev1.Namespace{
-					ObjectMeta: metav1.ObjectMeta{
-						Name: newNamespace,
-						OwnerReferences: []metav1.OwnerReference{
-							*metav1.NewControllerRef(submarine, v1alpha1.SchemeGroupVersion.WithKind("Submarine")),
-						},
-					},
-				},
-				metav1.CreateOptions{})
-		}
-		if err != nil {
-			return err
-		}
-		if !metav1.IsControlledBy(ns, submarine) {
-			msg := fmt.Sprintf(MessageResourceExists, ns.Name)
-			c.recorder.Event(submarine, corev1.EventTypeWarning, ErrResourceExists, msg)
-			return fmt.Errorf(msg)
-		}
-
 		// Install subcharts
-		c.newSubCharts(newNamespace)
+		c.newSubCharts(namespace)
 
 		// Create submarine-server
 		serverImage := submarine.Spec.Server.Image
@@ -1380,31 +1355,31 @@ func (c *Controller) syncHandler(workqueueItem WorkQueueItem) error {
 		if serverImage == "" {
 			serverImage = "apache/submarine:server-" + submarine.Spec.Version
 		}
-		err = c.newSubmarineServer(submarine, newNamespace, serverImage, serverReplicas)
+		err = c.newSubmarineServer(submarine, namespace, serverImage, serverReplicas)
 		if err != nil {
 			return err
 		}
 
 		// Create Submarine Database
-		err = c.newSubmarineDatabase(submarine, newNamespace, &submarine.Spec)
+		err = c.newSubmarineDatabase(submarine, namespace, &submarine.Spec)
 		if err != nil {
 			return err
 		}
 
 		// Create ingress
-		err = c.newIngress(submarine, newNamespace)
+		err = c.newIngress(submarine, namespace)
 		if err != nil {
 			return err
 		}
 
 		// Create RBAC
-		err = c.newSubmarineServerRBAC(submarine, newNamespace)
+		err = c.newSubmarineServerRBAC(submarine, namespace)
 		if err != nil {
 			return err
 		}
 
 		// Create Submarine Tensorboard
-		err = c.newSubmarineTensorboard(submarine, newNamespace, &submarine.Spec)
+		err = c.newSubmarineTensorboard(submarine, namespace, &submarine.Spec)
 		if err != nil {
 			return err
 		}

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@submarine.apache.org
For additional commands, e-mail: dev-help@submarine.apache.org