You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by mo...@apache.org on 2020/04/23 14:49:58 UTC

[zeppelin] branch branch-0.9 updated: [ZEPPELIN-4770] Switch to K8s deployment

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

moon pushed a commit to branch branch-0.9
in repository https://gitbox.apache.org/repos/asf/zeppelin.git


The following commit(s) were added to refs/heads/branch-0.9 by this push:
     new cd3c644  [ZEPPELIN-4770] Switch to K8s deployment
cd3c644 is described below

commit cd3c6441777fcf34407a294d58f65ea907000dde
Author: Philipp Dallig <ph...@gmail.com>
AuthorDate: Wed Apr 22 12:47:44 2020 +0200

    [ZEPPELIN-4770] Switch to K8s deployment
    
    ### What is this PR for?
    We should create a [k8s-deployment](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) for zeppelin-server.
    
    Changes in detail:
     - Switch from Pod to Deployment
     - Creation of a ServiceAccount `zeppelin-server` + update RoleBinding
     - Using a ConfigMap for all Environment variables. I think this ConfigMap give a better overview over all environment variables
     - Label change from `app` to [`app.kubernetes.io/name`](https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/#labels)
    
    ### What type of PR is it?
    - Improvement
    
    ### Todos
    * [ ] - Task
    
    ### What is the Jira issue?
    * https://issues.apache.org/jira/browse/ZEPPELIN-4770
    
    ### How should this be tested?
    * Install on K8s with `kubectl apply -f k8s/zeppelin-server.yml`
    
    ### Questions:
    * Does the licenses files need update? No
    * Is there breaking changes for older versions? No
    * Does this needs documentation? No
    
    Author: Philipp Dallig <ph...@gmail.com>
    
    Closes #3746 from Reamer/k8s_deployment and squashes the following commits:
    
    b8c158a87 [Philipp Dallig] Switch to K8s deployment
    
    (cherry picked from commit d252d0b64a226cabfa6e5b514ca2aef2203c759d)
    Signed-off-by: Lee moon soo <mo...@apache.org>
---
 k8s/zeppelin-server.yaml | 203 ++++++++++++++++++++++++++---------------------
 1 file changed, 113 insertions(+), 90 deletions(-)

diff --git a/k8s/zeppelin-server.yaml b/k8s/zeppelin-server.yaml
index 348e1cd..08b3c03 100644
--- a/k8s/zeppelin-server.yaml
+++ b/k8s/zeppelin-server.yaml
@@ -17,7 +17,7 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: zeppelin-server-conf
+  name: zeppelin-server-conf-map
 data:
   # 'serviceDomain' is a Domain name to use for accessing Zeppelin UI.
   # Should point IP address of 'zeppelin-server' service.
@@ -27,8 +27,21 @@ data:
   #
   # Default value is 'local.zeppelin-project.org' while it points 127.0.0.1 and `kubectl port-forward zeppelin-server` will give localhost to connects.
   # If you have your ingress controller configured to connect to `zeppelin-server` service and have a domain name for it (with wildcard subdomain point the same address), you can replace serviceDomain field with your own domain.
-  serviceDomain: local.zeppelin-project.org:8080
-  sparkContainerImage: spark:2.4.5
+  SERVICE_DOMAIN: local.zeppelin-project.org:8080
+  ZEPPELIN_K8S_SPARK_CONTAINER_IMAGE: spark:2.4.5
+  ZEPPELIN_K8S_CONTAINER_IMAGE: apache/zeppelin:0.9.0-SNAPSHOT
+  ZEPPELIN_HOME: /zeppelin
+  ZEPPELIN_SERVER_RPC_PORTRANGE: 12320:12320
+  # default value of 'master' property for spark interpreter.
+  MASTER: k8s://https://kubernetes.default.svc
+  # default value of 'SPARK_HOME' property for spark interpreter.
+  SPARK_HOME: /spark
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: zeppelin-server-conf
+data:
   nginx.conf: |
     daemon off;
     worker_processes auto;
@@ -74,96 +87,101 @@ data:
       }
     }
 ---
-kind: Pod
-apiVersion: v1
+apiVersion: apps/v1
+kind: Deployment
 metadata:
   name: zeppelin-server
   labels:
-    app: zeppelin-server
+    app.kubernetes.io/name: zeppelin-server
 spec:
-  automountServiceAccountToken: true
-  containers:
-  - name: zeppelin-server
-    image: apache/zeppelin:0.9.0-SNAPSHOT
-    command: ["sh", "-c", "$(ZEPPELIN_HOME)/bin/zeppelin.sh"]
-    lifecycle:
-      preStop:
-        exec:
-          # SIGTERM triggers a quick exit; gracefully terminate instead
-          command: ["sh", "-c", "ps -ef | grep org.apache.zeppelin.server.ZeppelinServer | grep -v grep | awk '{print $2}' | xargs kill"]
-    env:
-    - name: ZEPPELIN_K8S_CONTAINER_IMAGE
-      value: apache/zeppelin:0.9.0-SNAPSHOT
-    - name: ZEPPELIN_HOME
-      value: /zeppelin
-    - name: ZEPPELIN_SERVER_RPC_PORTRANGE
-      value: 12320:12320
-    - name: POD_UID
-      valueFrom:
-        fieldRef:
-          apiVersion: v1
-          fieldPath: metadata.uid
-    - name: POD_NAME
-      valueFrom:
-        fieldRef:
-          apiVersion: v1
-          fieldPath: metadata.name
-    - name: ZEPPELIN_K8S_SPARK_CONTAINER_IMAGE
-      valueFrom:
-        configMapKeyRef:
-          name: zeppelin-server-conf
-          key: sparkContainerImage
-    - name: SERVICE_DOMAIN
-      valueFrom:
-        configMapKeyRef:
+  replicas: 1
+  selector:
+    matchLabels:
+      app.kubernetes.io/name: zeppelin-server
+  strategy:
+    type: RollingUpdate
+  template:
+    metadata:
+      labels:
+        app.kubernetes.io/name: zeppelin-server
+    spec:
+      serviceAccountName: zeppelin-server
+      volumes:
+      - name: nginx-conf
+        configMap:
           name: zeppelin-server-conf
-          key: serviceDomain
-    - name: MASTER   # default value of 'master' property for spark interpreter.
-      value: k8s://https://kubernetes.default.svc
-    - name: SPARK_HOME # default value of 'SPARK_HOME' property for spark interpreter.
-      value: /spark
-    # volumeMounts:
-    #  - name: zeppelin-server-notebook-volume     # configure this to persist notebook
-    #    mountPath: /zeppelin/notebook
-    #  - name: zeppelin-server-conf                # configure this to persist Zeppelin configuration
-    #    mountPath: /zeppelin/conf
-    #  - name: zeppelin-server-custom-k8s          # configure this to mount customized Kubernetes spec for interpreter
-    #    mountPath: /zeppelin/k8s
-  - name: zeppelin-server-gateway
-    image: nginx:1.14.0
-    command: ["/bin/sh", "-c"]
-    args:
-      - cp -f /tmp/conf/nginx.conf /etc/nginx/nginx.conf;
-        sed -i -e "s/SERVICE_DOMAIN/$(cat /tmp/conf/serviceDomain)/g" /etc/nginx/nginx.conf;
-        sed -i -e "s/NAMESPACE/$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)/g" /etc/nginx/nginx.conf;
-        cat /etc/nginx/nginx.conf;
-        /usr/sbin/nginx
-    volumeMounts:
-      - name: zeppelin-server-conf-volume
-        mountPath: /tmp/conf
-    lifecycle:
-      preStop:
-        exec:
-          # SIGTERM triggers a quick exit; gracefully terminate instead
-          command: ["/usr/sbin/nginx", "-s", "quit"]
-  - name: dnsmasq  # nginx requires dns resolver for dynamic dns resolution
-    image: "janeczku/go-dnsmasq:release-1.0.5"
-    args:
-      - --listen
-      - "127.0.0.1:53"
-      - --default-resolver
-      - --append-search-domains
-      - --hostsfile=/etc/hosts
-      - --verbose
-  volumes:
-  - name: zeppelin-server-conf-volume
-    configMap:
-      name: zeppelin-server-conf
-      items:
-      - key: nginx.conf
-        path: nginx.conf
-      - key: serviceDomain
-        path: serviceDomain
+          items:
+          - key: nginx.conf
+            path: nginx.conf
+      containers:
+      - name: zeppelin-server
+        image: apache/zeppelin:0.9.0-SNAPSHOT
+        command: ["sh", "-c", "$(ZEPPELIN_HOME)/bin/zeppelin.sh"]
+        lifecycle:
+          preStop:
+            exec:
+              # SIGTERM triggers a quick exit; gracefully terminate instead
+              command: ["sh", "-c", "ps -ef | grep org.apache.zeppelin.server.ZeppelinServer | grep -v grep | awk '{print $2}' | xargs kill"]
+        ports:
+        - name: http
+          containerPort: 8080
+        - name: https
+          containerPort: 8443
+        - name: rpc
+          containerPort: 12320
+        env:
+        - name: POD_UID
+          valueFrom:
+            fieldRef:
+              apiVersion: v1
+              fieldPath: metadata.uid
+        - name: POD_NAME
+          valueFrom:
+            fieldRef:
+              apiVersion: v1
+              fieldPath: metadata.name
+        envFrom:
+        - configMapRef:
+            name: zeppelin-server-conf-map
+      # volumeMounts:
+      #  - name: zeppelin-server-notebook-volume     # configure this to persist notebook
+      #    mountPath: /zeppelin/notebook
+      #  - name: zeppelin-server-conf                # configure this to persist Zeppelin configuration
+      #    mountPath: /zeppelin/conf
+      #  - name: zeppelin-server-custom-k8s          # configure this to mount customized Kubernetes spec for interpreter
+      #    mountPath: /zeppelin/k8s
+      - name: zeppelin-server-gateway
+        image: nginx:1.14.0
+        command: ["/bin/sh", "-c"]
+        env:
+        - name: SERVICE_DOMAIN
+          valueFrom:
+            configMapKeyRef:
+              name: zeppelin-server-conf-map
+              key: SERVICE_DOMAIN
+        args:
+          - cp -f /tmp/conf/nginx.conf /etc/nginx/nginx.conf;
+            sed -i -e "s/SERVICE_DOMAIN/$SERVICE_DOMAIN/g" /etc/nginx/nginx.conf;
+            sed -i -e "s/NAMESPACE/$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)/g" /etc/nginx/nginx.conf;
+            cat /etc/nginx/nginx.conf;
+            /usr/sbin/nginx
+        volumeMounts:
+          - name: nginx-conf
+            mountPath: /tmp/conf
+        lifecycle:
+          preStop:
+            exec:
+              # SIGTERM triggers a quick exit; gracefully terminate instead
+              command: ["/usr/sbin/nginx", "-s", "quit"]
+      - name: dnsmasq  # nginx requires dns resolver for dynamic dns resolution
+        image: "janeczku/go-dnsmasq:release-1.0.5"
+        args:
+          - --listen
+          - "127.0.0.1:53"
+          - --default-resolver
+          - --append-search-domains
+          - --hostsfile=/etc/hosts
+          - --verbose
 ---
 kind: Service
 apiVersion: v1
@@ -176,7 +194,12 @@ spec:
     - name: rpc            # port name is referenced in the code. So it shouldn't be changed.
       port: 12320
   selector:
-    app: zeppelin-server
+    app.kubernetes.io/name: zeppelin-server
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: zeppelin-server
 ---
 kind: Role
 apiVersion: rbac.authorization.k8s.io/v1
@@ -196,7 +219,7 @@ metadata:
   name: zeppelin-server-role-binding
 subjects:
 - kind: ServiceAccount
-  name: default
+  name: zeppelin-server
 roleRef:
   kind: Role
   name: zeppelin-server-role