使用kubectl操作开发机
ContainerSever CR解释
ContainerSever 为英博云自研的Custom Resource,一个完整的 ContainerSever CR 定义示例如下小节所示,各个字段含义参考对应的注释。
ContainerSever CR配置
在创建开发机之前,您需要创建一个存储卷用于开发机挂载,该存储卷用来保存您的数据,具体步骤可以参考这里
然后,根据您所在的分区、存储卷和集群配置,修改yaml示例中spec参数下的image、volumeMounts、resources字段。
yaml
# democs.yaml
---
apiVersion: apps.ebcloud.com/v1alpha1
kind: ContainerServer
metadata:
name: democs
annotations:
eks.ebcloud.com/enable-spot: "false" # 启用竞价实例
scheduling.eks.ebcloud.com/node-pool: shared # 节点池标记, shared:共享节点, reserved:专属节点, booking:预约节点
spec:
enableDocker: false # 是否启用内置docker
enableSystemDisk: true # 需要设置为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
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:
enable: true # 开启 SSH 直连服务
targetPort: 22 # SSH 端口
volumeMounts:
- name: t256g # 挂载卷名称,可与存储卷名称保持一致
mountPath: /data # 挂载路径
persistentVolumeClaim:
claimName: t256g # 存储卷名称
resources:
cpu:
count: "10" # vCPU 数(核)
memory:
count: 100Gi # 内存 容量(G)
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命令,执行开发机资源创建,操作命令如下:
shell
# 创建
kubectl apply -f democs.yaml
# 查看状态
kubectl get containerserver democs -o wide通过 kubectl 管理开发机
shell
# 查看所有开发机
% 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字段,实现开机与关机,示例如下:
yaml
power: "ON" # ON开机 / OFF关机使用专属节点池创建开发机
使用专属节点池创建 ContainerServer,首先需要在英博云控制台:容器服务-> 节点池-> 创建节点为您的集群创建专属节点池,如下所示:

然后需要在 yaml 中配置 annotations 参数实现。 具体值为:scheduling.eks.ebcloud.com/node-pool: reserved,示例如下:
yaml
apiVersion: v1
kind: ContainerServer
metadata:
name: cs-xxx
namespace: cs-xxx
annotations:
scheduling.eks.ebcloud.com/node-pool: reserved # 节点池标记, shared:共享节点, reserved:专属节点, booking:预约节点
spec:
....如果在专属节点池资源被占满时,希望自动将开发机“外溢”到共享节点池,可以额外配置 annotations 参数实现。 具体值为:scheduling.eks.ebcloud.com/allow-soft-placement: "true",示例如下:
yaml
apiVersion: v1
kind: ContainerServer
metadata:
name: cs-xxx
namespace: cs-xxx
annotations:
scheduling.eks.ebcloud.com/node-pool: reserved # 节点池标记, shared:共享节点, reserved:专属节点, booking:预约节点
scheduling.eks.ebcloud.com/allow-soft-placement: "true" # 是否外溢, true:允许, false:不允许, 外溢: 当专属节点池资源不足以满足需求时, 使用共享节点池
spec:
....开发机启动后,您可以在英博云控制台:容器服务-> 节点池页面看到专属节点池的使用情况。
注意:
- yaml文件中
resources字段下的cpu和gpu规格应尽量与专属节点池规格保持一致
在共享节点池创建 Spot 竞价模式开发机
为 ContainerServer 开启 Spot 竞价实例,需要通过在 yaml 中配置 annotations 参数实现,具体值为:eks.ebcloud.com/enable-spot: "true",示例如下:
yaml
apiVersion: v1
kind: ContainerServer
metadata:
annotations:
scheduling.eks.ebcloud.com/node-pool: shared # 节点池标记, shared:共享节点, reserved:专属节点, booking:预约节点
eks.ebcloud.com/enable-spot: "true" # Spot 竞价实例标记
...
name: cs-xxx
namespace: cs-xxx
spec:
...调整开发机配置
开发机配置调整,包括以下内容:
- 调整所在节点池
- 在共享节点池时,可以开启或关闭 Spot 竞价模式
- 调整卡类型与卡数
- 调整存储卷挂载
- 调整docker开启情况
通过命令:kubectl edit containerserver {your_cs_name},然后编辑对应的字段,实现配置调整。
删除开发机实例
删除开发机(ContainerServer 资源)主要有两种方式,取决于当前是否还在yaml文件所在的目录下。
如果当前就在 democs.yaml 文件所在的目录,这是最简单的方式:
shell
kubectl delete -f democs.yaml如果不在yaml文件所在目录,或者您想直接通过名字删除,可以使用以下命令:
shell
kubectl delete containerserver democs注意:
- 执行上述命令只会删除计算实例(Pod和相关配置),为了防止误删数据,删除开发机实例不会删除您创建的存储卷。