弹性容器集群部署PyTorch实例
本文将引导用户如何使用自定义镜像在Alaya NeW弹性容器集群上部署一个PyTorch实例。通过这一过程的探索,为用户提供了 在云端快速部署自定义服务的参考。无论是对于希望快速启动开发环境的开发者,还是需要将复杂应用迁移到云端的企业用户,实现高效的资源管理和开发效率提升。
前提条件
本教程假定您已经具备以下条件:
- 用户已安装命令行工具(kubectl),如用户尚未安装,可参考安装命令行工具(kubectl)完成安装。
- 用户已开通弹性容器集群,且集群可正常使用。如尚未开通,可参考开通弹性容器集群完成开通。
准备工作
下载源码文件
本示例用户需下载所需要的源码文件,本示例包含以下文件,文件的作用及说明如下所示。
文件名 | 功能 |
---|---|
Dockerfile | 该文件用来构建docker镜像。 |
config_harbor_secret.json | 配置与Harbor容器镜像仓库相关的敏感信息。 |
jupyter_harbor_secret.yaml | 定义secret 资源:在部署deployment资源时,用来拉取自定义镜像。 |
jupyter_deploy.yaml | 定义Deployment 资源,该资源定义如何启停Pod。 |
jupyter_svc.yaml | 定义Service 资源,该资源处理网络和发布服务 。 |
jupyter_serviceexport.yaml | 定义ServiceExporter 资源,该资源将服务发布到公网。 |
源码文件解析
- Dockerfile:将基于PyTorch的基础镜像来创建自定义镜像,文件详细信息如下所示。
- config_harbor_secret.json:在本示例中,该文件配置了harbor镜像仓库的基本信息,文件详细信息如下所示。用户需将以下信息替换为实际信息。
变量名 | 说明 | 来源 | 示例 |
---|---|---|---|
your_harbor_server | Harbor 服务器地址 | 资源中心/存储管理/镜像仓库界面 | https://registry.hd-01.alayanew.com:8443 |
username | Harbor 登录用户名 | 开通短信 | user |
password | Harbor 登录密码 | 开通短信 | password |
用户邮箱地址 | user@example.com |
- jupyter_harbor_secret.yaml:该文件配置了密码信息,用于存储和管理敏感信息(如密码、API 密钥、证书等)。文件详细信息如下所示。用户需将以下信息替换为实际信息。
变量名 | 说明 | 来源 | 示例 |
---|---|---|---|
.dockerconfigjson | 使用base64对config_harbor_secret.json进行编码 | 手动编码 | 0ssdxkcjuielsdjf... |
- jupyter_deploy.yaml:指定部署信息。文件详细信息如下所示,用户需将以下信息替换为实际信息。
变量名 | 说明 | 来源 | 示例 |
---|---|---|---|
image | 镜像名称 | 自定义镜像 | registry.hd-01.alayanew.com:8443/alayanew-dab57f9b-35f5-4dc1-afff-5cfd02esdsfe/pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel-ssh-1.0 |
resources.requests.[GPU] | GPU资源信息 | 弹性容器集群/集群详情/算力配置 | nvidia.com/gpu-h800 |
volumes.persistentVolumeClaim.claimName | pvc名称 | 默认创建的pvc,参考声明存储 | pvc-capacity-userdata |
- jupyter_svc.yaml:指定服务信息。本示例定义了一个ClusterIP类型的服务,用于处理Kubernetes中的网络流量,开放TCP端口8888,旨在将部署发布到公共互联网。
- jupyter_serviceexport.yaml:用于定义和服务导出(Service Export)相关的资源。可用于向公网发布服务。
操作步骤
配置镜像
- 执行如下命令,从远程镜像仓库(默认是 Docker Hub)拉取指定的镜像到本地,示例如下图高亮①所示。
docker pull <镜像名称>:<标签>
- 执行如下所示的命令,根据Dockerfile构建一个新的镜像。并为其分配一个唯一的名称和标签,示例如下图高亮②所示。
docker build -t <名称:标签> -f <指定Dockfile的路径> .
- 执行如下所示的命令,登录到指定的私有镜像仓库Harbor。示例如上图高亮③所示。
echo <密码> | docker login <仓库地址> -u <用户名> --password-stdin
- 执行如下所示的命令,为本地已有的镜像创建一个新的标签,示例如下图高亮①所示。
docker tag <源镜像>:<源标签> <目标镜像>:<目标标签>
- 执行如下所示的命令,将标记后的镜像推送到目标仓库,示例如下图高亮②所示。
docker push <目标镜像>:<标签>
部署资源
- 执行如下所示的命令,声明弹性容器集群配置,示例如下图高亮①所示。
export KUBECONFIG="</path/to/kubeconfig>"
- 执行如下所示的命令,创建一个Namespace,执行完成后,系统成功创建了一个新的Namespace,示例如下图高亮②所示。
kubectl create namespace <namespace-name>
- 执行如下所示的命令,将
jupyter_harbor_secret.yaml
文件中的定义的资源配置应用到Kubernetes
集群,示例如下图高亮③所示。
kubectl apply -f jupyter_harbor_secret.yaml
- 执行如下所示的命令,将
jupyter_harbor_secret.yaml
文件中定义的资源配置应用到Kubernetes
集群,示例如下图高亮④所示。
kubectl apply -f jupyter_deploy.yaml
- 执行如下所示的命令,将
jupyter_svc.yaml
文件中定义的资源配置应用到Kubernetes
集群,示例如下图高亮⑤所示。
kubectl apply -f jupyter_svc.yaml
- 执行如下所示的命令,将
jupyter_serviceexport.yaml
文件中定义的资源配置应用到Kubernetes
集群,示例如下图高亮⑥所示。
kubectl apply -f jupyter_serviceexport.yaml
查看资源
查看所有的pods
- 执行如下所示的命令,查看Kubernetes集群中对应命名空间下的所有
Pod
,示例如下图高亮①所示。
kubectl get pods -n <namespace>
- 执行如下所示的命令,查看Kubernetes集群中对应命名空间下的所有
Deployment
,示例如下图高亮②所示。
kubectl get deploy -n <namespace>
-
执行如下所示的命令,查看Kubernetes集群中对应命名空间下的所有
Service
,示例如下图高亮②所示。
kubectl get svc -n <namespace>
- 执行如下所示的命令,查看Kubernetes集群中对应命名空间下的对应Pod的详细描述,输出示例文件可参见“Pod详细描述”。
kubectl describe pod jupyter-deploy-576b8fb97d-hnmhq -n jupyter
- 执行如下所示的命令,查看Pod的日志以获取登录令牌。令牌将作为服务实例URL的一部分显示。输出示例文件可参见“Pod日志信息”。从获取的日志中可获取登录令牌,本实例令牌为
ddf27395439c1197201cf7fa6d8e350e72c80d67f3a1d831
。
kubectl logs jupyter-deploy-576b8fb97d-hnmhq -n jupyter
- 执行如下所示的命令,获取Kubernetes集群中指定命名空间下的所有
ServiceExport
资源。示例如下图高亮①所示。
kubectl get serviceexporter -n jupyter
-
执行如下所示的命令,用于获取
Kubernetes
集群中指定命名空间下的ServiceExport
资源的详细信息。示例如下图高亮②所示。示例中URL地址为https://jupyter-svc-x-jupyter-x-vcrbcqty8ibg.sproxy.hd-01.alayanew.com
kubectl describe serviceexporter jupyter-se-svc -n jupyter
通过ServiceExporter发布的服务,默认的端口为22443,网页访问时需要指定端口号。例如URL地址为https://jupyter-svc-x-jupyter-x-vcrbcqty8ibg.sproxy.hd-01.alayanew.com
,则实际的登录URL地址为https://jupyter-svc-x-jupyter-x-vcrbcqty8ibg.sproxy.hd-01.alayanew.com:22443
访问服务
通过已获取的登录URL
地址以及令牌访问服务,示例页面如下图所示。
总结
本文通过自定义镜像,在Alaya NeW弹性容器集群上部署了一个集成Jupyter Notebook和PyTorch的实例,为用户展示了如何便捷地将自定义服务部署到弹性容器集群中。用户可参考本文的部署方法,快速实现自身服务的容器化与云端部署,提升开发效率与资源利用率。