From 184e8f8030800b4cb3e4d74eee84a81d80a5d8d7 Mon Sep 17 00:00:00 2001 From: shenlan Date: Fri, 27 Jun 2025 10:13:19 +0800 Subject: [PATCH] default to kubeadm --- scripts/create-gpu-k8s-offline-package.sh | 11 +++++++- scripts/gpu-k8s.sh | 31 ++++++++++++++++++----- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/scripts/create-gpu-k8s-offline-package.sh b/scripts/create-gpu-k8s-offline-package.sh index 5ad745e..70fd2cb 100755 --- a/scripts/create-gpu-k8s-offline-package.sh +++ b/scripts/create-gpu-k8s-offline-package.sh @@ -9,6 +9,7 @@ NERDCTL_VERSION="${NERDCTL_VERSION:-2.1.2}" NVIDIA_PLUGIN_VERSION="${NVIDIA_PLUGIN_VERSION:-v0.17.1}" NVIDIA_DRIVER_VERSION="${NVIDIA_DRIVER_VERSION:-nvidia-driver-535}" CUDA_SAMPLE_IMAGE="${CUDA_SAMPLE_IMAGE:-nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0}" +KUBEADM_VERSION="${KUBEADM_VERSION:-1.25.16}" IMAGES=( "$K8S_VERSION" @@ -25,7 +26,8 @@ mkdir -p "$WORKDIR/images" "$WORKDIR/packages" APT_PACKAGES=( curl gnupg2 ca-certificates lsb-release apt-transport-https \ software-properties-common openssh-client openssh-server uidmap \ - containerd "$NVIDIA_DRIVER_VERSION" nvidia-container-toolkit + containerd "$NVIDIA_DRIVER_VERSION" nvidia-container-toolkit \ + kubelet="${KUBEADM_VERSION}-00" kubeadm="${KUBEADM_VERSION}-00" kubectl="${KUBEADM_VERSION}-00" ) # Add NVIDIA repository for nvidia-container-toolkit @@ -36,6 +38,13 @@ curl -s -L "https://nvidia.github.io/nvidia-docker/${distribution}/nvidia-docker sed 's#^deb #deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] #' | \ sudo tee /etc/apt/sources.list.d/nvidia-docker.list +# Add Kubernetes repository for kubeadm/kubelet/kubectl +curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | \ + sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg +echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | \ + sudo tee /etc/apt/sources.list.d/kubernetes.list +cp /usr/share/keyrings/kubernetes-archive-keyring.gpg "$WORKDIR/kubernetes-archive-keyring.gpg" + sudo apt-get update -y sudo apt-get install --download-only -y "${APT_PACKAGES[@]}" cp /var/cache/apt/archives/*.deb "$WORKDIR/packages/" diff --git a/scripts/gpu-k8s.sh b/scripts/gpu-k8s.sh index 31dc021..64e521a 100644 --- a/scripts/gpu-k8s.sh +++ b/scripts/gpu-k8s.sh @@ -13,10 +13,13 @@ NVIDIA_PLUGIN_VERSION="v0.17.1" NERDCTL_VERSION="2.1.2" PROXY_ADDR="http://127.0.0.1:1081" USE_PROXY=${USE_PROXY:-false} -DEPLOY_MODE=${DEPLOY_MODE:-kubeadm} # 支持 kubeadm 或 sealos SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" OFFLINE_DIR=${OFFLINE_DIR:-$SCRIPT_DIR} +# 部署模式: kubeadm 或 sealos +# 默认使用 kubeadm,可通过环境变量 DEPLOY_MODE 覆盖 +DEPLOY_MODE=${DEPLOY_MODE:-kubeadm} + # === 选项代理 === configure_proxy() { if [ "$USE_PROXY" = true ]; then @@ -141,13 +144,27 @@ install_kubeadm() { echo "➡️ 目标版本: $KUBE_VERSION" - # 添加 Kubernetes apt 仓库 + if [ -d "${OFFLINE_DIR}/packages" ] && ls "${OFFLINE_DIR}/packages"/kubeadm_* &>/dev/null; then + echo "📦 使用离线 deb 安装 kubeadm/kubelet/kubectl" + sudo dpkg -i "${OFFLINE_DIR}/packages"/kube{adm,let,ctl}_*${KUBE_VERSION}-00*.deb 2>/dev/null || \ + sudo apt-get -f install -y + sudo apt-mark hold kubelet kubeadm kubectl + sudo systemctl enable --now kubelet + echo "✅ kubeadm/kubelet/kubectl 离线安装完成(版本 ${KUBE_VERSION})" + return + fi + + # 在线安装 sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl gnupg sudo mkdir -p /etc/apt/keyrings - curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | \ - gpg --dearmor | sudo tee /etc/apt/keyrings/kubernetes-archive-keyring.gpg > /dev/null + if [ -f "${OFFLINE_DIR}/kubernetes-archive-keyring.gpg" ]; then + sudo cp "${OFFLINE_DIR}/kubernetes-archive-keyring.gpg" /etc/apt/keyrings/ + else + curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | \ + gpg --dearmor | sudo tee /etc/apt/keyrings/kubernetes-archive-keyring.gpg > /dev/null + fi echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] \ https://apt.kubernetes.io/ kubernetes-xenial main" | \ @@ -276,7 +293,7 @@ show_help() { 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 ./gpu-k8s.sh --all # 使用离线包运行" + echo "OFFLINE_DIR=/path/to/offline DEPLOY_MODE=sealos ./gpu-k8s.sh --all # 使用离线包运行" } # === 执行 === @@ -303,7 +320,9 @@ for arg in "$@"; do install_containerd install_nvidia install_sealos - install_kubeadm + if [ "$DEPLOY_MODE" = "kubeadm" ]; then + install_kubeadm + fi setup_ssh deploy_k8s deploy_plugin