Puesta en marcha de JupyterHub
Esta sección describe las tareas que debe completar para implementar JupyterHub en su clúster de Kubernetes.
Es posible poner en marcha JupyterHub en plataformas que no sean Kubernetes. La implementación de JupyterHub en plataformas diferentes a Kubernetes no está fuera del alcance de esta solución. |
Requisitos previos
Antes de realizar el ejercicio de implementación descrito en esta sección, asumimos que ya ha realizado las siguientes tareas:
-
Ya tiene un clúster de Kubernetes en funcionamiento.
-
Ya ha instalado y configurado NetApp Trident en su clúster de Kubernetes. Para obtener más información sobre Trident, consulte la "Documentación de Trident".
Instale el Helm
JupyterHub se pone en marcha usando Helm, un popular administrador de paquetes para Kubernetes. Antes de implementar JupyterHub, debe instalar Helm en su nodo de control de Kubernetes. Para instalar Helm, siga el "instrucciones de instalación" en la documentación oficial de Helm.
Establezca el tipo de almacenamiento de Kubernetes predeterminado
Antes de implementar JupyterHub, debe designar un StorageClass predeterminado dentro de su clúster de Kubernetes. Para designar una clase de almacenamiento predeterminada en su clúster, siga las instrucciones descritas en la "Despliegue de Kubeflow" sección. Si ya ha designado un tipo de almacenamiento predeterminado en el clúster, puede omitir este paso.
Implemente JupyterHub
Después de completar los pasos anteriores, ya está listo para implementar JupyterHub. La implementación de JupyterHub requiere los siguientes pasos:
Configurar el despliegue de JupyterHub
Antes de la implementación, es una buena práctica optimizar la implementación de JupyterHub para su entorno respectivo. Puede crear un archivo config.yaml y utilizarlo durante la implementación usando el diagrama Helm.
Un ejemplo de archivo config.yaml se puede encontrar en https://github.com/jupyterhub/zero-to-jupyterhub-k8s/blob/HEAD/jupyterhub/values.yaml
En este archivo config.yaml, puede establecer el parámetro (singleuser.storage.dynamic.storageClass) para la clase de almacenamiento de NetApp Trident. Esta es la clase de almacenamiento que se utilizará para aprovisionar los volúmenes para los espacios de trabajo de usuarios individuales. |
Adición de volúmenes compartidos
Si desea utilizar un volumen compartido para todos los usuarios de JupyterHub, puede ajustar su config.yaml en consecuencia. Por ejemplo, si tiene un PersistentVolumeClaim compartido denominado jupyterhub-shared-volume, podría montarlo como /home/shared en todos los pods de usuario del siguiente modo:
singleuser:
storage:
extraVolumes:
- name: jupyterhub-shared
persistentVolumeClaim:
claimName: jupyterhub-shared-volume
extraVolumeMounts:
- name: jupyterhub-shared
mountPath: /home/shared
Este es un paso opcional, puede ajustar estos parámetros a sus necesidades. |
Despliegue JupyterHub con Helm Chart
Informe a Helm del repositorio de diagramas de JupyterHub Helm.
helm repo add jupyterhub https://hub.jupyter.org/helm-chart/
helm repo update
Esto debería mostrar una salida como:
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "stable" chart repository
...Successfully got an update from the "jupyterhub" chart repository
Update Complete. ⎈ Happy Helming!⎈
Ahora instale el gráfico configurado por su config.yaml ejecutando este comando desde el directorio que contiene su config.yaml:
helm upgrade --cleanup-on-fail \
--install my-jupyterhub jupyterhub/jupyterhub \
--namespace my-namespace \
--create-namespace \
--values config.yaml
En este ejemplo: |
<helm-release-name> está configurado para my-jupyterhub, que será el nombre de su lanzamiento de JupyterHub. <k8s-namespace> está configurado en my-namespace, que es el espacio de nombres donde desea instalar JupyterHub. El indicador --create-namespace se utiliza para crear el espacio de nombres si aún no existe. El indicador --values especifica el archivo config.yaml que contiene las opciones de configuración deseadas.
Comprobar despliegue
Mientras se ejecuta el paso 2, puede ver los pods que se crean a partir del siguiente comando:
kubectl get pod --namespace <k8s-namespace>
Espere a que el concentrador y el pod del proxy entren en el estado de ejecución.
NAME READY STATUS RESTARTS AGE
hub-5d4ffd57cf-k68z8 1/1 Running 0 37s
proxy-7cb9bc4cc-9bdlp 1/1 Running 0 37s
Acceda a JupyterHub
Encuentra la IP que podemos usar para acceder al JupyterHub. Ejecute el siguiente comando hasta que la IP EXTERNA del servicio proxy-public esté disponible como en la salida del ejemplo.
Utilizamos el servicio NodePort en nuestro archivo config.yaml, puede ajustar su entorno en función de su configuración (por ejemplo, LoadBalancer). |
kubectl --namespace <k8s-namespace> get service proxy-public
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
proxy-public NodePort 10.51.248.230 104.196.41.97 80:30000/TCP 1m
Para utilizar JupyterHub, introduzca la IP externa para el servicio proxy-public en un navegador.