This commit is contained in:
yumoqing 2025-11-24 18:37:08 +08:00
parent aee0ca2658
commit 99e98e34c8
3 changed files with 60 additions and 44 deletions

View File

@ -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

View File

@ -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

View File

@ -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 - <<REG_YAML
apiVersion: v1
kind: Pod
metadata:
name: local-registry
namespace: kube-system
labels:
app: registry
spec:
hostNetwork: true
containers:
- name: registry
image: registry:2
ports:
- containerPort: 5000
volumeMounts:
- mountPath: /var/lib/registry
name: registry-data
volumes:
- name: registry-data
hostPath:
path: /var/lib/registry
type: DirectoryOrCreate
REG_YAML
mkdir -p /opt/registry-data
ctr images import $IMAGES_DIR/registry_2.tar
ctr container create \
--net-host \
--mount type=bind,src=/opt/registry-data,dst=/var/lib/registry,options=rbind:rw \
docker.io/library/registry:2 \
registry-local
nohup ctr task start registry-local &
echo "[INFO] 部署 Storage & Virtualization..."
# 安装 Helm