使用kubectl操作开发机
基于kubectl命令创建开发机
因为ContainerSever是内置CRD,因此支持通过kubectl的yaml命令,执行开发机资源创建,yaml示例如下:
# demo_cs.yaml
---
apiVersion: apps.ebcloud.com/v1alpha1
kind: ContainerServer
metadata:
name: demo_cs
annotations:
eks.ebcloud.com/enable-spot: "false" # 启用竞价实例
spec:
command: # 开发机的自定义启动命令
enableDocker: false # 是否启用内置docker
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}" ] || [ "$(echo "${EBCS_SYS_INITIALIZED}" | tr '[:upper:]' '[:lower:]')" = "false" ]; then
## 1.1 initialize_install子阶段
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)' | tee -a /etc/profile
echo "K8s env >> /etc/profile DONE"
fi
# 初始化docker config文件
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
# 2. launch阶段
# 启动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 > /tmp/jupyter.log 2>&1 &
fi
# 启动sshd服务
if service ssh start -D; then
echo "SSHD exited."
else
/usr/sbin/sshd -D
echo "SSHD failed to start."
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)
count: "1"
准备好yaml文件后,可以通过如下命令,创建开发机:
kubectl apply -f mycs.yaml
通过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
调整开发机配置
开发机配置调整,包括调整型号,调整存储卷挂载,调整docker开启情况。
- 调整型号
- 调整存储卷挂载
- 调整docker开启情况
创建竞价实例开发机
自研开发机器ContainerServer,需要通过配置annotation实现:
apiVersion: v1
kind: ContainerServer
metadata:
annotations:
eks.ebcloud.com/enable-spot: "true" #竞价annotation 标记
...
name: cs-xxx
namespace: cs-xxx
spec:
...
使用专属节点创建开发机
自研开发机器ContainerServer,通过配置开启预约实例项实现,YAML如下:
apiVersion: v1
kind: ContainerServer
metadata:
name: cs-xxx
namespace: cs-xxx
spec:
enablePrePaid: true # 节点池标记