diff --git a/stable/dask/Chart.yaml b/stable/dask/Chart.yaml index 321e1f36c7..572f6d3880 100755 --- a/stable/dask/Chart.yaml +++ b/stable/dask/Chart.yaml @@ -1,7 +1,7 @@ --- apiVersion: v1 name: dask -version: 3.0.0 +version: 3.1.0 appVersion: 1.1.5 description: Distributed computation in Python with task scheduling home: https://dask.org diff --git a/stable/dask/README.md b/stable/dask/README.md index dd48238035..c534042798 100644 --- a/stable/dask/README.md +++ b/stable/dask/README.md @@ -15,7 +15,7 @@ This chart will deploy the following: - All using Kubernetes Deployments > **Tip**: See the [Kubernetes Service Type Docs](https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types) -for the differences between ClusterIP, NodePort, and LoadBalancer. +> for the differences between ClusterIP, NodePort, and LoadBalancer. ## Installing the Chart @@ -35,50 +35,60 @@ their default values. ### Dask scheduler -| Parameter | Description | Default | -| -------------------------- | -------------------------| -----------------| -| `scheduler.name` | Dask scheduler name | `scheduler` | -| `scheduler.image` | Container image name | `daskdev/dask` | -| `scheduler.imageTag` | Container image tag | `1.1.5` | -| `scheduler.replicas` | k8s deployment replicas | `1` | -| `scheduler.tolerations` | Tolerations | `[]` | -| `scheduler.nodeSelector` | nodeSelector | `{}` | -| `scheduler.affinity` | Container affinity | `{}` | +| Parameter | Description | Default | +| ------------------------ | ----------------------- | -------------- | +| `scheduler.name` | Dask scheduler name | `scheduler` | +| `scheduler.image` | Container image name | `daskdev/dask` | +| `scheduler.imageTag` | Container image tag | `1.1.5` | +| `scheduler.replicas` | k8s deployment replicas | `1` | +| `scheduler.tolerations` | Tolerations | `[]` | +| `scheduler.nodeSelector` | nodeSelector | `{}` | +| `scheduler.affinity` | Container affinity | `{}` | ### Dask webUI -| Parameter | Description | Default | -|-----------------------|-------------------|-----------| -| `webUI.name` | Dask webui name | `webui` | -| `webUI.servicePort` | k8s service port | `80` | +| Parameter | Description | Default | +| --------------------------- | ---------------------------------- | -------------------- | +| `webUI.name` | Dask webui name | `webui` | +| `webUI.servicePort` | k8s service port | `80` | +| `webUI.ingress.enabled` | Enable ingress controller resource | false | +| `webUI.ingress.hostname` | Ingress resource hostnames | dask-ui.example.com | +| `webUI.ingress.tls` | Ingress TLS configuration | false | +| `webUI.ingress.secretName` | Ingress TLS secret name | `dask-scheduler-tls` | +| `webUI.ingress.annotations` | Ingress annotations configuration | null | ### Dask worker -| Parameter | Description | Default | -| ----------------------- | ---------------------------------| ---------------| -| `worker.name` | Dask worker name | `worker` | -| `worker.image` | Container image name | `daskdev/dask` | -| `worker.imageTag` | Container image tag | `1.1.5` | -| `worker.replicas` | k8s hpa and deployment replicas | `3` | -| `worker.resources` | Container resources | `{}` | -| `worker.tolerations` | Tolerations | `[]` | -| `worker.nodeSelector` | nodeSelector | `{}` | -| `worker.affinity` | Container affinity | `{}` | +| Parameter | Description | Default | +| --------------------- | ------------------------------- | -------------- | +| `worker.name` | Dask worker name | `worker` | +| `worker.image` | Container image name | `daskdev/dask` | +| `worker.imageTag` | Container image tag | `1.1.5` | +| `worker.replicas` | k8s hpa and deployment replicas | `3` | +| `worker.resources` | Container resources | `{}` | +| `worker.tolerations` | Tolerations | `[]` | +| `worker.nodeSelector` | nodeSelector | `{}` | +| `worker.affinity` | Container affinity | `{}` | ### Jupyter -| Parameter | Description | Default | -|-------------------------|----------------------------------|--------------------------| -| `jupyter.name` | Jupyter name | `jupyter` | -| `jupyter.enabled` | Include optional Jupyter server | `true` | -| `jupyter.image` | Container image name | `daskdev/dask-notebook` | -| `jupyter.imageTag` | Container image tag | `1.1.5` | -| `jupyter.replicas` | k8s deployment replicas | `1` | -| `jupyter.servicePort` | k8s service port | `80` | -| `jupyter.resources` | Container resources | `{}` | -| `jupyter.tolerations` | Tolerations | `[]` | -| `jupyter.nodeSelector` | nodeSelector | `{}` | -| `jupyter.affinity` | Container affinity | `{}` | +| Parameter | Description | Default | +| ----------------------------- | ---------------------------------- | ----------------------- | +| `jupyter.name` | Jupyter name | `jupyter` | +| `jupyter.enabled` | Include optional Jupyter server | `true` | +| `jupyter.image` | Container image name | `daskdev/dask-notebook` | +| `jupyter.imageTag` | Container image tag | `1.1.5` | +| `jupyter.replicas` | k8s deployment replicas | `1` | +| `jupyter.servicePort` | k8s service port | `80` | +| `jupyter.resources` | Container resources | `{}` | +| `jupyter.tolerations` | Tolerations | `[]` | +| `jupyter.nodeSelector` | nodeSelector | `{}` | +| `jupyter.affinity` | Container affinity | `{}` | +| `jupyter.ingress.enabled` | Enable ingress controller resource | false | +| `jupyter.ingress.hostname` | Ingress resource hostnames | dask-ui.example.com | +| `jupyter.ingress.tls` | Ingress TLS configuration | false | +| `jupyter.ingress.secretName` | Ingress TLS secret name | `dask-jupyter-tls` | +| `jupyter.ingress.annotations` | Ingress annotations configuration | null | #### Jupyter Password @@ -140,14 +150,14 @@ helm install --name my-release --set jupyter.enabled=false stable/dask ### Customizing Python Environment The default `daskdev/dask` images have a standard Miniconda installation along -with some common packages like NumPy and Pandas. You can install custom packages -with either Conda or Pip using optional environment variables. This happens -when your container starts up. +with some common packages like NumPy and Pandas. You can install custom packages +with either Conda or Pip using optional environment variables. This happens +when your container starts up. > **Note**: The `IP:PORT` of this chart's services will not be accessible until -extra packages finish installing. Expect to wait at least a minute for the -Jupyter Server to be accessible if adding packages below, like `numba`. This -time will vary depending on which extra packages you choose to install. +> extra packages finish installing. Expect to wait at least a minute for the +> Jupyter Server to be accessible if adding packages below, like `numba`. This +> time will vary depending on which extra packages you choose to install. Consider the following YAML config as an example: @@ -168,5 +178,5 @@ worker: ``` > **Note**: The Jupyter and Dask-worker environments should have matching -software environments, at least where a user is likely to distribute that -functionality. +> software environments, at least where a user is likely to distribute that +> functionality. diff --git a/stable/dask/templates/dask-jupyter-ingress.yaml b/stable/dask/templates/dask-jupyter-ingress.yaml new file mode 100644 index 0000000000..55ff8165b7 --- /dev/null +++ b/stable/dask/templates/dask-jupyter-ingress.yaml @@ -0,0 +1,27 @@ +{{- if .Values.jupyter.ingress.enabled -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ template "dask.fullname" . }}-jupyter + labels: + app: {{ template "dask.fullname" . }}-jupyter + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" + annotations: +{{ toYaml .Values.jupyter.ingress.annotations | indent 4 }} +spec: +{{- if .Values.jupyter.ingress.tls }} + tls: + - hosts: + - {{ .Values.jupyter.ingress.hostname | quote }} + secretName: {{ .Values.jupyter.ingress.secretName | default (printf "%s-jupyter-tls" (include "dask.fullname" .)) }} +{{- end }} + rules: + - host: {{ .Values.jupyter.ingress.hostname }} + http: + paths: + - backend: + serviceName: {{ template "dask.fullname" . }}-jupyter + servicePort: {{ .Values.jupyter.servicePort }} +{{- end -}} \ No newline at end of file diff --git a/stable/dask/templates/dask-scheduler-ingress.yaml b/stable/dask/templates/dask-scheduler-ingress.yaml new file mode 100644 index 0000000000..6813f411c9 --- /dev/null +++ b/stable/dask/templates/dask-scheduler-ingress.yaml @@ -0,0 +1,27 @@ +{{- if .Values.webUI.ingress.enabled -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ template "dask.fullname" . }}-scheduler + labels: + app: {{ template "dask.fullname" . }}-scheduler + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" + annotations: +{{ toYaml .Values.webUI.ingress.annotations | indent 4 }} +spec: +{{- if .Values.webUI.ingress.tls }} + tls: + - hosts: + - {{ .Values.webUI.ingress.hostname | quote }} + secretName: {{ .Values.webUI.ingress.secretName | default (printf "%s-scheduler-tls" (include "dask.fullname" .)) }} +{{- end }} + rules: + - host: {{ .Values.webUI.ingress.hostname }} + http: + paths: + - backend: + serviceName: {{ template "dask.fullname" . }}-scheduler + servicePort: {{ .Values.webUI.servicePort }} +{{- end -}} \ No newline at end of file diff --git a/stable/dask/values.yaml b/stable/dask/values.yaml index 73f4d61450..b27d276926 100644 --- a/stable/dask/values.yaml +++ b/stable/dask/values.yaml @@ -30,6 +30,15 @@ scheduler: webUI: name: webui servicePort: 80 + ingress: + enabled: false + tls: false + # secretName: dask-scheduler-tls + hostname: dask-ui.example.com + annotations: + # kubernetes.io/ingress.class: "nginx" + # secretName: my-tls-cert + # kubernetes.io/tls-acme: "true" worker: name: worker @@ -95,3 +104,12 @@ jupyter: tolerations: [] nodeSelector: {} affinity: {} + ingress: + enabled: false + tls: false + # secretName: dask-jupyter-tls + hostname: dask-jupyter.example.com + annotations: + # kubernetes.io/ingress.class: "nginx" + # secretName: my-tls-cert + # kubernetes.io/tls-acme: "true"