diff --git a/charts/zeppelin/.helmignore b/charts/zeppelin/.helmignore new file mode 100644 index 00000000000..5d56da2c3d9 --- /dev/null +++ b/charts/zeppelin/.helmignore @@ -0,0 +1,40 @@ +# +# 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. +# + +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/zeppelin/Chart.yaml b/charts/zeppelin/Chart.yaml new file mode 100644 index 00000000000..867aa809ee3 --- /dev/null +++ b/charts/zeppelin/Chart.yaml @@ -0,0 +1,32 @@ +# +# 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: v2 + +name: zeppelin + +description: A Helm chart for deploying Apache Zeppelin on Kubernetes. + +type: application + +version: 0.1.0 + +appVersion: 0.11.2 + +maintainers: +- name: ChenYi015 + email: github@chenyicn.net diff --git a/charts/zeppelin/README.md b/charts/zeppelin/README.md new file mode 100644 index 00000000000..44f5e1eef48 --- /dev/null +++ b/charts/zeppelin/README.md @@ -0,0 +1,82 @@ +# zeppelin + +![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.11.2](https://img.shields.io/badge/AppVersion-0.11.2-informational?style=flat-square) + +A Helm chart for deploying Apache Zeppelin on Kubernetes. + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| nameOverride | string | `""` | String to partially override release name. | +| fullnameOverride | string | `""` | String to fully override release name. | +| global.image.registry | string | `"docker.io"` | Global image registry. | +| global.image.pullPolicy | string | `"IfNotPresent"` | Global image pull policy. | +| global.image.pullSecrets | list | `[]` | Global image pull secrets for private image registry. | +| server.image.registry | string | If not set, `global.image.registry` will be used. | Zeppelin server image registry. | +| server.image.repository | string | `"apache/zeppelin"` | Zeppelin server image repository. | +| server.image.tag | string | If not set, the chart appVersion will be used. | Zeppelin image tag. | +| server.image.pullPolicy | string | `"IfNotPresent"` | Zeppelin server image pull policy. | +| server.image.pullSecrets | list | `[]` | Zeppelin server image pull secrets for private image registry. | +| server.conf | object | `{}` | Zeppelin configurations. For detailed information, please refer: https://zeppelin.apache.org/docs/latest/setup/operation/configuration.html. | +| server.labels | object | `{}` | Extra labels for Zeppelin server pods. | +| server.annotations | object | `{}` | Extra annotations for Zeppelin server pods. | +| server.volumes | list | `[]` | Volumes for Zeppelin server pods. | +| server.nodeSelector | object | `{}` | Node selector for Zeppelin server pods. | +| server.affinity | object | `{}` | Affinity for Zeppelin server pods. | +| server.tolerations | list | `[]` | List of node taints to tolerate for Zeppelin server pods. | +| server.priorityClassName | string | `""` | Priority class for Zeppelin server pods. | +| server.podSecurityContext | object | `{}` | Security context for Zeppelin server pods. | +| server.env | list | `[{"name":"ZEPPELIN_HOME","value":"/opt/zeppelin"},{"name":"SPARK_HOME","value":"/opt/spark"},{"name":"SERVICE_DOMAIN","value":"local.zeppelin-project.org:8080"},{"name":"ZEPPELIN_PORT","value":"8080"},{"name":"ZEPPELIN_SERVER_RPC_PORTRANGE","value":"12320:12320"},{"name":"ZEPPELIN_K8S_TEMPLATE_DIR","value":"/opt/zeppelin/k8s"}]` | Environment variables for Zeppelin server containers. | +| server.envFrom | list | `[]` | Environment variable sources for Zeppelin server containers. | +| server.volumeMounts | list | `[]` | Volume mounts for Zeppelin server containers. | +| server.resources | object | `{}` | Resource requests and limits for Zeppelin server containers. | +| server.securityContext | object | `{"runAsGroup":0,"runAsNonRoot":true,"runAsUser":1000}` | Security context for Zeppelin server containers. | +| server.serviceAccount.create | bool | `true` | Specifies whether a service account should be created for the Zeppelin server. | +| server.serviceAccount.name | string | `""` | Optional name for the Zeppelin server service account. | +| server.serviceAccount.annotations | object | `{}` | Extra annotations for the Zeppelin server service account. | +| server.service.type | string | `"ClusterIP"` | Service type for Zeppelin server. | +| server.service.port | int | `8080` | Service port for Zeppelin server. | +| server.ingress.enable | bool | `false` | Enable ingress for Zeppelin server. | +| server.ingress.className | string | `""` | Ingress class name for Zeppelin server ingress. | +| server.ingress.annotations | object | `{}` | Annotations for the Zeppelin server ingress. | +| server.ingress.hosts | list | `[{"host":"local.zeppelin-project.org","paths":[{"path":"/","pathType":"ImplementationSpecific"}]}]` | Hosts for Zeppelin server ingress. | +| server.ingress.tls | list | `[]` | TLS configuration for Zeppelin server ingress. | +| interpreter.image.registry | string | If not set, `global.image.registry` will be used. | Zeppelin interpreter image registry. | +| interpreter.image.repository | string | `"apache/zeppelin-interpreter"` | Zeppelin interpreter image repository. | +| interpreter.image.tag | string | If not set, the chart appVersion will be used. | Zeppelin interpreter image tag. | +| interpreter.image.pullPolicy | string | `"IfNotPresent"` | Zeppelin interpreter image pull policy. | +| interpreter.image.pullSecrets | list | `[]` | Zeppelin interpreter image pull secrets for private image registry. | +| interpreter.spark.image.registry | string | If not set, `global.image.registry` will be used. | Spark image registry. | +| interpreter.spark.image.repository | string | `"spark"` | Spark image repository. | +| interpreter.spark.image.tag | string | `"3.5.3"` | Spark image tag. | +| interpreter.spark.conf | object | `{"spark.kubernetes.driver.podTemplateFile":"file:///opt/spark/conf/driver-pod-template.yaml","spark.kubernetes.executor.podTemplateFile":"file:///opt/spark/conf/executor-pod-template.yaml"}` | Spark configurations. | +| interpreter.spark.labels | object | `{}` | Extra labels for Spark pods. | +| interpreter.spark.annotations | object | `{}` | Extra annotations for Spark pods. | +| interpreter.spark.volumes | list | `[]` | Volumes for Spark pods. | +| interpreter.spark.env | list | `[]` | Environment variables for Spark containers. | +| interpreter.spark.envFrom | list | `[]` | Environment variable sources for Spark containers. | +| interpreter.spark.volumeMounts | list | `[]` | Volume mounts for Spark containers. | +| interpreter.labels | object | `{}` | Extra labels for Zeppelin interpreter pods. | +| interpreter.annotations | object | `{}` | Extra annotations for Zeppelin interpreter pods. | +| interpreter.volumes | list | `[]` | Volumes for Zeppelin interpreter pods. | +| interpreter.nodeSelector | object | `{}` | Node selector for Zeppelin interpreter pods. | +| interpreter.affinity | object | `{}` | Affinity for Zeppelin interpreter pods. | +| interpreter.tolerations | list | `[]` | List of node taints to tolerate for Zeppelin interpreter pods. | +| interpreter.priorityClassName | string | `""` | Priority class for Zeppelin interpreter pods. | +| interpreter.podSecurityContext | object | `{}` | Security context for Zeppelin interpreter pods. | +| interpreter.env | list | `[{"name":"ZEPPELIN_HOME","value":"/opt/zeppelin"},{"name":"SPARK_HOME","value":"/opt/spark"},{"name":"SPARK_CONF_DIR","value":"/opt/spark/conf"}]` | Environment variables for Zeppelin interpreter containers. | +| interpreter.envFrom | list | `[]` | Environment variable sources for Zeppelin interpreter containers. | +| interpreter.volumeMounts | list | `[]` | Volume mounts for Zeppelin interpreter containers. | +| interpreter.resources | object | `{}` | Resource requests and limits for Zeppelin interpreter containers. | +| interpreter.securityContext | object | `{"runAsGroup":0,"runAsNonRoot":true,"runAsUser":1000}` | Security context for Zeppelin interpreter containers. | +| interpreter.serviceAccount.serviceAccount | string | `nil` | | +| interpreter.serviceAccount.create | bool | `true` | Specifies whether a service account should be created for the Zeppelin interpreter. | +| interpreter.serviceAccount.name | string | `""` | Optional name for the Zeppelin interpreter service account. | +| interpreter.serviceAccount.annotations | object | `{}` | Extra annotations for the Zeppelin interpreter service account. | + +## Maintainers + +| Name | Email | Url | +| ---- | ------ | --- | +| ChenYi015 | | | diff --git a/charts/zeppelin/README.md.gotmpl b/charts/zeppelin/README.md.gotmpl new file mode 100644 index 00000000000..0417bb2afdf --- /dev/null +++ b/charts/zeppelin/README.md.gotmpl @@ -0,0 +1,30 @@ +{{- /* +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. +*/ -}} + +{{ template "chart.header" . }} + +{{ template "chart.deprecationWarning" . }} + +{{ template "chart.badgesSection" . }} + +{{ template "chart.description" . }} + +{{ template "chart.homepageLine" . }} + +{{ template "chart.valuesSection" . }} + +{{ template "chart.maintainersSection" . }} diff --git a/charts/zeppelin/files/conf/configuration.xsl b/charts/zeppelin/files/conf/configuration.xsl new file mode 100644 index 00000000000..e2d68370ad3 --- /dev/null +++ b/charts/zeppelin/files/conf/configuration.xsl @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + +
namevaluedescription
+ + +
+
diff --git a/charts/zeppelin/files/conf/interpreter-list b/charts/zeppelin/files/conf/interpreter-list new file mode 100644 index 00000000000..9b9b8a42898 --- /dev/null +++ b/charts/zeppelin/files/conf/interpreter-list @@ -0,0 +1,37 @@ +# 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. +# +# +# [name] [maven artifact] [description] + +alluxio org.apache.zeppelin:zeppelin-alluxio:0.11.2 Alluxio interpreter +angular org.apache.zeppelin:zeppelin-angular:0.11.2 HTML and AngularJS view rendering +bigquery org.apache.zeppelin:zeppelin-bigquery:0.11.2 BigQuery interpreter +cassandra org.apache.zeppelin:zeppelin-cassandra:0.11.2 Cassandra interpreter +elasticsearch org.apache.zeppelin:zeppelin-elasticsearch:0.11.2 Elasticsearch interpreter +file org.apache.zeppelin:zeppelin-file:0.11.2 HDFS file interpreter +flink org.apache.zeppelin:zeppelin-flink:0.11.2 Flink interpreter +groovy org.apache.zeppelin:zeppelin-groovy:0.11.2 Groovy interpreter +hbase org.apache.zeppelin:zeppelin-hbase:0.11.2 Hbase interpreter +java org.apache.zeppelin:zeppelin-java:0.11.2 Java interpreter +jdbc org.apache.zeppelin:zeppelin-jdbc:0.11.2 Jdbc interpreter +livy org.apache.zeppelin:zeppelin-livy:0.11.2 Livy interpreter +md org.apache.zeppelin:zeppelin-markdown:0.11.2 Markdown support +neo4j org.apache.zeppelin:zeppelin-neo4j:0.11.2 Neo4j interpreter +python org.apache.zeppelin:zeppelin-python:0.11.2 Python interpreter +shell org.apache.zeppelin:zeppelin-shell:0.11.2 Shell command +sparql org.apache.zeppelin:zeppelin-sparql:0.11.2 Sparql interpreter +submarine org.apache.zeppelin:zeppelin-submarine:0.11.2 Submarine interpreter diff --git a/charts/zeppelin/files/conf/log4j.properties b/charts/zeppelin/files/conf/log4j.properties new file mode 100644 index 00000000000..5e900ba0387 --- /dev/null +++ b/charts/zeppelin/files/conf/log4j.properties @@ -0,0 +1,28 @@ +# +# 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. +# + +log4j.rootLogger = INFO, stdout, dailyfile + +log4j.appender.stdout = org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout = org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%5p [%d] ({%t} %F[%M]:%L) - %m%n + +log4j.appender.dailyfile.DatePattern=.yyyy-MM-dd +log4j.appender.dailyfile = org.apache.log4j.DailyRollingFileAppender +log4j.appender.dailyfile.File = ${zeppelin.log.file} +log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout +log4j.appender.dailyfile.layout.ConversionPattern=%5p [%d] ({%t} %F[%M]:%L) - %m%n diff --git a/charts/zeppelin/files/conf/log4j2.properties b/charts/zeppelin/files/conf/log4j2.properties new file mode 100644 index 00000000000..8b5f4e0c231 --- /dev/null +++ b/charts/zeppelin/files/conf/log4j2.properties @@ -0,0 +1,49 @@ +# +# 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. +# + +# This affects logging for both user code and Flink +rootLogger.level = INFO +rootLogger.appenderRef.file.ref = MainAppender + +# Uncomment this if you want to _only_ change Flink's logging +#logger.flink.name = org.apache.flink +#logger.flink.level = INFO + +# The following lines keep the log level of common libraries/connectors on +# log level INFO. The root logger does not override this. You have to manually +# change the log levels here. +logger.akka.name = akka +logger.akka.level = INFO +logger.kafka.name= org.apache.kafka +logger.kafka.level = INFO +logger.hadoop.name = org.apache.hadoop +logger.hadoop.level = INFO +logger.zookeeper.name = org.apache.zookeeper +logger.zookeeper.level = INFO + +# Log all infos in the given file +appender.main.name = MainAppender +appender.main.type = File +appender.main.append = false +appender.main.fileName = ${sys:zeppelin.log.file} +appender.main.layout.type = PatternLayout +appender.main.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %-60c %x - %m%n + +# Suppress the irrelevant (wrong) warnings from the Netty channel handler +logger.netty.name = org.apache.flink.shaded.akka.org.jboss.netty.channel.DefaultChannelPipeline +logger.netty.level = OFF diff --git a/charts/zeppelin/templates/_helpers.tpl b/charts/zeppelin/templates/_helpers.tpl new file mode 100644 index 00000000000..a1361b9b20e --- /dev/null +++ b/charts/zeppelin/templates/_helpers.tpl @@ -0,0 +1,68 @@ +{{- /* +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. +*/ -}} + +{{/* +Expand the name of the chart. +*/}} +{{- define "zeppelin.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "zeppelin.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "zeppelin.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "zeppelin.labels" -}} +helm.sh/chart: {{ include "zeppelin.chart" . }} +{{ include "zeppelin.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "zeppelin.selectorLabels" -}} +app.kubernetes.io/name: {{ include "zeppelin.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} diff --git a/charts/zeppelin/templates/interpreter/_helpers.tpl b/charts/zeppelin/templates/interpreter/_helpers.tpl new file mode 100644 index 00000000000..accabd52345 --- /dev/null +++ b/charts/zeppelin/templates/interpreter/_helpers.tpl @@ -0,0 +1,73 @@ +{{- /* +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. +*/ -}} + +{{/* +Create the name of Zeppelin interpreter. +*/}} +{{- define "zeppelin.interpreter.name" -}} +{{- include "zeppelin.fullname" . }}-interpreter +{{- end -}} + +{{/* +Common labels for Zeppelin server. +*/}} +{{- define "zeppelin.interpreter.labels" -}} +{{ include "zeppelin.labels" . }} +app.kubernetes.io/component: zeppelin-interpreter +{{- end }} + +{{/* +Create the name of the service account for Zeppelin interpreter. +*/}} +{{- define "zeppelin.interpreter.serviceAccountName" -}} +{{- if .Values.interpreter.serviceAccount.create }} +{{- default (include "zeppelin.interpreter.name" .) .Values.interpreter.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.interpreter.serviceAccount.name }} +{{- end }} +{{- end -}} + +{{/* +Create the name of the role for Zeppelin interpreter. +*/}} +{{- define "zeppelin.interpreter.roleName" -}} +{{- include "zeppelin.interpreter.serviceAccountName" . }} +{{- end -}} + +{{/* +Create the name of the role binding for Zeppelin interpreter. +*/}} +{{- define "zeppelin.interpreter.roleBindingName" -}} +{{- include "zeppelin.interpreter.serviceAccountName" . }} +{{- end -}} + +{{/* +Create the name of the config map for Zeppelin interpreter. +*/}} +{{- define "zeppelin.interpreter.configMapName" -}} +{{- include "zeppelin.interpreter.name" . }}-conf +{{- end -}} + +{{/* +Create the name of the Zeppelin interpreter image to use +*/}} +{{- define "zeppelin.interpreter.image" -}} +{{- $imageRegistry := .Values.interpreter.image.registry | default .Values.global.image.registry | default "docker.io" }} +{{- $imageRepository := .Values.interpreter.image.repository | default "apache/zeppelin" }} +{{- $imageTag := .Values.interpreter.image.tag | default "latest" }} +{{- printf "%s/%s:%s" $imageRegistry $imageRepository $imageTag }} +{{- end -}} diff --git a/charts/zeppelin/templates/interpreter/configmap.yaml b/charts/zeppelin/templates/interpreter/configmap.yaml new file mode 100644 index 00000000000..c4009a6d993 --- /dev/null +++ b/charts/zeppelin/templates/interpreter/configmap.yaml @@ -0,0 +1,238 @@ +{{- /* +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: v1 +kind: ConfigMap +metadata: + name: {{ include "zeppelin.interpreter.configMapName" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "zeppelin.labels" . | nindent 4 }} +data: + interpreter-spec.yaml: | + apiVersion: v1 + kind: Pod + metadata: + name: {{ "{{" }} zeppelin.k8s.interpreter.pod.name {{ "}}" }} + namespace: {{ "{{" }} zeppelin.k8s.interpreter.namespace {{ "}}" }} + labels: + {{- include "zeppelin.interpreter.labels" . | nindent 8 }} + app: {{ "{{" }} zeppelin.k8s.interpreter.pod.name {{ "}}" }} + interpreterGroupId: {{ "{{" }} zeppelin.k8s.interpreter.group.id {{ "}}" }} + interpreterSettingName: {{ "{{" }} zeppelin.k8s.interpreter.setting.name {{ "}}" }} + user: {{ "{{" }} zeppelin.k8s.interpreter.user {{ "}}" }} + {% if zeppelin.k8s.server.uid is defined %} + ownerReferences: + - apiVersion: v1 + kind: Pod + name: {{ "{{" }} zeppelin.k8s.server.pod.name }} + controller: false + blockOwnerDeletion: false + uid: {{ "{{" }} zeppelin.k8s.server.uid }} + {% endif %} + spec: + {% if zeppelin.k8s.interpreter.group.name == "spark" %} + initContainers: + - name: spark-home-init + image: {{ include "zeppelin.interpreter.spark.image" . }} + imagePullPolicy: {{ .Values.interpreter.image.pullPolicy | default .Values.global.image.pullPolicy | default "IfNotPresent" }} + command: + - sh + - -c + - cp -r /opt/spark/* /spark/ + volumeMounts: + - name: spark + mountPath: /spark + {% endif %} + containers: + - name: zeppelin-interpreter + image: {{ include "zeppelin.interpreter.image" . }} + imagePullPolicy: {{ .Values.interpreter.image.pullPolicy | default .Values.global.image.pullPolicy | default "IfNotPresent" }} + args: + - $(ZEPPELIN_HOME)/bin/interpreter.sh + - -d + - $(ZEPPELIN_HOME)/interpreter/{{ "{{" }} zeppelin.k8s.interpreter.group.name {{ "}}" }} + - -r + - {{ "{{" }} zeppelin.k8s.interpreter.rpc.portRange {{ "}}" }} + - -c + - {{ "{{" }} zeppelin.k8s.server.rpc.service {{ "}}" }} + - -p + - {{ "{{" }} zeppelin.k8s.server.rpc.portRange {{ "}}" }} + - -i + - {{ "{{" }} zeppelin.k8s.interpreter.group.id {{ "}}" }} + - -l + - {{ "{{" }} zeppelin.k8s.interpreter.localRepo {{ "}}" }}/{{ "{{" }} zeppelin.k8s.interpreter.setting.name {{ "}}" }} + - -g + - {{ "{{" }} zeppelin.k8s.interpreter.setting.name {{ "}}" }} + env: + {% for key, value in zeppelin.k8s.envs.items() %} + - name: {{ "{{" }} key {{ "}}" }} + value: {{ "{{" }} value {{ "}}" }} + {% endfor %} + {{- with .Values.interpreter.env }} + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.envFrom }} + envFrom: + {{- toYaml . | nindent 8 }} + {{- end }} + {% if zeppelin.k8s.interpreter.cores is defined and zeppelin.k8s.interpreter.memory is defined %} + resources: + requests: + memory: "{{ "{{" }} zeppelin.k8s.interpreter.memory {{ "}}" }}" + cpu: "{{ "{{" }} zeppelin.k8s.interpreter.cores {{ "}}" }}" + limits: + cpu: "{{ "{{" }} zeppelin.k8s.interpreter.cores {{ "}}" }}" + {% if zeppelin.k8s.interpreter.gpu.type is defined and zeppelin.k8s.interpreter.gpu.nums is defined %} + {{ "{{" }} zeppelin.k8s.interpreter.gpu.type {{ "}}" }}: " {{ "{{" }} zeppelin.k8s.interpreter.gpu.nums {{ "}}" }}" + {% endif %} + {% else %} + {% if zeppelin.k8s.interpreter.gpu.type is defined and zeppelin.k8s.interpreter.gpu.nums is defined %} + resources: + limits: + {{ "{{" }} zeppelin.k8s.interpreter.gpu.type {{ "}}" }}: " {{ "{{" }} zeppelin.k8s.interpreter.gpu.nums {{ "}}" }}" + {% endif %} + {% endif %} + volumeMounts: + {% if zeppelin.k8s.interpreter.group.name == "spark" %} + - name: spark + mountPath: /opt/spark + - name: spark-conf + subPath: spark-defaults.conf + mountPath: /opt/spark/conf/spark-defaults.conf + - name: spark-conf + subPath: driver-pod-template.yaml + mountPath: /opt/spark/conf/driver-pod-template.yaml + - name: spark-conf + subPath: executor-pod-template.yaml + mountPath: /opt/spark/conf/executor-pod-template.yaml + {% endif %} + {{- with .Values.interpreter.volumeMounts }} + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.securityContext }} + securityContext: + {{- toYaml . | nindent 10 }} + {{- end }} + {{- with .Values.global.image.pullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 6 }} + {{- end }} + volumes: + {% if zeppelin.k8s.interpreter.group.name == "spark" %} + - name: spark + emptyDir: {} + - name: spark-conf + configMap: + name: {{ include "zeppelin.interpreter.spark.configMapName" . }} + items: + - key: spark-defaults.conf + path: spark-defaults.conf + - key: driver-pod-template.yaml + path: driver-pod-template.yaml + - key: executor-pod-template.yaml + path: executor-pod-template.yaml + {% endif %} + {{- with .Values.interpreter.volumes }} + {{- toYaml . | nindent 6 }} + {{- end }} + {{- with .Values.interpreter.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "zeppelin.interpreter.serviceAccountName" . }} + {% if zeppelin.k8s.interpreter.group.name == "spark" %} + automountServiceAccountToken: true + {% else %} + automountServiceAccountToken: false + {% endif %} + {{- with .Values.interpreter.podSecurityContext }} + securityContext: + {{- toYaml . | nindent 8 }} + {{- end }} + + --- + apiVersion: v1 + kind: Service + metadata: + name: {{ "{{" }} zeppelin.k8s.interpreter.pod.name {{ "}}" }} + namespace: {{ "{{" }} zeppelin.k8s.interpreter.namespace {{ "}}" }} + {% if zeppelin.k8s.server.uid is defined %} + ownerReferences: + - apiVersion: v1 + controller: false + blockOwnerDeletion: false + kind: Pod + name: {{ "{{" }} zeppelin.k8s.server.pod.name {{ "}}" }} + uid: {{ "{{" }} zeppelin.k8s.server.uid {{ "}}" }} + {% endif %} + spec: + clusterIP: None + ports: + - name: intp + port: 12321 + {% if zeppelin.k8s.interpreter.group.name == "spark" %} + - name: spark-driver + port: 22321 + - name: spark-blockmanager + port: 22322 + - name: spark-ui + port: 4040 + {% endif %} + selector: + {{- include "zeppelin.interpreter.labels" . | nindent 8 }} + app: {{ "{{" }} zeppelin.k8s.interpreter.pod.name {{ "}}" }} + + {% if zeppelin.k8s.interpreter.group.name == "spark" %} + {% if zeppelin.k8s.spark.useIngress is defined and zeppelin.k8s.spark.useIngress == "true" %} + --- + apiVersion: networking.k8s.io/v1 + kind: Ingress + metadata: + name: spark-ui-{{ "{{" }} zeppelin.k8s.interpreter.pod.name {{ "}}" }} + namespace: {{ "{{" }} zeppelin.k8s.interpreter.namespace {{ "}}" }} + {% if zeppelin.k8s.server.uid is defined %} + ownerReferences: + - apiVersion: v1 + controller: false + blockOwnerDeletion: false + kind: Pod + name: {{ "{{" }} zeppelin.k8s.server.pod.name {{ "}}" }} + uid: {{ "{{" }} zeppelin.k8s.server.uid {{ "}}" }} + {% endif %} + spec: + rules: + - host: {{ "{{" }} zeppelin.k8s.spark.ingress.host {{ "}}" }} + http: + paths: + - pathType: Prefix + path: / + backend: + service: + name: {{ "{{" }} zeppelin.k8s.interpreter.pod.name {{ "}}" }} + port: + number: 4040 + {% endif %} + {% endif %} diff --git a/charts/zeppelin/templates/interpreter/role.yaml b/charts/zeppelin/templates/interpreter/role.yaml new file mode 100644 index 00000000000..57712217976 --- /dev/null +++ b/charts/zeppelin/templates/interpreter/role.yaml @@ -0,0 +1,47 @@ +{{- /* +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: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ include "zeppelin.interpreter.roleName" . }} + namespace: {{ .Release.Namespace }} +rules: +- apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - watch + - create + - update + - delete + - deletecollection +- apiGroups: + - "" + resources: + - configmaps + - services + verbs: + - get + - list + - watch + - create + - update + - delete \ No newline at end of file diff --git a/charts/zeppelin/templates/interpreter/rolebinding.yaml b/charts/zeppelin/templates/interpreter/rolebinding.yaml new file mode 100644 index 00000000000..68f8561feda --- /dev/null +++ b/charts/zeppelin/templates/interpreter/rolebinding.yaml @@ -0,0 +1,29 @@ +{{- /* +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: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ include "zeppelin.interpreter.roleBindingName" . }} + namespace: {{ .Release.Namespace }} +subjects: +- kind: ServiceAccount + name: {{ include "zeppelin.interpreter.serviceAccountName" . }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ include "zeppelin.interpreter.roleName" . }} \ No newline at end of file diff --git a/charts/zeppelin/templates/interpreter/serviceaccount.yaml b/charts/zeppelin/templates/interpreter/serviceaccount.yaml new file mode 100644 index 00000000000..bdfdaa9cc8a --- /dev/null +++ b/charts/zeppelin/templates/interpreter/serviceaccount.yaml @@ -0,0 +1,30 @@ +{{- /* +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. +*/ -}} + +{{ if .Values.interpreter.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "zeppelin.interpreter.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "zeppelin.labels" . | nindent 4 }} + {{- with .Values.interpreter.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/charts/zeppelin/templates/interpreter/spark/_helpers.tpl b/charts/zeppelin/templates/interpreter/spark/_helpers.tpl new file mode 100644 index 00000000000..9ff9aaa5f70 --- /dev/null +++ b/charts/zeppelin/templates/interpreter/spark/_helpers.tpl @@ -0,0 +1,40 @@ +{{- /* +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. +*/ -}} + +{{/* +Create the name of Zeppelin Spark interpreter. +*/}} +{{- define "zeppelin.interpreter.spark.name" -}} +{{- include "zeppelin.interpreter.name" . }}-spark +{{- end -}} + +{{/* +Create the name of the config map for Zeppelin Spark interpreter. +*/}} +{{- define "zeppelin.interpreter.spark.configMapName" -}} +{{- include "zeppelin.interpreter.spark.name" . }}-conf +{{- end -}} + +{{/* +Create the name of the Spark image to use +*/}} +{{- define "zeppelin.interpreter.spark.image" -}} +{{- $imageRegistry := .Values.interpreter.spark.image.registry | default .Values.global.image.registry | default "docker.io" }} +{{- $imageRepository := .Values.interpreter.spark.image.repository | default "spark" }} +{{- $imageTag := .Values.interpreter.spark.image.tag | default "latest" }} +{{- printf "%s/%s:%s" $imageRegistry $imageRepository $imageTag }} +{{- end -}} diff --git a/charts/zeppelin/templates/interpreter/spark/configmap.yaml b/charts/zeppelin/templates/interpreter/spark/configmap.yaml new file mode 100644 index 00000000000..c73af578ca1 --- /dev/null +++ b/charts/zeppelin/templates/interpreter/spark/configmap.yaml @@ -0,0 +1,141 @@ +{{- /* +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: v1 +kind: ConfigMap +metadata: + name: {{ include "zeppelin.interpreter.spark.configMapName" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "zeppelin.labels" . | nindent 4 }} +data: + spark-defaults.conf: | + # + # 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. + # + + # Default system properties included when running spark-submit. + # This is useful for setting default environmental settings. + + {{- range $key, $value := .Values.interpreter.spark.conf }} + {{ $key }} {{ $value }} + {{- end }} + + driver-pod-template.yaml: | + metadata: + {{- with .Values.interpreter.spark.labels }} + labels: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.spark.annotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + spec: + containers: + - name: spark-kubernetes-driver + {{- with .Values.interpreter.spark.env }} + env: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.spark.envFrom }} + envFrom: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.spark.volumeMounts }} + volumeMounts: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.spark.volumes }} + volumes: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.podSecurityContext }} + securityContext: + {{- toYaml . | nindent 8 }} + {{- end }} + + executor-pod-template.yaml: | + metadata: + {{- with .Values.interpreter.spark.labels }} + labels: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.spark.annotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + spec: + containers: + - name: spark-kubernetes-executor + {{- with .Values.interpreter.spark.env }} + env: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.spark.envFrom }} + envFrom: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.spark.volumeMounts }} + volumeMounts: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.spark.volumes }} + volumes: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.interpreter.podSecurityContext }} + securityContext: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/charts/zeppelin/templates/server/_helpers.tpl b/charts/zeppelin/templates/server/_helpers.tpl new file mode 100644 index 00000000000..fbf0ac29111 --- /dev/null +++ b/charts/zeppelin/templates/server/_helpers.tpl @@ -0,0 +1,102 @@ +{{- /* +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. +*/ -}} + +{{/* +Create the name of Zeppelin server. +*/}} +{{- define "zeppelin.server.name" -}} +{{- include "zeppelin.fullname" . }}-server +{{- end -}} + +{{/* +Common labels for Zeppelin server. +*/}} +{{- define "zeppelin.server.labels" -}} +{{ include "zeppelin.labels" . }} +app.kubernetes.io/component: zeppelin-server +{{- end }} + +{{/* +Selector labels for Zeppelin server. +*/}} +{{- define "zeppelin.server.selectorLabels" -}} +{{ include "zeppelin.selectorLabels" . }} +app.kubernetes.io/component: zeppelin-server +{{- end }} + +{{/* +Create the name of the service account for Zeppelin server. +*/}} +{{- define "zeppelin.server.serviceAccountName" -}} +{{- if .Values.server.serviceAccount.create }} +{{- default (include "zeppelin.server.name" .) .Values.server.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.server.serviceAccount.name }} +{{- end }} +{{- end }} + +{{/* +Create the name of the role for Zeppelin server. +*/}} +{{- define "zeppelin.server.roleName" -}} +{{- include "zeppelin.server.serviceAccountName" . }} +{{- end -}} + +{{/* +Create the name of the role binding for Zeppelin server. +*/}} +{{- define "zeppelin.server.roleBindingName" -}} +{{- include "zeppelin.server.serviceAccountName" . }} +{{- end -}} + +{{/* +Create the name of the configmap for Zeppelin server. +*/}} +{{- define "zeppelin.server.configMapName" -}} +{{- include "zeppelin.server.name" . }}-conf +{{- end -}} + +{{/* +Create the name of the Zeppelin image to use +*/}} +{{- define "zeppelin.server.image" -}} +{{- $imageRegistry := .Values.server.image.registry | default .Values.global.image.registry | default "docker.io" }} +{{- $imageRepository := .Values.server.image.repository | default "apache/zeppelin" }} +{{- $imageTag := .Values.server.image.tag | default "latest" }} +{{- printf "%s/%s:%s" $imageRegistry $imageRepository $imageTag }} +{{- end -}} + +{{/* +Create the name of the deployment for Zeppelin server. +*/}} +{{- define "zeppelin.server.deploymentName" -}} +{{- include "zeppelin.server.name" . }} +{{- end -}} + +{{/* +Create the name of the service for Zeppelin server. +*/}} +{{- define "zeppelin.server.serviceName" -}} +{{ include "zeppelin.server.name" . }}-svc +{{- end -}} + +{{/* +Create the name of the ingress for Zeppelin server. +*/}} +{{- define "zeppelin.server.ingressName" -}} +{{ include "zeppelin.server.name" . }}-ingress +{{- end -}} diff --git a/charts/zeppelin/templates/server/configmap.yaml b/charts/zeppelin/templates/server/configmap.yaml new file mode 100644 index 00000000000..5220d9a96d1 --- /dev/null +++ b/charts/zeppelin/templates/server/configmap.yaml @@ -0,0 +1,72 @@ +{{- /* +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: v1 +kind: ConfigMap +metadata: + name: {{ include "zeppelin.server.configMapName" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "zeppelin.server.labels" . | nindent 4 }} +data: + zeppelin-env.sh: | + #!/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. + # + + export SPARK_MASTER=k8s://https://kubernetes.default.svc + export ZEPPELIN_K8S_SERVICE_NAME={{ include "zeppelin.server.serviceName" . }} + export ZEPPELIN_K8S_SPARK_CONTAINER_IMAGE={{ include "zeppelin.interpreter.spark.image" . }} + + zeppelin-site.xml: | + + + + + {{- range $key, $value := .Values.server.conf }} + + {{ $key }} + {{ $value }} + + {{- end }} + + + log4j.properties: | + {{- .Files.Get "files/conf/log4j.properties" | nindent 4 }} + + log4j2.properties: | + {{- .Files.Get "files/conf/log4j2.properties" | nindent 4 }} + + interpreter-list: | + {{- .Files.Get "files/conf/interpreter-list" | nindent 4 }} + + configuration.xsl: | + {{- .Files.Get "files/conf/configuration.xsl" | nindent 4 }} diff --git a/charts/zeppelin/templates/server/deployment.yaml b/charts/zeppelin/templates/server/deployment.yaml new file mode 100644 index 00000000000..1b8d75054a6 --- /dev/null +++ b/charts/zeppelin/templates/server/deployment.yaml @@ -0,0 +1,162 @@ +{{- /* +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: {{ include "zeppelin.server.deploymentName" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "zeppelin.server.labels" . | nindent 4 }} +spec: + selector: + matchLabels: + {{- include "zeppelin.server.selectorLabels" . | nindent 6 }} + template: + metadata: + labels: + {{- include "zeppelin.server.selectorLabels" . | nindent 8 }} + annotations: + zeppelin.apache.org/zeppelin-server-conf-hash: {{ include (print .Template.BasePath "/server/configmap.yaml") . | sha256sum }} + zeppelin.apache.org/zeppelin-interpreter-conf-hash: {{ include (print .Template.BasePath "/interpreter/configmap.yaml") . | sha256sum }} + zeppelin.apache.org/zeppelin-interpreter-spark-conf-hash: {{ include (print .Template.BasePath "/interpreter/spark/configmap.yaml") . | sha256sum }} + {{- with .Values.server.annotations }} + {{- toYaml . | nindent 8 }} + {{- end }} + spec: + containers: + - name: zeppelin-server + image: {{ include "zeppelin.server.image" . }} + {{- with .Values.global.image.pullPolicy }} + imagePullPolicy: {{ . }} + {{- end }} + command: + - sh + - -c + - $(ZEPPELIN_HOME)/bin/zeppelin.sh + env: + - name: POD_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name + - name: POD_UID + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.uid + {{- with .Values.server.env }} + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.server.envFrom }} + envFrom: + {{- toYaml . | nindent 8 }} + {{- end }} + volumeMounts: + - name: zeppelin-conf + subPath: zeppelin-env.sh + mountPath: /opt/zeppelin/conf/zeppelin-env.sh + - name: zeppelin-conf + subPath: zeppelin-site.xml + mountPath: /opt/zeppelin/conf/zeppelin-site.xml + - name: zeppelin-conf + subPath: log4j.properties + mountPath: /opt/zeppelin/conf/log4j.properties + - name: zeppelin-conf + subPath: log4j2.properties + mountPath: /opt/zeppelin/conf/log4j2.properties + - name: zeppelin-conf + subPath: interpreter-list + mountPath: /opt/zeppelin/conf/interpreter-list + - name: zeppelin-conf + subPath: configuration.xsl + mountPath: /opt/zeppelin/conf/configuration.xsl + - name: zeppelin-interpreter-conf + subPath: interpreter-spec.yaml + mountPath: /opt/zeppelin/k8s/interpreter/100-interpreter-spec.yaml + {{- with .Values.server.volumeMounts }} + {{- toYaml . | nindent 8 }} + {{- end }} + ports: + - name: http + containerPort: 8080 + - name: https + containerPort: 8443 + - name: rpc + containerPort: 12320 + lifecycle: + preStop: + exec: + command: + - sh + - -c + - "ps -ef | grep org.apache.zeppelin.server.ZeppelinServer | grep -v grep | awk '{print $2}' | xargs kill" + {{- with .Values.server.resources }} + resources: + {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.server.securityContext }} + securityContext: + {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.global.image.pullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + volumes: + - name: zeppelin-conf + configMap: + name: {{ include "zeppelin.server.configMapName" . }} + items: + - key: zeppelin-env.sh + path: zeppelin-env.sh + - key: zeppelin-site.xml + path: zeppelin-site.xml + - key: log4j.properties + path: log4j.properties + - key: log4j2.properties + path: log4j2.properties + - key: interpreter-list + path: interpreter-list + - key: configuration.xsl + path: configuration.xsl + - name: zeppelin-interpreter-conf + configMap: + name: {{ include "zeppelin.interpreter.configMapName" . }} + items: + - key: interpreter-spec.yaml + path: interpreter-spec.yaml + {{- with .Values.server.volumes }} + {{- toYaml . | nindent 6 }} + {{- end }} + {{- with .Values.server.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.server.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.server.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "zeppelin.server.serviceAccountName" . }} + {{- with .Values.server.podSecurityContext }} + securityContext: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/charts/zeppelin/templates/server/ingress.yaml b/charts/zeppelin/templates/server/ingress.yaml new file mode 100644 index 00000000000..bc241cfef34 --- /dev/null +++ b/charts/zeppelin/templates/server/ingress.yaml @@ -0,0 +1,77 @@ +{{- /* +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. +*/ -}} + +{{- if .Values.server.ingress.enable }} +{{- if and .Values.server.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.server.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.server.ingress.annotations "kubernetes.io/ingress.class" .Values.server.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ include "zeppelin.server.ingressName" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "zeppelin.server.labels" . | nindent 4 }} + {{- with .Values.server.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.server.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.server.ingress.className }} + {{- end }} + {{- if .Values.server.ingress.tls }} + tls: + {{- range .Values.server.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.server.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ include "zeppelin.server.serviceName" $ }} + port: + number: {{ $.Values.server.service.port }} + {{- else }} + serviceName: {{ include "zeppelin.server.serviceName" $ }} + servicePort: {{ $.Values.server.service.port }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/charts/zeppelin/templates/server/role.yaml b/charts/zeppelin/templates/server/role.yaml new file mode 100644 index 00000000000..a20199ca482 --- /dev/null +++ b/charts/zeppelin/templates/server/role.yaml @@ -0,0 +1,48 @@ +{{- /* +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. +*/ -}} + +{{- if .Values.server.serviceAccount.create -}} +kind: Role +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: {{ include "zeppelin.server.roleName" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "zeppelin.server.labels" . | nindent 4 }} +rules: +- apiGroups: + - "" + resources: + - pods + - configmaps + - services + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - networking.k8s.io + resources: + - ingresses + verbs: + - create + - delete +{{- end }} diff --git a/charts/zeppelin/templates/server/rolebinding.yaml b/charts/zeppelin/templates/server/rolebinding.yaml new file mode 100644 index 00000000000..3ca08346ccf --- /dev/null +++ b/charts/zeppelin/templates/server/rolebinding.yaml @@ -0,0 +1,33 @@ +{{- /* +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. +*/ -}} + +{{ if .Values.server.serviceAccount.create -}} +kind: RoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: {{ include "zeppelin.server.roleBindingName" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "zeppelin.labels" . | nindent 4 }} +subjects: +- kind: ServiceAccount + name: {{ include "zeppelin.server.serviceAccountName" . }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ include "zeppelin.server.roleName" . }} +{{- end }} diff --git a/charts/zeppelin/templates/server/service.yaml b/charts/zeppelin/templates/server/service.yaml new file mode 100644 index 00000000000..4e1c12c1e03 --- /dev/null +++ b/charts/zeppelin/templates/server/service.yaml @@ -0,0 +1,34 @@ +{{- /* +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: v1 +kind: Service +metadata: + name: {{ include "zeppelin.server.serviceName" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "zeppelin.server.labels" . | nindent 4 }} +spec: + type: {{ .Values.server.service.type }} + ports: + - name: http + port: {{ .Values.server.service.port }} + targetPort: 8080 + - name: rpc + port: 12320 + selector: + {{- include "zeppelin.server.selectorLabels" . | nindent 4 }} diff --git a/charts/zeppelin/templates/server/serviceaccount.yaml b/charts/zeppelin/templates/server/serviceaccount.yaml new file mode 100644 index 00000000000..f37bdcaa35f --- /dev/null +++ b/charts/zeppelin/templates/server/serviceaccount.yaml @@ -0,0 +1,30 @@ +{{- /* +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. +*/ -}} + +{{ if .Values.server.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "zeppelin.server.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "zeppelin.server.labels" . | nindent 4 }} + {{- with .Values.server.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/charts/zeppelin/values.yaml b/charts/zeppelin/values.yaml new file mode 100644 index 00000000000..0363fd92ae0 --- /dev/null +++ b/charts/zeppelin/values.yaml @@ -0,0 +1,271 @@ +# +# 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. +# + +# Default values for zeppelin. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +# -- String to partially override release name. +nameOverride: "" + +# -- String to fully override release name. +fullnameOverride: "" + +global: + image: + # -- Global image registry. + registry: docker.io + # -- Global image pull policy. + pullPolicy: IfNotPresent + # -- Global image pull secrets for private image registry. + pullSecrets: [] + # - name: + +server: + image: + # -- Zeppelin server image registry. + # @default -- If not set, `global.image.registry` will be used. + registry: "" + # -- Zeppelin server image repository. + repository: apache/zeppelin + # -- Zeppelin image tag. + # @default -- If not set, the chart appVersion will be used. + tag: "" + # -- Zeppelin server image pull policy. + pullPolicy: IfNotPresent + # -- Zeppelin server image pull secrets for private image registry. + pullSecrets: [] + # - name: + + # -- Zeppelin configurations. + # For detailed information, please refer: https://zeppelin.apache.org/docs/latest/setup/operation/configuration.html. + conf: {} + + # -- Extra labels for Zeppelin server pods. + labels: {} + # key1: value1 + # key2: value2 + + # -- Extra annotations for Zeppelin server pods. + annotations: {} + # key1: value1 + # key2: value2 + + # -- Volumes for Zeppelin server pods. + volumes: [] + + # -- Node selector for Zeppelin server pods. + nodeSelector: {} + + # -- Affinity for Zeppelin server pods. + affinity: {} + + # -- List of node taints to tolerate for Zeppelin server pods. + tolerations: [] + + # -- Priority class for Zeppelin server pods. + priorityClassName: "" + + # -- Security context for Zeppelin server pods. + podSecurityContext: {} + + # -- Environment variables for Zeppelin server containers. + env: + - name: ZEPPELIN_HOME + value: /opt/zeppelin + - name: SPARK_HOME + value: /opt/spark + - name: SERVICE_DOMAIN + value: local.zeppelin-project.org:8080 + - name: ZEPPELIN_PORT + value: "8080" + - name: ZEPPELIN_SERVER_RPC_PORTRANGE + value: 12320:12320 + - name: ZEPPELIN_K8S_TEMPLATE_DIR + value: /opt/zeppelin/k8s + + # -- Environment variable sources for Zeppelin server containers. + envFrom: [] + + # -- Volume mounts for Zeppelin server containers. + volumeMounts: [] + + # -- Resource requests and limits for Zeppelin server containers. + resources: {} + # limits: + # cpu: 100m + # memory: 300Mi + # requests: + # cpu: 100m + # memory: 300Mi + + # -- Security context for Zeppelin server containers. + securityContext: + runAsNonRoot: true + runAsUser: 1000 + runAsGroup: 0 + + serviceAccount: + # -- Specifies whether a service account should be created for the Zeppelin server. + create: true + # -- Optional name for the Zeppelin server service account. + name: "" + # -- Extra annotations for the Zeppelin server service account. + annotations: {} + + service: + # -- Service type for Zeppelin server. + type: ClusterIP + # -- Service port for Zeppelin server. + port: 8080 + + ingress: + # -- Enable ingress for Zeppelin server. + enable: false + # -- Ingress class name for Zeppelin server ingress. + className: "" + # -- Annotations for the Zeppelin server ingress. + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + # -- Hosts for Zeppelin server ingress. + hosts: + - host: local.zeppelin-project.org + paths: + - path: / + pathType: ImplementationSpecific + # -- TLS configuration for Zeppelin server ingress. + tls: [] + # - secretName: zeppelin-server-tls + # hosts: + # - local.zeppelin-project.org + +interpreter: + image: + # -- Zeppelin interpreter image registry. + # @default -- If not set, `global.image.registry` will be used. + registry: "" + # -- Zeppelin interpreter image repository. + repository: apache/zeppelin-interpreter + # -- Zeppelin interpreter image tag. + # @default -- If not set, the chart appVersion will be used. + tag: "" + # -- Zeppelin interpreter image pull policy. + pullPolicy: IfNotPresent + # -- Zeppelin interpreter image pull secrets for private image registry. + pullSecrets: [] + # - name: + + spark: + image: + # -- Spark image registry. + # @default -- If not set, `global.image.registry` will be used. + registry: "" + # -- Spark image repository. + repository: spark + # -- Spark image tag. + tag: 3.5.3 + + # -- Spark configurations. + conf: + spark.kubernetes.driver.podTemplateFile: file:///opt/spark/conf/driver-pod-template.yaml + spark.kubernetes.executor.podTemplateFile: file:///opt/spark/conf/executor-pod-template.yaml + + # -- Extra labels for Spark pods. + labels: {} + + # -- Extra annotations for Spark pods. + annotations: {} + + # -- Volumes for Spark pods. + volumes: [] + + # -- Environment variables for Spark containers. + env: [] + + # -- Environment variable sources for Spark containers. + envFrom: [] + + # -- Volume mounts for Spark containers. + volumeMounts: [] + + # -- Extra labels for Zeppelin interpreter pods. + labels: {} + # key1: value1 + # key2: value2 + + # -- Extra annotations for Zeppelin interpreter pods. + annotations: {} + # key1: value1 + # key2: value2 + + # -- Volumes for Zeppelin interpreter pods. + volumes: [] + + # -- Node selector for Zeppelin interpreter pods. + nodeSelector: {} + + # -- Affinity for Zeppelin interpreter pods. + affinity: {} + + # -- List of node taints to tolerate for Zeppelin interpreter pods. + tolerations: [] + + # -- Priority class for Zeppelin interpreter pods. + priorityClassName: "" + + # -- Security context for Zeppelin interpreter pods. + podSecurityContext: {} + + # -- Environment variables for Zeppelin interpreter containers. + env: + - name: ZEPPELIN_HOME + value: /opt/zeppelin + - name: SPARK_HOME + value: /opt/spark + - name: SPARK_CONF_DIR + value: /opt/spark/conf + + # -- Environment variable sources for Zeppelin interpreter containers. + envFrom: [] + + # -- Volume mounts for Zeppelin interpreter containers. + volumeMounts: [] + + # -- Resource requests and limits for Zeppelin interpreter containers. + resources: {} + # limits: + # cpu: 100m + # memory: 300Mi + # requests: + # cpu: 100m + # memory: 300Mi + + # -- Security context for Zeppelin interpreter containers. + securityContext: + runAsNonRoot: true + runAsUser: 1000 + runAsGroup: 0 + + serviceAccount: + serviceAccount: + # -- Specifies whether a service account should be created for the Zeppelin interpreter. + create: true + # -- Optional name for the Zeppelin interpreter service account. + name: "" + # -- Extra annotations for the Zeppelin interpreter service account. + annotations: {}