diff --git a/installer/templates/common.sh.j2 b/installer/templates/common.sh.j2 index 25f46c0..6db604b 100644 --- a/installer/templates/common.sh.j2 +++ b/installer/templates/common.sh.j2 @@ -74,20 +74,5 @@ if [ -f "$BIN_DIR/cni-plugins-linux-amd64-v1.3.0.tgz" ]; then tar -C /opt/cni/bin -zxvf "$BIN_DIR/cni-plugins-linux-amd64-v1.3.0.tgz" fi -echo "[INFO] 5. 导入离线镜像..." -if [ -d "$IMAGES_DIR" ]; then - for img in "$IMAGES_DIR"/*.tar; do - [ -e "$img" ] || continue - echo "Importing $img..." - ctr -n k8s.io images import "$img" - p_img=${img//_//} - base_pimg=$(basename p_img) - limg="{{registry.ip}}:{{ registry.port}}/$base_pimg" - echo "Importing $limg..." - ctr -n k8s.io images tag $p_img $limg - ctr -n k8s.io images push --plain-http $limg - done -fi - echo "[INFO] 6. 启动 Kubelet..." systemctl enable --now kubelet diff --git a/installer/templates/containerd-registry.service b/installer/templates/containerd-registry.service new file mode 100644 index 0000000..4bf239a --- /dev/null +++ b/installer/templates/containerd-registry.service @@ -0,0 +1,10 @@ +[Unit] +Description=Local Registry using containerd +After=network.target + +[Service] +ExecStart=/usr/bin/ctr -n default task start registry-local +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/installer/templates/master.sh.j2 b/installer/templates/master.sh.j2 index 42f3f80..b672b03 100644 --- a/installer/templates/master.sh.j2 +++ b/installer/templates/master.sh.j2 @@ -32,36 +32,57 @@ chown $(id -u):$(id -g) $HOME/.kube/config echo "[INFO] 部署网络插件 (Calico)..." kubectl apply -f "$BUNDLE_ROOT/manifests/calico.yaml" +NAMESPACE="default" +LOCAL_REGISTRY="{{ registry.ip }}:{{ registry.port }}" +echo "[INFO] 5. 导入离线镜像..." +if [ -d "$IMAGES_DIR" ]; then + for tarfile in "$IMAGE_DIR"/*.tar; do + [ -e "$tarfile" ] || continue + + echo "" + echo ">>> Processing $tarfile" + + # 1️⃣ 导入镜像 + ctr -n "$NAMESPACE" images import "$tarfile" + + # 2️⃣ 获取最新导入镜像(兼容老版本 ctr) + ORIGIN_IMG=$(ctr -n "$NAMESPACE" images ls -q | head -n1) + if [[ -z "$ORIGIN_IMG" ]]; then + echo "❌ Failed to detect original image name, skipping..." + continue + fi + echo "Original image: $ORIGIN_IMG" + + # 3️⃣ 根据 tar 文件名生成本地 registry 镜像名 + # 文件名示例:docker.io_calico_cni_v3.26.1.tar + BASENAME=$(basename "$tarfile" .tar) + BASENAME=${BASENAME#*_} # 去掉 registry 前缀: calico_cni_v3.26.1 + NAME_TAG=${BASENAME} + NAME=${NAME_TAG%_*} # calico_cni + TAG=${NAME_TAG##*_} # v3.26.1 + NEW_IMG="${LOCAL_REGISTRY}/${NAME}:${TAG}" + + echo "Retag as: $NEW_IMG" + + # 4️⃣ 打 tag + ctr -n "$NAMESPACE" images tag "$ORIGIN_IMG" "$NEW_IMG" + + # 5️⃣ 推送到本地 registry + ctr -n "$NAMESPACE" images push --plain-http "$NEW_IMG" + + echo "✅ Done: $NEW_IMG" + done +fi + echo "[INFO] 部署本地 Registry 容器..." -# 启动 registry 容器 (假设 registry:2 镜像已导入) -# 如果机器上没有 docker 命令,使用 nerdctl 或 ctr 比较麻烦 -# 这里假设用户在 common.sh 步骤中通过 apt 安装了 containerd.io (含 docker CLI 吗? 不一定) -# 修正:直接使用静态 Pod 或 nerdctl。为简单起见,这里假设 containerd 环境下使用 nerdctl 或者 kubectl 部署 -# 我们使用 kubectl 部署一个简单的 registry 到本节点 -kubectl apply -f - <