
构建自定义内核镜像为 Jupyter Enterprise Gateway 打造专属 Docker 镜像【免费下载链接】enterprise_gatewayA lightweight, multi-tenant, scalable and secure gateway that enables Jupyter Notebooks to share resources across distributed clusters such as Apache Spark, Kubernetes and others.项目地址: https://gitcode.com/gh_mirrors/en/enterprise_gateway当团队使用Jupyter Enterprise Gateway在多租户集群中共享 Jupyter Notebook 资源时内置的 Python、R、Scala 内核镜像往往无法满足所有需求——你需要安装专属依赖库、定制 Spark 版本甚至打造一套全新的内核环境。本文将用最简单的方式带你一步步完成自定义内核镜像的构建与部署让你轻松为 Jupyter Enterprise Gateway 打造专属 Docker 镜像。为什么需要自定义内核镜像Jupyter Enterprise Gateway 负责把 Notebook 内核调度到 Apache Spark、Kubernetes 等分布式集群上运行。官方提供的内核镜像如 kernel-py、kernel-r是基础款实际使用中你通常需要 为内核预装项目依赖库避免每个用户反复pip install 定制特定版本的 Spark、TensorFlow 等计算框架 内置企业安全认证、私有 CA 证书等组件构建自定义内核镜像本质就是在官方镜像基础上扩展或从零打造一个符合网关要求的内核镜像。构建自定义内核镜像前的准备官方文档对完整流程有详细说明你可以参考 custom-images.md。开始之前需要理解两个核心文件bootstrap-kernel.sh 启动脚本位于 etc/kernel-launchers/bootstrap/bootstrap-kernel.sh负责接收网关传入的环境变量如KERNEL_ID、RESPONSE_ADDRESS并调用对应语言的 kernel launcher 启动内核。kernel launcher 启动器负责创建连接端口、加密回传连接信息、启动内核并监听中断请求实现细节见 kernel-launcher.md。这两个文件会被打包成jupyter_enterprise_gateway_kernel_image_files-VERSION.tar.gz随每个版本发布直接解压进镜像即可使用。方法一在官方镜像上扩展最快方法如果你的需求只是加几个依赖库这是最快的自定义内核镜像构建方法。参考官方内核镜像 etc/docker/kernel-py/Dockerfile 的写法# 1. 基于官方内核镜像 FROM elyra/kernel-py:VERSION # 2. 切换到 root 用户进行安装 USER root # 3. 安装你的专属依赖 RUN pip install my-libraries # 4. 切回普通用户官方镜像是 jovyan USER $NB_UID # 5. 保持默认启动命令 CMD /usr/local/bin/bootstrap-kernel.sh关键点官方内核镜像默认不以 root 身份运行所以安装依赖前需要先USER root装完再切回来保证安全。方法二从零构建独立内核镜像如果你的基础镜像不是来自 Jupyter docker-stacks比如要基于 TensorFlow GPU 镜像就需要自己补齐支持文件。核心步骤如下1. 创建非 root 用户网关对镜像运行用户没有硬性要求但强烈建议不要以 root 运行。参考 custom-images.md 中的示例创建 UID 1000、GID 100 的jovyan用户。2. 部署支持文件下载内核镜像支持文件包解压到/usr/local/bin并设置正确的属主和权限RUN curl -L https://.../jupyter_enterprise_gateway_kernel_image_files-VERSION.tar.gz | \ tar -xz -C /usr/local/bin RUN adduser --system --uid 1000 --gid 100 jovyan \ chown -R jovyan:users /usr/local/bin/kernel-launchers ENV KERNEL_LANGUAGE python USER jovyan CMD /usr/local/bin/bootstrap-kernel.sh注意KERNEL_LANGUAGE环境变量必须设置支持python、r、scalabootstrap 脚本会据此选择对应的启动器。部署自定义内核镜像kernelspec 配置镜像构建完成后最后一步是配置 kernel specificationkernelspec让网关能识别并使用你的镜像。最快捷的方式是复制官方模板参考 python_kubernetes/kernel.jsoncd /usr/local/share/jupyter/kernels cp -r python_kubernetes python_myCustomKernel然后编辑kernel.json重点修改三处display_name显示在 Notebook 内核下拉菜单中的名称metadata.process_proxy.config.image_name指向你构建的自定义内核镜像argv中的启动脚本路径{ language: python, display_name: My Custom Kernel, metadata: { process_proxy: { class_name: enterprise_gateway.services.processproxies.k8s.KubernetesProcessProxy, config: { image_name: myDockerHub/myCustomKernelImage:myTag } } }, argv: [ python, /usr/local/share/jupyter/kernels/python_myCustomKernel/scripts/launch_kubernetes.py, --RemoteProcessProxy.kernel-id, {kernel_id}, --RemoteProcessProxy.response-address, {response_address}, --RemoteProcessProxy.public-key, {public_key} ] }在 Kubernetes 集群中验证效果完成配置后重启 Enterprise Gateway或刷新 Notebook 会话在新建内核的下拉菜单中就能看到你的自定义内核了。选择它创建 Notebook网关会调度你的自定义内核镜像到集群节点上运行如下图所示常见问题与建议 用户权限内核镜像不要以 root 运行创建专用用户并配合fix-permissions脚本调整权限还能减小 Docker 层体积。镜像拉取如果使用私有镜像仓库需要为集群配置拉取凭证imagePullSecret参见 deploy-kubernetes.md。内核过滤如果启用了EG_ALLOWED_KERNELS内核过滤记得把新的内核目录名加进去。Spark 内核如果你的自定义内核使用 Sparkkernelspec 中env段会包含大量 Spark 选项建议直接参考 spark_python_kubernetes/kernel.json 这类模板而不是从普通 Python 内核改造。构建自定义内核镜像本质上就是官方镜像 支持文件 kernelspec 配置三步曲。掌握了这套流程你就可以按需为团队打造专属的 Jupyter Enterprise Gateway 内核环境让 Notebook 在多租户集群中高效、安全地共享资源。【免费下载链接】enterprise_gatewayA lightweight, multi-tenant, scalable and secure gateway that enables Jupyter Notebooks to share resources across distributed clusters such as Apache Spark, Kubernetes and others.项目地址: https://gitcode.com/gh_mirrors/en/enterprise_gateway创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考