☰
Rancher V2.4.5 离线镜像包部署指南:从断网机房拉起 K8s 集群
2026/10/13 2:48:58 网站建设 项目流程

简介:这份资源是面向Kubernetes运维与容器化部署人员的Rancher V2.4.5离线镜像包,主要解决内网或隔离环境下无法直接拉取镜像、导致Rancher集群组件部署受阻的问题。包内共7个文件,以5个tar镜像归档为主,另附1个yaml编排文件和1个md说明文档,压缩包整体约178.1MB,体积适中便于传输与本地留存。镜像覆盖Rancher Agent、Prometheus节点导出器、Flannel CNI插件及kube-proxy等关键组件,版本与Rancher V2.4.5配套,可直接通过docker load命令导入使用。资源还提供flannel网络配置示例,方便读者快速完成基础网络与监控组件的落地。目前已有289人学习下载,适合正在搭建或维护Rancher集群、需要离线部署方案的运维工程师参考,能有效减少镜像查找与版本匹配的试错成本。

1. Rancher V2.4.5 离线镜像包:把 K8s 集群从断网机房拉起来

很多做私有化交付的兄弟都遇到过这种场景:客户机房完全断网,或者只有一台跳板机能连外网,但要求你三天内把一套 K8s 管理平台跑起来。这时候在线docker pull就是奢望,镜像下载慢、拉取超时、TLS 握手失败轮番上阵。Rancher V2.4.5 的 docker 镜像包就是为这种环境准备的——它把 Rancher Server 及其依赖的系统镜像预先打包成 tar 归档,你只需要把包拷进内网,用docker load灌进本地镜像仓库,再配合 RKE 拉起下游集群即可。这套资源适合做离线交付、内网实验环境搭建、以及需要固定版本复现问题的运维人员。它不解决 K8s 本身怎么用,但解决“东西都下不下来,后面全白搭”这个前置问题。

2. 镜像包拆开看:V2.4.5 里到底塞了哪些东西

2.1 从版本号反推组件构成

Rancher V2.4.5 是 2020 年中的稳定版,这个时期的 Rancher 架构还是“单容器跑 Server + RKE 管下游”的模式。镜像包里通常包含三类 tar 文件:第一类是rancher/rancher:v2.4.5主镜像,这是整个管理平面的核心;第二类是rancher/rke-tools系列,版本号一般跟着 RKE 走,负责节点上的 Etcd、Kubelet 容器操作;第三类是系统级镜像,比如rancher/hyperkube、rancher/calico、rancher/coreos-etcd、rancher/nginx-ingress-controller等,这些是下游集群初始化时真正要用的。

判断一个包是否完整,不要只看文件数量,要看有没有覆盖这三层。我一般会先解压一个最小的 tar 看看 manifest,确认RepoTags里带的是rancher/前缀还是rancher/加具体组件名。如果只有主镜像没有 RKE 工具镜像,下游集群大概率卡在Waiting for API server或者节点一直Provisioning。

2.2 镜像命名规则与导入前的校验

Rancher 的镜像 tag 有很强的规律性。以 V2.4.5 为例,主镜像 tag 就是v2.4.5,但 RKE 工具镜像可能是v1.2.x这种独立版本号。导入之前建议先做一次清单核对,避免导到一半发现缺组件。

# 列出 tar 包内所有镜像的 RepoTags,不实际导入 for f in *.tar; do echo "=== $f ===" docker load -i "$f" --quiet 2>/dev/null || true done # 更稳妥的方式:用 tar 直接看 manifest(不依赖 docker daemon) tar -xOf rancher-v2.4.5.tar manifest.json | python3 -m json.tool | grep -i "RepoTags" -A5

上面第一段循环适合包已经拷到本机、docker 可用的情况,--quiet减少输出干扰。第二段用tar -xOf直接读manifest.json,不启动 docker,适合在跳板机上先验包。关键参数是-O,表示输出到标准输出而不是解压到磁盘。如果 manifest 里RepoTags出现null,说明这个 tar 是docker save时没打 tag 的裸镜像,导入后需要手动docker tag补名字,否则 Rancher 启动时找不到镜像。

2.3 导入顺序与本地仓库准备

导入本身不复杂,但顺序有讲究。先导系统基础镜像,再导 RKE 工具,最后导 Rancher 主镜像。原因是 Rancher 容器启动时会去检查本地有没有可用的 hyperkube 和 etcd 镜像,如果主镜像先跑起来而依赖缺失,日志里会刷Failed to find image,虽然不致命但会拖慢首次启动。

# 按依赖顺序批量导入 for img in rancher-coreos-etcd.tar rancher-hyperkube.tar rancher-rke-tools.tar rancher-calico.tar; do echo "Loading $img ..." docker load -i "$img" done # 最后导入主镜像 docker load -i rancher-v2.4.5.tar # 确认所有镜像就位 docker images | grep -E "rancher|hyperkube|etcd|calico"

docker load -i的-i指定输入文件,等价的还有--input。如果包是 gzip 压缩过的,先gunzip再 load,docker 不直接吃.tar.gz。导入完成后用docker images过滤确认,重点看rancher/rancher的 tag 是不是v2.4.5,以及rancher/rke-tools是否存在。如果客户环境有 Harbor 或 registry:2,建议导入后立刻docker tag加docker push推到内网仓库,这样下游节点可以通过 RKE 的private_registries配置直接拉,不用每台节点都拷 tar 包。

3. 用镜像包拉起 Rancher Server:单节点与高可用两条路

3.1 单节点 docker run 的完整参数

单节点模式适合 PoC 和内网小规模管理。核心是挂载/var/lib/rancher做持久化,挂载/var/run/docker.sock让 Rancher 能操作宿主机 docker,再暴露 80 和 443。

docker run -d \ --restart=unless-stopped \ --name rancher-server \ -p 80:80 -p 443:443 \ -v /var/lib/rancher:/var/lib/rancher \ -v /var/run/docker.sock:/var/run/docker.sock \ -e CATTLE_SYSTEM_DEFAULT_REGISTRY=registry.internal:5000 \ rancher/rancher:v2.4.5

--restart=unless-stopped保证宿主机重启后容器自动拉起,但手动 stop 后不会自己回来,适合维护窗口。CATTLE_SYSTEM_DEFAULT_REGISTRY这个环境变量很关键,它告诉 Rancher 下游集群去哪个内网仓库拉系统镜像。如果不设,Rancher 会默认去 docker.io,断网环境直接卡死。端口映射按需改,如果 80/443 被占用,可以映射到 8080/8443,但后续 RKE 集群的server地址要跟着改。

3.2 高可用模式下的镜像分发

V2.4.5 的高可用还是基于 RKE 在三个节点上跑 Rancher Server 的 active/active 模式,前面挂一个外部 LB。这种模式下镜像包不能只在一台机器上 load,三个节点都要有,或者统一推到内网 registry。

# 在每台 HA 节点上执行,或从 registry 拉 docker pull registry.internal:5000/rancher/rancher:v2.4.5 docker pull registry.internal:5000/rancher/rke-tools:v1.2.6 # 验证镜像摘要一致 docker inspect --format='{{index .RepoDigests 0}}' registry.internal:5000/rancher/rancher:v2.4.5

docker inspect那行取的是镜像的 digest,三台节点比对一下,确保 registry 没有返回被篡改或缓存污染的层。HA 模式对镜像一致性要求比单节点高,因为 Rancher Server 之间会互相通信,如果版本或层不一致,可能出现节点间状态同步异常。常见做法是先把 tar 包 load 到一台机器,tag 成内网地址,push 到 registry,然后其余节点直接 pull。

3.3 下游集群创建时的镜像源配置

Rancher Server 跑起来只是第一步,真正容易翻车的是创建下游 K8s 集群。在 V2.4.5 的 UI 里,集群配置的“高级选项”中有个Private Registry区域,要填内网仓库地址和凭据。

配置项填写内容说明
Registry URLregistry.internal:5000不带 http/https 前缀
Username按仓库实际匿名仓库留空
Password按仓库实际同上
System Images勾选“使用私有仓库”否则仍走 docker.io

如果这里漏配,RKE 在节点上执行docker pull rancher/hyperkube时会超时,集群状态卡在Waiting for API server to become healthy。这个报错在热词里也出现过,很多人以为是证书问题,其实先查镜像源更快。

4. 避坑排查:离线导入 Rancher 镜像最常见的五个翻车点

4.1 导入后镜像 tag 变成 none

现象:docker load成功,但docker images里看到rancher/rancher的 tag 是<none>。原因:tar 包在制作时用了docker save但没保留 tag,或者中间经过了docker export/import转换,丢失了元数据。解决:用docker tag <IMAGE_ID> rancher/rancher:v2.4.5手动补 tag。补完后最好重新docker save一份带 tag 的包,避免下次再踩。

4.2 下游集群卡在 API server not healthy

现象:RKE 日志显示the api server is not healthy after 4m0.00747357s,节点一直不 Ready。原因:节点上拉不到rancher/hyperkube或rancher/coreos-etcd,容器反复重启。断网环境下 RKE 默认去 docker.io 拉,必然失败。解决:确认 Rancher Server 的CATTLE_SYSTEM_DEFAULT_REGISTRY已设,且下游集群配置里私有仓库已勾选。如果已经卡住,删掉集群重建比原地修更快。

4.3 docker load 报 no space left on device

现象:导入到一半报磁盘空间不足,docker 服务异常。原因:/var/lib/docker所在分区容量不够,Rancher 全套镜像解压后可能占用 5-10GB,加上原有镜像很容易撑爆。解决:导入前df -h /var/lib/docker确认剩余空间,必要时docker system prune清理无用镜像和构建缓存。如果分区无法扩容,可以把 docker root 迁到更大分区。

4.4 内网 registry 推送后下游拉取报证书错误

现象:RKE 节点docker pull registry.internal:5000/...报x509: certificate signed by unknown authority。原因:内网 registry 用了自签证书,节点 docker daemon 不信任。解决:把 CA 证书放到每台节点的/etc/docker/certs.d/registry.internal:5000/ca.crt,然后systemctl restart docker。或者在内网 registry 前面加一层受信任的 LB 证书。

4.5 Rancher UI 能打开但创建集群按钮灰色

现象:Rancher Server 容器正常运行,UI 可访问,但“添加集群”不可点或报错。原因:/var/lib/rancher挂载目录权限不对,或者容器内无法访问 docker.sock。解决:检查docker logs rancher-server是否有permission denied相关输出。确保挂载的宿主目录对 docker 组可写,docker.sock的权限通常是srw-rw---- root docker,运行 Rancher 的用户要在 docker 组里。

5. 把镜像包用成可复现的交付资产:校验、归档与版本锁定

镜像包最容易出的问题不是导入失败,而是“这次能跑,下次换台机器就不行”。我后来养成一个习惯:每次交付前,先在一个干净的虚拟机里从零走一遍导入和集群创建,把整个过程录成脚本,而不是靠记忆敲命令。

#!/bin/bash # offline-rancher-deploy.sh set -euo pipefail REGISTRY="registry.internal:5000" RANCHER_TAG="v2.4.5" WORKDIR="/opt/rancher-offline" # 1. 校验包完整性 cd "$WORKDIR" sha256sum -c checksums.sha256 # 2. 导入并推送到内网仓库 for tarfile in *.tar; do docker load -i "$tarfile" done docker tag "rancher/rancher:${RANCHER_TAG}" "${REGISTRY}/rancher/rancher:${RANCHER_TAG}" docker push "${REGISTRY}/rancher/rancher:${RANCHER_TAG}" # 3. 启动 Rancher Server docker run -d --restart=unless-stopped --name rancher-server \ -p 80:80 -p 443:443 \ -v /var/lib/rancher:/var/lib/rancher \ -v /var/run/docker.sock:/var/run/docker.sock \ -e CATTLE_SYSTEM_DEFAULT_REGISTRY="${REGISTRY}" \ "${REGISTRY}/rancher/rancher:${RANCHER_TAG}" # 4. 等待就绪 until curl -sk https://localhost/ping | grep -q "pong"; do sleep 5 done echo "Rancher Server is ready."

这个脚本里set -euo pipefail让任何一步失败都立即退出,避免“中间错了但后面还在跑”的假成功。sha256sum -c依赖一个提前生成的checksums.sha256文件,制作镜像包时顺手sha256sum *.tar > checksums.sha256就行。最后那个until curl循环是等 Rancher 的/ping接口返回pong,比固定sleep 60靠谱,因为不同硬件上启动时间差异很大。

版本锁定方面,V2.4.5 这个版本号本身就是一个锚点。不要混用不同批次的 tar 包,哪怕都是v2.4.5,如果来源不同,镜像层 digest 可能不一样。我一般会在交付文档里记下每个 tar 的 sha256 和docker inspect出来的 digest,下次客户说“上次那套跑不起来”,先比对 digest 是不是同一个东西。

还有一个容易忽略的点:RKE 的版本。Rancher V2.4.5 默认搭配的 RKE 版本在 UI 里是可选的,但离线环境下如果镜像包里没有对应版本的rke-tools,创建集群时会报找不到工具镜像。常见做法是提前确认好 RKE 版本,把对应的rancher/rke-tools:v1.2.x一并打进包里,而不是只打 Rancher 主镜像。从那以后我每次打包都强制走一遍“干净虚拟机全流程”,确认从 load 到集群 Ready 不依赖任何外网请求,才敢把包发给客户。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询