创建开发机

本文为您详细介绍通过控制台和命令行创建开发机的步骤和参数配置。

前提条件

  • 已创建集群,详情请参考:创建集群
  • 已创建并行文件存储,如不需要也可忽略此步骤,详情请参考:创建存储
  • 账户余额充足。

通过控制台创建

💡 注意
旧版开发机目前无法开启docker功能,如需使用,请停止并删除旧版开发机,创建新的开发机使用。
  1. 登录英博云控制台。
  2. 在页面左侧导航栏,选择 开发机,进入开发机列表页面。
  3. 在开发机列表页面,单击左上角 创建开发机,配置创建开发机所需的参数。

开发机配置

参数
说明
集群选择开发机归属的的集群,选择集群后必须选择命名空间命名空间选择开发机部署的命名空间,支持选择自定义创建的命名空间或 Kubernetes 自建的命名空间实例名称根据提示的命名规则,自定义开发机名称。2-8字符,仅支持小写字母开头,内容支持包含小写字母、数字资源类型选择GPU卡类型或CPU类型镜像容器使用的镜像,支持选择预置镜像、自定义镜像以及外部镜像,其中自定义和外部镜像支持用户配置启动命令Docker容器Docker容器开关,默认关闭,开启后,可以在开发机内使用docker run的命令启动docker容器,docker push和pull命令推拉镜像存储每个开发机默认100GB系统盘
支持通过PVC挂载多块共享存储卷,按容量计费,支持SSD和HDD两种存储类型
支持通过PVC挂载多块块存储卷,按容量计费数量支持一次创建多台同配置开发机备注输入开发机备注信息
💡 注意
平台支持自主搭建Docker Registry用来存储和分发容器镜像,详情请参考镜像仓库

通过kubectl命令行创建

前提:

  1. 已安装kubectl工具到本地。详情请参考:安装和设置 kubectlopen in new window
  2. 已通过 kubectl 连接目标集群。具体操作详情请参考:连接集群

开发机GPU、CPU类型标签:

型号
GPU标签
GPU显存
资源申请/限制
H800_NVLINK_80GBGPU-H80080GB20c : 200G : 1GPUA800_NVLINK_80GBGPU-H80080GB10c : 100G : 1GPUA40GPU-A4048GB4c : 50G : 1GPUA16GPU-A1616GB2c : 8G : 1GPURTX_4090DGPU-4090D24GB10c : 100G : 1GPURTX_4090GPU-409024GB10c : 100G : 1GPUCPUamd-epyc-milan--

创建开发机的YAML文件,此示例中创建的单卡H800实例、启动docker容器,未启用公网IP,并挂载名为t256g的共享存储卷,示例文件 gpu-example.yaml代码如下:

########################################################
apiVersion: apps.ebcloud.com/v1alpha1
kind: ContainerServer
metadata:
  name: demo3
  namespace: default
spec:
  command:
  - sh
  - -c
  - |-
    if [ -z "${EBCS_SYS_INITIALIZED}" ] || [ "$(echo "${EBCS_SYS_INITIALIZED}" | tr '[:upper:]' '[:lower:]')" = "false" ]; then
        ## Init-Install命令,安装必要工具包
        ## 启用密码身份验证,允许用户通过密码登录
        mkdir -p /etc/ssh
        echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config

        ## 允许root登录
        echo "PermitRootLogin yes" >> /etc/ssh/sshd_config

        ## 为scp文件启用sftp访问
        grep -q "^Subsystem sftp" /etc/ssh/sshd_config && sed -i 's|^Subsystem sftp.*|Subsystem sftp /usr/lib/openssh/sftp-server|' /etc/ssh/sshd_config || echo "Subsystem sftp /usr/lib/openssh/sftp-server" >> /etc/ssh/sshd_config

        ## 安装sshd及相关服务
        dpkg -i /public/shared-resources/openssh-server/ubuntu_22.04_amd64/*.deb

        ## 安装docker客户端
        cp /public/shared-resources/docker-build/docker /usr/bin/docker


        ## Init-Config命令,设置密码,配置相关环境
        ## init root password
        echo "root:$EBCS_SYS_ROOT_PASSWORD" | chpasswd
        echo 'Root password initialization complete.'

        ## init k8s环境变量
        if [ -f /proc/1/environ ]; then
          echo 'while IFS= read -r line; do export "$line"; done < <(tr "\\0" "\\n" < /proc/1/environ)' | tee -a /etc/profile
          echo "K8s env >> /etc/profile DONE"
        fi

        ## init docker配置文件
        if [ -n "$DOCKER_CONFJSON" ]; then
          mkdir -p ~/.docker
          echo "$DOCKER_CONFJSON" > ~/.docker/config.json
          chmod 600 ~/.docker/config.json
          echo 'Docker config initialization complete.'
        fi
    fi
    ## Launch命令,后台启动jupyter-lab,前台启动sshd作为container server的主进程
    ## 启动jupyterlab
    if command -v jupyter-lab >/dev/null 2>&1 && [ -n "$EBCS_JUPYTER_PORT" ] && [ -n "$EBCS_JUPYTER_TOKEN" ]; then
        cd /root && jupyter-lab --allow-root --ip=0.0.0.0 --port=$EBCS_JUPYTER_PORT  --NotebookApp.token=$EBCS_JUPYTER_TOKEN --no-browser --NotebookApp.allow_origin='*' --NotebookApp.allow_remote_access=True > /tmp/jupyter.log 2>&1 &
    fi
    if service ssh start -D; then
        echo "SSHD exited."
    else
        /usr/sbin/sshd -D
        echo "SSHD failed to start."
    fi
  enableDocker: true
  image: registry-cn-huabei1-internal.ebcloud.com/ebsys/pytorch:2.5.1-cuda12.2-python3.10-ubuntu22.04-v04
  initRootPassword: '*"92Z54sS3$yvA0R'
  network: 
    public: false
    tcp:
      ports:
      - 22
      - 80
      - 443
  power: "ON"
  resources:
    cpu:
      count: "20"
    gpu:
      count: "1"
      type: H800_NVLINK_80GB
    memory:
      count: 200Gi
  sshAccess:
    enable: true
    targetPort: 22
  volumeMounts:
  - mountPath: /data
    name: t256g
    persistentVolumeClaim:
      claimName: t256g
# 执行以下命令,创建开发机。
kubectl apply -f gpu-example.yaml

# 执行以下命令,查看弹性容器实例是否创建成功。
kubectl get pod -n default

# 若需要删除开发机,执行以下命令。
kubectl delete -f gpu-example.yaml

配置示例一

  • 创建 1核2Gi CPU开发机启动docker容器、未启用公网IP、并挂载名为t256g的共享存储卷。
apiVersion: apps.ebcloud.com/v1alpha1
kind: ContainerServer
metadata:
  name: democpu
  namespace: default
spec:
  command:
  - sh
  - -c
  - |-
    if [ -z "${EBCS_SYS_INITIALIZED}" ] || [ "$(echo "${EBCS_SYS_INITIALIZED}" | tr '[:upper:]' '[:lower:]')" = "false" ]; then
        ## Init-Install命令,安装必要工具包
        ## 启用密码身份验证,允许用户通过密码登录
        mkdir -p /etc/ssh
        echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config

        ## 允许root登录
        echo "PermitRootLogin yes" >> /etc/ssh/sshd_config

        ## 为scp文件启用sftp访问
        grep -q "^Subsystem sftp" /etc/ssh/sshd_config && sed -i 's|^Subsystem sftp.*|Subsystem sftp /usr/lib/openssh/sftp-server|' /etc/ssh/sshd_config || echo "Subsystem sftp /usr/lib/openssh/sftp-server" >> /etc/ssh/sshd_config

        ## 安装sshd及相关服务
        dpkg -i /public/shared-resources/openssh-server/ubuntu_22.04_amd64/*.deb

        ## 安装docker客户端
        cp /public/shared-resources/docker-build/docker /usr/bin/docker


        ## Init-Config命令,设置密码,配置相关环境
        ## init root password
        echo "root:$EBCS_SYS_ROOT_PASSWORD" | chpasswd
        echo 'Root password initialization complete.'

        ## init k8s环境变量
        if [ -f /proc/1/environ ]; then
          echo 'while IFS= read -r line; do export "$line"; done < <(tr "\\0" "\\n" < /proc/1/environ)' | tee -a /etc/profile
          echo "K8s env >> /etc/profile DONE"
        fi

        ## init docker配置文件
        if [ -n "$DOCKER_CONFJSON" ]; then
          mkdir -p ~/.docker
          echo "$DOCKER_CONFJSON" > ~/.docker/config.json
          chmod 600 ~/.docker/config.json
          echo 'Docker config initialization complete.'
        fi
    fi
    ## Launch命令,后台启动jupyter-lab,前台启动sshd作为container server的主进程
    ## 启动jupyterlab
    if command -v jupyter-lab >/dev/null 2>&1 && [ -n "$EBCS_JUPYTER_PORT" ] && [ -n "$EBCS_JUPYTER_TOKEN" ]; then
        cd /root && jupyter-lab --allow-root --ip=0.0.0.0 --port=$EBCS_JUPYTER_PORT  --NotebookApp.token=$EBCS_JUPYTER_TOKEN --no-browser --NotebookApp.allow_origin='*' --NotebookApp.allow_remote_access=True > /tmp/jupyter.log 2>&1 &
    fi
    if service ssh start -D; then
        echo "SSHD exited."
    else
        /usr/sbin/sshd -D
        echo "SSHD failed to start."
    fi
  enableDocker: true
  image: registry.cn-hangzhou.aliyuncs.com/tangshibo/docker-io-ubuntu:22.04
  initRootPassword: '*"92Z54sS3$yvA0R'
  network: 
    public: false
    tcp:
      ports:
      - 22
      - 80
      - 443
  power: "ON"
  resources:
    cpu:
      count: "1"
    memory:
      count: 2Gi
  sshAccess:
    enable: true
    targetPort: 22
  volumeMounts:
  - mountPath: /data
    name: t256g
    persistentVolumeClaim:
      claimName: t256g