Jupyterhub部署到k8s
JupyterHub
JupyterHub是为多个用户提供Jupyter笔记本的最佳方式。由于JupyterHub为每个用户管理一个单独的Jupyter环境,因此它可以用于学生班级、企业数据科学组或科学研究组。它是一个多用户Hub,生成、管理和代理单用户Jupyter笔记本服务器的多个实例。JupyterHub可以在协作环境中用于小型(0-100个用户)和大型团队(超过100个用户),例如一个班级的学生、企业数据科学小组或科学研究小组。它有两个主要的发行版,分别为满足这些团队的需求而开发。
少量用户(1-100)和具有简单环境的单个服务器官方推荐使用little JupyterHub发行版。
并且JupyterHub允许在云上部署动态服务器,在需要更多的用户的情况下我们可以在Kubernetes之上运行JupyterHub。
一、具体部署过程
1.安装 helm
下载需要的版本官方版本地址
tar -zxvf 你的helm 压缩包
mv linux-amd64/helm /usr/local/bin/helm #移动到软件安装目录
helm version
安装完毕
2.部署 jupyterhub
参考官方文档
2.1 创建一个config.yaml:
YAML
# This file can update the JupyterHub Helm chart's default configuration values.
#
# For reference see the configuration reference and default values, but make
# sure to refer to the Helm chart version of interest to you!
#
# Introduction to YAML: https://www.youtube.com/watch?v=cdLNKUoMc6c
# Chart config reference: https://zero-to-jupyterhub.readthedocs.io/en/stable/resources/reference.html
# Chart default values: https://github.com/jupyterhub/zero-to-jupyterhub-k8s/blob/HEAD/jupyterhub/values.yaml
# Available chart versions: https://hub.jupyter.org/helm-chart/
2.2 添加repo.
helm repo add jupyterhub https://hub.jupyter.org/helm-chart/
helm repo update
2.3修改以下命令并执行:
helm upgrade --cleanup-on-fail \
--install <helm-release-name> jupyterhub/jupyterhub \ #helm安装的名称
--namespace <k8s-namespace> \ #替换成你的命名空间名称
--create-namespace \
--version=<chart-version> \ #需要安装的版本
--values config.yaml
如果没有报错,部署完毕。
ps:
!!!
注意⚠️部署jupyterhub时可能会出现以下报错信息:
解决办法: 下载jupyterhub进行本地安装
•解压jupyterhub查看使用了这个镜像源的文件
tar -zxvf jupyterhub-3.3.7.tgz
grep -r "registry.k8s.io" --include="*.yaml" .
•修改镜像源
sed -i 's#registry.k8s.io#registry.cn-hangzhou.aliyuncs.com/google_containers#g' values.yaml
sed -i 's#registry.k8s.io#registry.cn-hangzhou.aliyuncs.com/google_containers#g' Chart.yaml
•修改本地的containerd
cat > /etc/containerd/config.toml <<'EOF'
> version = 2
> root = "/var/lib/containerd"
> state = "/run/containerd"
> oom_score = 0
>
> [grpc]
> max_recv_message_size = 16777216
> max_send_message_size = 16777216
>
> [debug]
> level = "info"
>
> [metrics]
> address = ""
> grpc_histogram = false
>
> [plugins]
> [plugins."io.containerd.grpc.v1.cri"]
> sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7"
> max_container_log_line_size = -1
> [plugins."io.containerd.grpc.v1.cri".containerd]
> default_runtime_name = "runc"
> snapshotter = "overlayfs"
> [plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
> [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
> runtime_type = "io.containerd.runc.v2"
> runtime_engine = ""
> runtime_root = ""
>
> [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
> systemdCgroup = true
> [plugins."io.containerd.grpc.v1.cri".registry]
> [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
> [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
> endpoint = ["https://registry-1.docker.io"]
> [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
> endpoint = ["https://registry.cn-hangzhou.aliyuncs.com/google_containers"]
> [plugins."io.containerd.grpc.v1.cri".registry.mirrors."Harbor 地址"]
> endpoint = ["Harbor 地址"]
> EOF
systemctl restart containerd.service
•安装
Bash
helm upgrade --cleanup-on-fail \
--install <helm-release-name> ./jupyterhub \ #helm安装的名称
--namespace <k8s-namespace> \ #替换成你的命名空间名称
--create-namespace \
--version=<chart-version> \ #需要安装的版本
--values config.yaml
二、鉴权
jupyterhub部署完成之后不需要创建用户,并且不校验密码。而 jupyterhub 官方提供多种鉴权模式,详情请看官方文档:
以下是私有gitlab鉴权登录教程:
1. 在 gitlab 上生成需要的信息
参考[gitlab 官方文档](https://docs.gitlab.com/ee/integration/oauth_provider.html)
2. 修改 jupyterhub 配置文件
c.JupyterHub.authenticator_class = "gitlab"
c.OAuthenticator.oauth_callback_url = "http://hubip地址/hub/oauth_callback"
c.OAuthenticator.client_id = "你的 application 🆔"
c.OAuthenticator.client_secret = "对应的 secret"
c.GitLabOAuthenticator.allow_all = True
done.