A inteligência artificial (IA) e o aprendizado de máquina (ML) são campos em rápida expansão, exigindo ambientes de computação distribuída robustos. O Kubernetes, com sua capacidade de gerenciar cargas de trabalho em larga escala, é ideal para essas tarefas. JupyterHub, uma plataforma multiusuário para hospedar ambientes Jupyter Notebook, é uma ferramenta essencial para cientistas de dados e pesquisadores de ML. Este guia detalha como configurar o JupyterHub em um cluster Kubernetes gerenciado pelo Rancher, criando um espaço de trabalho escalável para desenvolvimento de IA/ML.
O que é o JupyterHub?
O JupyterHub é um servidor multiusuário que permite a vários usuários executar e gerenciar instâncias de Jupyter Notebook. Ele simplifica o acesso a recursos computacionais e de dados em ambientes de nuvem ou data center, sem sobrecarregar os usuários com tarefas de instalação e manutenção. Administradores podem gerenciar eficientemente os recursos compartilhados, enquanto os usuários desfrutam de um ambiente de desenvolvimento familiar e acessível.
Kubernetes para Cargas de Trabalho de IA/ML
O Kubernetes é particularmente eficaz no gerenciamento de ambientes de computação distribuída. Seu design declarativo e a descoberta de serviços facilitam a alocação de recursos para cargas de trabalho computacionalmente intensivas, como as de IA/ML. O Kubernetes permite a migração de cargas de trabalho entre infraestruturas físicas com mais facilidade, atendendo à necessidade de escalabilidade em projetos de IA/ML.
Configurando o JupyterHub com Rancher
Presume-se que você já possua um cluster Kubernetes gerenciado pelo Rancher. O armazenamento persistente é um requisito fundamental para o JupyterHub. Para fins de demonstração, utilizaremos o provedor NFS experimental disponível no Rancher App Catalog. Navegue até o App Catalog no Rancher, procure pelo provedor NFS, aceite as configurações padrão e inicie-o. Caso já possua uma solução de armazenamento persistente, sinta-se à vontade para utilizá-la.
Após configurar o armazenamento e definir uma classe de armazenamento padrão, prossiga com a implantação do JupyterHub utilizando o Helm 3. Certifique-se de ter o cliente Helm 3 instalado ou utilize o Rancher Catalog para gerenciar os Helm charts.
Primeiro, crie um namespace dedicado para o JupyterHub. Na interface do Rancher, navegue até o cluster, selecione "Projects/Namespaces" e crie um novo namespace, por exemplo, "jhub".
Em seguida, adicione o repositório Helm do JupyterHub ao seu catálogo. Se estiver usando o Rancher Catalog, adicione o repositório através da UI:
helm repo add jupyterhub https://jupyterhub.github.io/helm-chart/
helm repo update
Crie um arquivo de configuração, config.yaml, com as seguintes configurações:
proxy:
secretToken: "<seu-token-secreto>"
ingress:
enabled: true
hosts:
- "<seu-nome-de-host>"
Gere um token secrreto executando openssl rand -hex 32 e substitua <seu-token-secreto> pela saída. Substitua <seu-nome-de-host> por um nome DNS acessível para sua interface JupyterHub.
Instale o chart do JupyterHub com o seguinte comando, garantindo que o arquivo config.yaml esteja no seu diretório de trabalho atual:
RELEASE=jhub
NAMESPACE=jhub
helm upgrade --install $RELEASE jupyterhub/jupyterhub \
--namespace $NAMESPACE \
--version=0.8.2 \
--values config.yaml
O Helm iniciará a implentação dos componentes necessários. Após a conclusão, você poderá acessar a interface do JupyterHub através do nome de host configurado. Verifique o status dos pods na seção "Workloads" do Rancher UI.
A interface de login será exibida ao acessar o nome de host configurado.

Em algumas versões do Kubernetes (como 1.16), pode ser necessário aplicar um patch para corrigir a interação do JupyterHub com a API do Kubernetes. Execute o seguinte comando:
kubectl patch deploy -n $NAMESPACE hub --type json --patch '[{"op": "replace", "path": "/spec/template/spec/containers/0/command", "value": ["bash", "-c", "\nmkdir -p ~/hotfix\ncp -r /usr/local/lib/python3.6/dist-packages/kubespawner ~/hotfix\nls -R ~/hotfix\npatch ~/hotfix/kubespawner/spawner.py << EOT\n72c72\n< key=lambda x: x.last_timestamp,\n---\n> key=lambda x: x.last_timestamp and x.last_timestamp.timestamp() or 0.,\nEOT\n\nPYTHONPATH=$HOME/hotfix jupyterhub --config /srv/jupyterhub_config.py --upgrade-db\n"]}]'
Com isso, seu ambiente JupyterHub estará operacional no Rancher. Por padrão, o JupyterHub utiliza autenticação PAM, permitindo o login com usuários Linux válidos no sistema. Após o login, você poderá criar novos notebooks.

Para explorar outras opções de autenticação, como a autenticação via GitHub, atualize o arquivo config.yaml com as configurações apropriadas e execute novamente o comando helm upgrade.
Conclusão
Este guia demonstrou como instalar o JupyterHub usando o Rancher em um cluster Kubernetes, fornecendo uma base escalável para cargas de trabalho de ciência de dados e aprendizado de máquina. Considere fatores adicionais para uma instalação completa, mas este procedimento fornece um ponto de partida rápido para suas jornadas de IA/ML.