跳到主要内容

弹性容器集群部署PyTorch实例

本文将引导用户如何使用自定义镜像在Alaya NeW弹性容器集群上部署一个PyTorch实例。通过这一过程的探索,为用户提供了 在云端快速部署自定义服务的参考。无论是对于希望快速启动开发环境的开发者,还是需要将复杂应用迁移到云端的企业用户,实现高效的资源管理和开发效率提升。

前提条件

本教程假定您已经具备以下条件:

准备工作

下载源码文件

本示例用户需下载所需要的源码文件,本示例包含以下文件,文件的作用及说明如下所示。

文件名功能
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_serverHarbor 服务器地址资源中心/存储管理/镜像仓库界面https://registry.hd-01.alayanew.com:8443
usernameHarbor 登录用户名开通短信user
passwordHarbor 登录密码开通短信password
email用户邮箱地址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.claimNamepvc名称默认创建的pvc,参考声明存储pvc-capacity-userdata
  • jupyter_svc.yaml:指定服务信息。本示例定义了一个ClusterIP类型的服务,用于处理Kubernetes中的网络流量,开放TCP端口8888,旨在将部署发布到公共互联网。
  • jupyter_serviceexport.yaml:用于定义和服务导出(Service Export)相关的资源。可用于向公网发布服务。

操作步骤

配置镜像

  1. 执行如下命令,从远程镜像仓库(默认是 Docker Hub)拉取指定的镜像到本地,示例如下图高亮①所示。
docker pull <镜像名称>:<标签>
  1. 执行如下所示的命令,根据Dockerfile构建一个新的镜像。并为其分配一个唯一的名称和标签,示例如下图高亮②所示。
docker build -t <名称:标签> -f <指定Dockfile的路径> .

1739431477628

  1. 执行如下所示的命令,登录到指定的私有镜像仓库Harbor。示例如上图高亮③所示。
echo <密码> | docker login <仓库地址> -u <用户名> --password-stdin
  1. 执行如下所示的命令,为本地已有的镜像创建一个新的标签,示例如下图高亮①所示。
docker tag <源镜像>:<源标签> <目标镜像>:<目标标签>
  1. 执行如下所示的命令,将标记后的镜像推送到目标仓库,示例如下图高亮②所示。
docker push <目标镜像>:<标签>

1739431477628

部署资源

  1. 执行如下所示的命令,声明弹性容器集群配置,示例如下图高亮①所示。
export KUBECONFIG="</path/to/kubeconfig>"
  1. 执行如下所示的命令,创建一个Namespace,执行完成后,系统成功创建了一个新的Namespace,示例如下图高亮②所示。
kubectl create namespace <namespace-name>
  1. 执行如下所示的命令,将jupyter_harbor_secret.yaml文件中的定义的资源配置应用到Kubernetes集群,示例如下图高亮③所示。
kubectl apply -f jupyter_harbor_secret.yaml
  1. 执行如下所示的命令,将jupyter_harbor_secret.yaml文件中定义的资源配置应用到Kubernetes集群,示例如下图高亮④所示。
kubectl apply -f jupyter_deploy.yaml
  1. 执行如下所示的命令,将jupyter_svc.yaml文件中定义的资源配置应用到Kubernetes集群,示例如下图高亮⑤所示。
kubectl apply -f jupyter_svc.yaml
  1. 执行如下所示的命令,将jupyter_serviceexport.yaml文件中定义的资源配置应用到Kubernetes集群,示例如下图高亮⑥所示。
kubectl apply -f jupyter_serviceexport.yaml

1739431477628

查看资源

查看所有的pods

  1. 执行如下所示的命令,查看Kubernetes集群中对应命名空间下的所有Pod,示例如下图高亮①所示。
kubectl get pods -n <namespace>
  1. 执行如下所示的命令,查看Kubernetes集群中对应命名空间下的所有Deployment,示例如下图高亮②所示。
kubectl get deploy -n <namespace>
  1. 执行如下所示的命令,查看Kubernetes集群中对应命名空间下的所有Service,示例如下图高亮②所示。

    1739431477628

kubectl get svc -n <namespace>
  1. 执行如下所示的命令,查看Kubernetes集群中对应命名空间下的对应Pod的详细描述,输出示例文件可参见“Pod详细描述”。
kubectl describe pod jupyter-deploy-576b8fb97d-hnmhq -n jupyter
  1. 执行如下所示的命令,查看Pod的日志以获取登录令牌。令牌将作为服务实例URL的一部分显示。输出示例文件可参见“Pod日志信息”。从获取的日志中可获取登录令牌,本实例令牌为ddf27395439c1197201cf7fa6d8e350e72c80d67f3a1d831
kubectl logs  jupyter-deploy-576b8fb97d-hnmhq -n jupyter
  1. 执行如下所示的命令,获取Kubernetes集群中指定命名空间下的所有ServiceExport资源。示例如下图高亮①所示。
kubectl get serviceexporter -n jupyter
  1. 执行如下所示的命令,用于获取Kubernetes 集群中指定命名空间下的ServiceExport资源的详细信息。示例如下图高亮②所示。示例中URL地址为https://jupyter-svc-x-jupyter-x-vcrbcqty8ibg.sproxy.hd-01.alayanew.com

    1739431477628

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地址以及令牌访问服务,示例页面如下图所示。

1739431477628

总结

本文通过自定义镜像,在Alaya NeW弹性容器集群上部署了一个集成Jupyter Notebook和PyTorch的实例,为用户展示了如何便捷地将自定义服务部署到弹性容器集群中。用户可参考本文的部署方法,快速实现自身服务的容器化与云端部署,提升开发效率与资源利用率。