2025-12-31 14:08:24 +08:00

112 lines
4.1 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# offline-download.sh
# 在有互联网的机器上执行,将所有依赖打包供离线部署使用
set -e
apt install podman-docker
export WORKDIR=/tmp/k8s-offline
for d in packages,images,k8s-binaries,helm,nvidia,gpu-operator,kubevirt
do
mkdir -p $WORKDIR/$d
done
cd $WORKDIR
echo "=== 下载 Kubernetes 二进制文件 ==="
K8S_VERSION=v1.29.6
ARCH=amd64
curl -L --retry 3 https://dl.k8s.io/${K8S_VERSION}/bin/linux/${ARCH}/kubeadm -o k8s-binaries/kubeadm
curl -L --retry 3 https://dl.k8s.io/${K8S_VERSION}/bin/linux/${ARCH}/kubelet -o k8s-binaries/kubelet
curl -L --retry 3 https://dl.k8s.io/${K8S_VERSION}/bin/linux/${ARCH}/kubectl -o k8s-binaries/kubectl
chmod +x k8s-binaries/*
echo "=== 下载 containerd ==="
CONTAINERD_VERSION=1.7.16
curl -L --retry 3 https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VERSION}/containerd-${CONTAINERD_VERSION}-linux-amd64.tar.gz -o packages/containerd.tar.gz
echo "=== 下载 runc ==="
RUNC_VERSION=v1.1.13
curl -L --retry 3 https://github.com/opencontainers/runc/releases/download/${RUNC_VERSION}/runc.amd64 -o packages/runc && chmod +x packages/runc
echo "=== 下载 CNI 插件 ==="
CNI_VERSION=v1.4.1
curl -L --retry 3 https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-amd64-${CNI_VERSION}.tgz -o packages/cni-plugins.tgz
echo "=== 下载 Helm ==="
HELM_VERSION=v3.13.3
curl -L --retry 3 https://get.helm.sh/helm-${HELM_VERSION}-linux-amd64.tar.gz -o helm/helm.tar.gz
echo "=== 下载 NVIDIA Driver仅元信息实际需手动获取==="
echo "注意NVIDIA 驱动无法直接 wget请从官网下载"
echo "https://www.nvidia.com/Download/index.aspx?lang=en-us"
echo "选择 A100-SXM4 / Data Center Driver for Linux x86_64"
echo "保存为: nvidia/NVIDIA-Linux-x86_64-535.161.08.run"
echo "=== 下载 NVIDIA Container Toolkit 依赖(通过 apt 离线包)==="
# 使用 docker pull + save 方式更可靠
echo "准备构建本地 apt repo 或使用 .deb 包方式"
# 推荐方法:在一台联网 Ubuntu 22.04 上执行:
cat > prepare-debs.sh << 'EOF'
#!/bin/bash
mkdir -p /tmp/debs
apt update
apt install -y --download-only curl conntrack socat ipvsadm iptables bridge-utils ethtool git wget tar
apt install -y --download-only nfs-utils nfs-common
apt install -y --download-only nvidia-driver-535 nvidia-utils-535 nvidia-dkms-535
apt install -y --download-only nvidia-container-toolkit
cp /var/cache/apt/archives/*.deb /path/to/offline/nvidia/
EOF
echo "请运行 prepare-debs.sh 获取 .deb 包"
echo "=== 拉取 GPU Operator 所需镜像 ==="
# GPU Operator 会拉取多个镜像,我们预先列出并导出
cat > gpu-operator-images.txt << 'EOF'
nvcr.io/nvidia/gpu-operator:v24.9.0
nvcr.io/nvidia/gpu-feature-discovery:v0.8.0
nvcr.io/nvidia/driver:535.161.08-ubuntu22.04
nvcr.io/nvidia/container-toolkit:1.14.2-ubuntu22.04
nvcr.io/nvidia/dcgm:3.1.7-3-ubuntu22.04
nvcr.io/nvidia/k8s-device-plugin:0.14.2-ubi8
nvcr.io/nvidia/k8s-operator-validator:v1.2.0
EOF
while read img; do
echo "Pulling $img"
docker pull $img || echo "Failed: $img"
done < gpu-operator-images.txt
# 保存镜像为 tar 文件
docker save $(cat gpu-operator-images.txt | tr '\n' ' ') -o images/gpu-operator-images.tar
echo "=== 拉取 KubeVirt 组件镜像 ==="
KV_VERSION=v1.1.0
cat > kubevirt-images.txt << EOF
quay.io/kubevirt/virt-operator:${KV_VERSION}
quay.io/kubevirt/virt-api:${KV_VERSION}
quay.io/kubevirt/virt-controller:${KV_VERSION}
quay.io/kubevirt/virt-handler:${KV_VERSION}
quay.io/kubevirt/virt-launcher:${KV_VERSION}
quay.io/kubevirt/cdi-operator:v1.50.0
quay.io/kubevirt/cdi-apiserver:v1.50.0
quay.io/kubevirt/cdi-uploadproxy:v1.50.0
quay.io/kubevirt/cdi-cloner:v1.50.0
quay.io/kubevirt/cdi-importer:v1.50.0
quay.io/kubevirt/cdi-uploadserver:v1.50.0
EOF
while read img; do
docker pull $img || echo "Failed: $img"
done < kubevirt-images.txt
docker save $(cat kubevirt-images.txt | tr '\n' ' ') -o images/kubevirt-images.tar
echo "=== 创建最终离线包 ==="
tar -czf k8s-offline-all.tar.gz .
echo "✅ 所有离线资源已生成k8s-offline-all.tar.gz"
echo "请将其复制到目标环境并解压"