VS Code SSH 远程开发
VS Code(Visual Studio Code)是一款由微软开发的轻量级、跨平台的代码编辑器,支持多种编程语言和丰富的扩展功能。本文档将演示使用VS Code通过ssh连接弹性容器集群,以便于直接在弹性容器集群的环境中进行开发和调试。
前提条件
-
本次部署会用到Kubernetes,请确保本地有可用的Kubernestes客户端工具kubectl,安装请参考安装kubectl。
-
用户已开通弹性容器集群,且集群可正常使用。如尚未开通,可参考开通弹性容器集群完成开通。
教程文件清单
首先下载本教程所需要的源码文件并解压。
| 文件 | 用途 |
|---|---|
id_rsa.pub | ssh-keygen 生成的公钥,用于 SSH 免密登录 |
credentials | aws 配置文件,用于管理对象存储 |
Dockerfile | 镜像构建文件 |
deployment.yaml | Deployment 资源,定义如何启停 Pod |
credentials
# credentials 文件示例
[default]
aws_access_key_id = [aws_access_key_id] # 替换为对象存储开通短信中的 access_key
aws_secret_access_key = [aws_secret_access_key] # 替换为对象存储开通短信中的 secret_keySSH 公私钥对
ssh-keygen
cd /root/.ssh
ls将公钥 id_rsa.pub 拷贝到 Dockerfile 同级目录。
Dockerfile
基于 PyTorch 基础镜像构建自定义镜像,包含:
- 基础工具包和 SSH 服务
- 创建非 root 开发用户
dev - 配置 AWS CLI(对象存储访问)
- 启用 openssh-server 与免密登录
- 暴露 22 端口,启动 sshd
FROM pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel
RUN apt-get update && apt-get install -y \
curl unzip openssh-server sudo vim nano git tmux wget \
screen tree htop ncdu git-lfs plocate \
&& apt-get clean
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" \
&& unzip awscliv2.zip && ./aws/install && rm -rf awscliv2.zip aws/
RUN mkdir /var/run/sshd
RUN echo 'root:root' | chpasswd
RUN useradd -m -s /bin/bash dev && echo 'dev:dev' | chpasswd
RUN usermod -aG sudo dev
RUN echo "export PATH=/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" >> /home/dev/.bashrc
RUN echo "export AWS_ENDPOINT_URL_S3=http://dingofs.hdd.mas.zetyun.cn:8081" >> /home/dev/.bashrc
COPY id_rsa.pub /home/dev/.ssh/authorized_keys
COPY credentials /home/dev/.aws/credentials
RUN chown -R dev:dev /home/dev
RUN sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]部署 在本示例中,部署信息由deployment.yaml文件指定。
具体指示弹性容器集群的Kubernetes control plane以下信息:
- 确保在任何时候只有一个Pod运行。这个实例是通过清单中的 spec.replicas 键值对定义的。
- 在运行pod的弹性容器集群计算节点上预留GPU、CPU和内存资源。在Kubernetes Pod中运行的每个Jupyter实例分配了1个gpu,由下面的spec.template.spec.containers.resources.limits.nvidia.com/gpu-h800 键值对定义。
- 指定镜像,由 spec.template.spec.containers.image 键值对定义。
- 指定pvc的挂载目录,由 spec.template.spec.containers.volumeMounts 键值对定义。
- 指定pvc,由 spec.template.spec.volumes 定义。
apiVersion: apps/v1
kind: Deployment
metadata:
name: dev-deploy
namespace: dev
spec:
replicas: 1
selector:
matchLabels:
app: dev
template:
metadata:
labels:
app: dev
spec:
restartPolicy: Always
containers:
- name: coding-dev-container
image: 镜像仓库访问地址/pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel-ssh-1.0 # 替换成自己的镜像
resources:
requests:
memory: "400G"
cpu: "26"
nvidia.com/gpu-h800: 2
limits:
memory: "400G"
cpu: "26"
nvidia.com/gpu-h800: 2
ports:
- containerPort: 22
name: ssh-port
protocol: TCP
volumeMounts:
- name: workspace
mountPath: "/workspace"
- name: workspace
mountPath: "/models"
imagePullSecrets:
- name: harbor-secret
volumes:
- name: workspace
persistentVolumeClaim:
claimName: pvc-capacity-userdata
tolerations:
- key: nvidia.com/gpu
operator: Exists
effect: NoSchedule
编写deployment.yaml文件时,替换以下信息:
| 变量名 | 说明 | 来源 | 示例 |
|---|---|---|---|
| image | 镜像名称 | 自定义镜像 | registry.hd-01.alayanew.com:8443/alayanew-******-5cfd/ubuntu2204:1.0.2 |
| resources.requests.[GPU] | GPU资源信息 | 弹性容器集群 | nvidia.com/gpu-h800 |
操作步骤
镜像准备
用户名密码:查看开通镜像仓库时的通知短信。镜像仓库访问地址 = 访问域名/项目。
#login
docker login 镜像仓库访问地址/ -u [user] -p [passwd]
# pull image
docker pull pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel
# build image
docker build --platform=linux/amd64 -t pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel-ssh-1.0 -f [/path/to/Dockerfile] .
# tag
docker tag pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel-ssh-1.0 镜像仓库访问地址/pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel-ssh-1.0
# push
docker push 镜像仓库访问地址/pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel-ssh-1.0K8s 资源部署
# 声明弹性容器集群配置,替换为实际的 kubeconfig 文件路径
export KUBECONFIG="[/path/to/kubeconfig]"
# 创建namespace
kubectl create namespace dev
# 创建secret
kubectl create secret docker-registry harbor-secret \
--docker-server=registry.hd-01.alayanew.com:8443\
--docker-username="[user]" \
--docker-password="[password]" \
--docker-email="[email]" \
--namespace dev
# 创建deploy
kubectl create -f deployment.yaml
# 端口转发
kubectl port-forward deployments/dev-deploy 10022:22 -n dev- 弹性容器集群kubeconfig相关文件获取方式请参考使用弹性容器集群
user、password参数可从客户中心/权限管理/访问管理处查看,email可在客户中心/账号概览处查看。
SSH 登录测试
ssh dev@127.0.0.1 -p 10022
配置 VS Code
编辑 .ssh/config,在配置文件中添加以下信息。
Host dev-pod
HostName 127.0.0.1
Port 10022
User dev- 配置 VS Code安装 Remote-SSH 扩展。

- 安装完之后进入

- 连接 Pod 并编写 hello.py

- 进入 Pod 中验证
hello.py创建成功:

最后更新于
这篇文档对你有帮助吗?
