Deploy Jupyter Notebook on Kubernetes

This guide covers the deployment Jupyter Notebook on kubernetes cluster.

Experiment environment

Setup Kubernetes

We recommend using kind to setup a Kubernetes cluster on a local machine.

You can use Extra mounts to mount your host path to kind node and use Extra port mappings to port forward to the kind nodes. Please refer to kind configuration for more details.

You need to create a kind config file. The following is an example :

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraMounts:
  # add a mount from /path/to/my/files on the host to /files on the node
  - hostPath: /tmp/submarine
    containerPath: /tmp/submarine
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    protocol: TCP
  # exposing additional ports to be used for NodePort services
  - containerPort: 30070
    hostPort: 8888
    protocol: TCP

Running the following command:

kind create cluster --image kindest/node:v1.15.6 --config <path-to-kind-config> --name k8s-submarine
kubectl create namespace submarine

Deploy Jupyter Notebook

Once you have a running Kubernetes cluster, you can write a YAML file to deploy a jupyter notebook. In this example yaml, we use jupyter/minimal-notebook to make a single notebook running on the kind node.

kubectl apply -f jupyter.yaml --namespace submarine

Once jupyter notebook is running, you can access the notebook server from the browser using http://localhost:8888 on local machine.

You can enter and store a password for your notebook server with:

kubectl exec -it <jupyter-pod-name> -- jupyter notebook password

After restarting the notebook server, you can login jupyter notebook with your new password.

If you want to use JupyterLab :

http://localhost:8888/lab