使用私有镜像创建开发机
除了英博云提供的预置镜像可以创建开发机,您还可以自行制定私有镜像创建开发机。
通过英博云控制台,基于私有镜像创建开发机
登录英博云控制台,在以下界面:开发机->创建开发机,选择自定义镜像,或者外部镜像,如下:
通过kubectl命令,基于私有镜像创建开发机
完整的yaml,参考ContainerServer CR,需要修改以下部分,设置为您的私有镜像路径:
spec:
image: custom.registry/repository:mytag # 您的自定义镜像
关于Command命令
command命令是pod启动的具体命令,以下是一段shell脚本,分为:initialize阶段、launch阶段。 其中initialize阶段进一步分为initialize_install子阶段、initialize_config子阶段。 具体的逻辑,伪代码参考内容如下:
## 1. initialize阶段
if not initialized:
# 若是未初始化,则执行2个子阶段的初始化操作
## 1.1 initialize_install子阶段
install_necessary_pkgs
## 1.2 initialize_config子阶段
init_root_passwd
init_k8s_env
init_docker_config_json
fi
## 2. launch阶段
start_jupyter-lab
start_sshd
以下是一个详细的示例:
## 1. initialize阶段
if [ -z "${EBCS_SYS_INITIALIZED}" ] || [ "$(echo "${EBCS_SYS_INITIALIZED}" | tr '[:upper:]' '[:lower:]')" = "false" ]; then
## 1.1 initializate_install子阶段
# 允许密码登录
mkdir -p /etc/ssh
echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
# 允许root用户登录
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
# 允许sftp访问,用于scp文件
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相关pkg,相关pkg已经存在于/public目录
dpkg -i /public/shared-resources/openssh-server/ubuntu_22.04_amd64/*.deb
# 安装docker client,相关pkg已经存在于/public目录
cp /public/shared-resources/docker-build/docker /usr/bin/docker
## 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
Command命令可以引用的环境变量
环境变量名称 | 取值示例 | 说明 |
---|---|---|
EBCS_SYS_INITIALIZED | true/false | ContainServer是否已经初始化 |
EBCS_SYS_ROOT_PASSWORD | Q24dUl$6x0p7W,g1 | ContainServer的初始密码 |
DOCKER_CONFJSON | {"auths":{"https://registry-cn-huabei1-internal.ebcloud.com":{"username":"myname","password":"SCU5n6j1dfk","auth":"bGlsYmVkd2luOlNxy87uNmoxM2s="}}} | 租户专属集群的auth信息 |
对于私有镜像的要求
- SSH远程连接依赖镜像预置安装
openssh-server
- vscode远程连接需镜像预置安装
openssh-sftp-server
、curl
- jupyter服务需镜像预置安装
jupyter