使用kubectl操作开发机

ContainerSever CR解释

ContainerSever 为英博云自研的Custom Resourceopen in new window,一个完整的 ContainerSever CR 定义示例如下,各个字段含义参考对应的注释。

# democs.yaml
---
apiVersion: apps.ebcloud.com/v1alpha1
kind: ContainerServer
metadata:
  name: democs
  annotations:
    eks.ebcloud.com/enable-spot: "false" # 启用竞价实例
spec:
  command: # 开发机的自定义启动命令
  enableDocker: false # 是否启用内置docker
  enableSystemDisk: true # cs2.0专用的,需要设置为true
  image: registry-cn-huabei1-internal.ebcloud.com/ebsys/pytorch:2.5.1-cuda12.2-python3.10-ubuntu22.04-v09 # 开发机使用的基础镜像
  jupyterAccess:
    enable: true # 启用jupyter 访问通路
    port: 8888   # jupyter端口
    token: "9rVtdXoM8oBW-Dni5w9leJBTPBrE7KQ28lRr7xsX2eTyu9qO" # jupyter访问的token
  enablePrePaid: false  # 是否为预付费(使用节点池中的节点)
  initRootPassword: "k@z2a8v.yp(R6037" # 开发机的root初始密码
  command:
    - bash
    - -c
    - |-
        # 1. Initialize 阶段: 安装必要软件包,初始化环境配置
        if [ -z "${EBCS_SYS_INITIALIZED}"] || [ "${EBCS_SYS_INITIALIZED}" = "False" ]; then
          # 1.1 Initialize Package 子阶段: 安装必要软件包
          echo "do nothing"

          # 1.2 Initialize Config 子阶段: 初始化环境配置
          # 初始化 root 密码
          echo "root:$EBCS_SYS_ROOT_PASSWORD" | chpasswd

          # 初始化 k8s 环境变量
          if [ -f /proc/1/environ ]; then
            echo 'while IFS= read -r line; do export "$line"; done < <(tr "\\0" "\\n" < /proc/1/environ)' >> /etc/profile
            echo "Init k8s env complete."
          fi
        fi

        # 2. Launch 阶段: 启动 jupyter-lab 后台运行,启动 sshd 作为主进程运行
        # 后台启动 jupyter-lab
        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 > /dev/null 2>&1 &
        fi

        # 启动 sshd 服务,作为主进程
        if service ssh start -D; then
          echo "service ssh start failed."
        else
          /usr/sbin/sshd -D
          echo "sshd start as daemon failed."
        fi
  plannedPoweroff:
    execTime: "2025-09-30 19:24:00" # 定时关机
  network:
    public: false  # 开启公网IP
    tcp:
      ports:      # 对外暴露的端口
      - 80
      - 443
  power: "ON"      # ON开机 / OFF关机
  sshAccess:       # ssh直连服务
    enable: true   # 开启SSH直连服务
    targetPort: 22 # SSH 端口
  volumeMounts: # 挂载 存储卷
  - name: t256g # 挂载卷名称,可与存储卷名称保持一致
    mountPath: /data # 挂载路径
    persistentVolumeClaim:
      claimName: t256g # 存储卷名称
  resources:       # 资源配置
    cpu:           # vCPU 数(核)
      count: "10"
    memory:        # 内存 容量(G)
      count: 100Gi
    gpu:
      type: "A800_NVLINK_80GB" # GPU类型(A800_NVLINK_80GB, H800_NVLINK_80GB,RTX_4090, RTX_4090D)
      driver: "580.65.06"
      count: "1"

注意:

  • 2025年10月20日,英博云升级了ContainerServer的实现,优化了系统盘持久化的策略,yaml 文件需要配置字段:enableSystemDisk: true
  • 在此之前已经创建的开发机,yaml 文件中该字段会自动配置为: enableSystemDisk: false 且不可变更,不影响使用。

基于 kubectl 命令创建开发机

基于上面的CR示例,准备好yaml文件,然后可以通过kubectl的yaml命令,执行开发机资源创建,操作命令如下:

# 创建
kubectl apply -f democs.yaml

# 查看状态
kubectl get containerserver democs -o wide

通过 kubectl 管理开发机

# 查看所有开发机
% kubectl get containerserver
NAME     STATUS     AGE   ENABLE-DOCKER
a8       Poweroff   10d   false
h8       Running    10d   false
wzhgpu   Poweroff   15d   false

# 查看某台开发机的详细信息
% kubectl get containerserver h8 -owide
NAME   STATUS    AGE   ENABLE-DOCKER   SERVER-POD              SSH-ACCESS                                     EXTERNAL-IP   SERVER-CLUSTER-IP   DIND-CLUSTER-IP
h8     Running   10d   false           cs-6d8ad-e78b6-server   ssh -p 36129 root@ssh-cn-huabei1.ebcloud.com                 10.233.114.110


# 查看开发机的yaml文件
% kubectl get containerserver h8 -oyaml


# 修改开发机的配置,可以调整mount目录,资源规格
% kubectl edit containerserver h8

开机与关机

通过命令:kubectl edit containerserver {your_cs_name},然后编辑power字段,实现开机与关机,示例如下:

    power: "ON"      # ON开机 / OFF关机

使用私有节点池创建开发机

使用私有节点池创建 ContainerServer,需要通过在 yaml 中设置 spec 参数实现,具体值为:enablePrePaid: true,示例如下:

apiVersion: v1
kind: ContainerServer
metadata:
  name: cs-xxx
  namespace: cs-xxx
spec:
  enablePrePaid: true  # 私有节点池标记

在共享节点池创建 Spot 竞价模式开发机

为 ContainerServer 开启 Spot 竞价实例,需要通过在 yaml 中配置 annotations 参数实现,具体值为:eks.ebcloud.com/enable-spot: "true",示例如下:

apiVersion: v1
kind: ContainerServer
metadata:
  annotations:
    eks.ebcloud.com/enable-spot: "true"  # Spot 竞价实例标记
    ...
  name: cs-xxx
  namespace: cs-xxx
spec:
    ...

调整开发机配置

开发机配置调整,包括以下内容:

  • 调整所在节点池
  • 在共享节点池时,可以开启或关闭 Spot 竞价模式
  • 调整卡类型与卡数
  • 调整存储卷挂载
  • 调整docker开启情况

通过命令:kubectl edit containerserver {your_cs_name},然后编辑对应的字段,实现配置调整。