Merge pull request #112 from svc-design/codex/add---load_offline_images-option-for-nerdctl,-kubeadm,-sealo

Add optional offline image loader
This commit is contained in:
shenlan 2025-06-27 12:08:16 +08:00 committed by GitHub
commit 402ee2f2a0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -20,6 +20,10 @@ OFFLINE_DIR=${OFFLINE_DIR:-$SCRIPT_DIR}
# 默认使用 kubeadm可通过环境变量 DEPLOY_MODE 覆盖
DEPLOY_MODE=${DEPLOY_MODE:-kubeadm}
# 加载镜像的工具: sealos、nerdctl 或 docker
# 默认使用 sealos可通过 IMAGE_LOAD_TOOL 环境变量覆盖
IMAGE_LOAD_TOOL=${IMAGE_LOAD_TOOL:-sealos}
# === 选项代理 ===
configure_proxy() {
if [ "$USE_PROXY" = true ]; then
@ -45,15 +49,34 @@ proxy_curl() {
load_offline_images() {
local tar="${OFFLINE_DIR}/images/gpu_k8s_images.tar"
[ -f "$tar" ] || return 0
echo "📦 Loading images from $tar"
if command -v nerdctl &>/dev/null; then
sudo nerdctl load -i "$tar"
elif command -v docker &>/dev/null; then
docker load -i "$tar"
else
echo "❌ 无法找到 nerdctl 或 docker 用于加载镜像"
return 1
fi
echo "📦 导入离线镜像..."
case "$IMAGE_LOAD_TOOL" in
sealos)
if command -v sealos &>/dev/null; then
sealos load -i "$tar"
return
fi
;;
nerdctl)
if command -v nerdctl &>/dev/null; then
sudo nerdctl load -i "$tar"
return
fi
;;
docker)
if command -v docker &>/dev/null; then
docker load -i "$tar"
return
fi
;;
*)
echo "❌ 不支持的加载工具: $IMAGE_LOAD_TOOL"
return 1
;;
esac
echo "❌ 无法找到 $IMAGE_LOAD_TOOL 用于加载镜像"
return 1
}
install_all_offline_packages() {
@ -281,6 +304,7 @@ show_help() {
echo " --install-sealos 安装 Sealos"
echo " --install-kubeadm 安装 kubeadm/kubelet/kubectl"
echo " --setup-ssh 配置 SSH 免密"
echo " --load_offline_images 导入离线镜像"
echo " --deploy-k8s 部署 Kubernetes支持 sealos/kubeadm"
echo " --deploy-plugin 部署 NVIDIA Device Plugin"
echo " --run-test 运行 GPU 测试"
@ -289,11 +313,13 @@ show_help() {
echo "环境变量:"
echo " OFFLINE_DIR 指定离线包解压目录,默认为脚本所在目录"
echo " DEPLOY_MODE 设置部署模式kubeadm 或 sealos默认 kubeadm"
echo " IMAGE_LOAD_TOOL 选择加载镜像的工具sealos|nerdctl|docker默认 sealos"
echo -e "\n示例命令\t\t\t说明"
echo "USE_PROXY=true ./gpu-k8s.sh --install-nvidia # 只安装 NVIDIA 工具包并走代理"
echo "DEPLOY_MODE=sealos ./gpu-k8s.sh --deploy-k8s # 使用 sealos 部署 K8s"
echo "USE_PROXY=false ./gpu-k8s.sh --all # 全流程执行但不使用代理"
echo "OFFLINE_DIR=/path/to/offline DEPLOY_MODE=sealos ./gpu-k8s.sh --all # 使用离线包运行"
echo "IMAGE_LOAD_TOOL=nerdctl ./gpu-k8s.sh --load_offline_images # 选择 nerdctl 导入镜像"
}
# === 执行 ===
@ -312,6 +338,7 @@ for arg in "$@"; do
--install-sealos) install_sealos ;;
--install-kubeadm) install_kubeadm ;;
--setup-ssh) setup_ssh ;;
--load_offline_images) load_offline_images ;;
--deploy-k8s) deploy_k8s ;;
--deploy-plugin) deploy_plugin ;;
--run-test) run_test ;;