<p>I want to deploy jupyter notebook on a kubernetes cluster. Following the official documentation(<a href="https://zero-to-jupyterhub.readthedocs.io/en/latest/setup-jupyterhub.html" rel="nofollow noreferrer">https://zero-to-jupyterhub.readthedocs.io/en/latest/setup-jupyterhub.html</a>), I ran the following command:</p>

<pre><code># Suggested values: advanced users of Kubernetes and Helm should feel
# free to use different values.
RELEASE=jhub
NAMESPACE=jhub

helm upgrade --install $RELEASE jupyterhub/jupyterhub \
  --namespace $NAMESPACE  \
  --version=0.8.2 \
  --values jupyter-hub-config.yaml
</code></pre>

<p>Where <code>jupyter-hub-config.yaml</code> is a config file as mentioned in the doc, containing a token generated by the command <code>openssl rand -hex 32
</code>.</p>

<p>While running the aforementioned command, I get the following error:</p>

<pre><code>Error: release jhub failed: persistentvolumeclaims "hub-db-dir" is forbidden: Internal error occurred: 8 default StorageClasses were found
</code></pre>

<p>I tried looking into various methods of installing <code>jhub</code> but none could point me to any difference in this approach that I would consider causing error here.</p>

<p>The o/p of the command <code>kubectl get storageclass</code> is:</p>

<pre><code>NAME                                     PROVISIONER             AGE
aviral-worker-volume (default)           kubernetes.io/aws-ebs   14d
default (default)                        kubernetes.io/aws-ebs   14d
es-ebs-storage (default)                 kubernetes.io/aws-ebs   7d
gp2 (default)                            kubernetes.io/aws-ebs   14d
prometheus-monitoring-volume (default)   kubernetes.io/aws-ebs   8d
replicated (default)                     kubernetes.io/aws-ebs   14d
replicated-premkit (default)             kubernetes.io/aws-ebs   14d
replicated-statsd (default)              kubernetes.io/aws-ebs   14d
</code></pre>

<p>You have 8 default storage classes in your cluster, which is definitely not normal.
You should make sure you have only one default storage class.</p>

<p>I don't know which one should be default, it's totally up to your cluster, I don't wanna be responsible for that decision. But for all storage classes except the default you need to do this: </p>

<pre><code>kubectl patch storageclass &lt;your-class-name&gt; -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
</code></pre>
