简介面向需要在离线或内网环境快速搭建Kubernetes管理平台的运维与开发人员该资源打包了Rancher V2.4.5及配套网络、代理、监控组件所需的Docker镜像。压缩包共7个文件主要为5个tar镜像包涵盖Rancher agent、Flannel CNI插件、kube-proxy、prom-node-exporter等组件同时附有1个flannel.yaml编排文件和1个ReadMe.md使用说明整体大小约178.1MB。使用时直接通过docker load导入tar镜像免去在受限网络下逐一下载、匹配镜像版本的繁琐步骤可快速在离线环境拉起Rancher平台或为已有集群节点批量加载agent。目前已有289人学习下载适合具备一定Kubernetes基础、需要离线交付或部署Rancher的工程师作为镜像参考包。1. Rancher V2.4.5 离线镜像包不联网也能把 K8s 管理面立起来做 k8s 平台运维的人迟早会碰到 Rancher 这个名字。它最常干的事是把多个 K8s 集群收进同一个 Web 控制台统一做认证、RBAC 和应用发布省得每个集群都去啃 kubectl。这份 V2.4.5 的 docker 镜像包解决的是更现实的问题内网环境里怎么把 Rancher Server 立起来。镜像下载慢、docker pull 超时、仓库源不稳定交付生产环境时都是实打实的风险离线包直接绕开网络这一环。适合两类人一类要在机房内网搭建管理平台交付的运维一类想把 Rancher 当学习工具、一台机器快速跑通 k8s 多集群管理流程的开发者。下面按我实际拆包、部署、接集群的顺序写。2. 版本匹配与镜像构成2.4.5 能管到 K8s 1.18 为止2.1 Rancher 在 K8s 生态里的定位多集群控制面先理清 k8s、docker、Rancher 三者的关系这是新人最容易混的地方。docker 是容器运行时负责把镜像跑成容器k8s 是编排层负责调度和管理一组容器Rancher 是站在 k8s 之上的管理平台它自己不替代 k8s而是通过调用集群 API 去操作一个或多个 k8s 集群。所以架构图上 Rancher Server 通常是一个独立的管理面下面是若干业务集群每个集群里跑着一个 agent 进程负责和 Server 保持心跳、执行下发的资源操作。2.4.5 属于 Rancher 2.4.x 系列这一系在版本史上属于偏「稳」的分支全局集群列表、项目/命名空间隔离、RBAC、应用商店、内置监控告警这些核心功能全部成型。相比后来的 2.5、2.62.4 的 API 改动小社区踩坑记录齐全很多内部平台至今锁在这个版本。对要交付生产环境的人来说稳定压倒一切这正是这份镜像包的价值所在——它把最常用的管理面能力固定在一个已知可靠的版本上。Server 的部署形态有两种Helm 装进 k8s或单容器 docker run。2.4.5 镜像包对应的通常是后者一条 docker run 把管理面拉起来不依赖外部 etcd也不要求你预先准备一套 k8s。单容器形态适合管理面不大、或者想先跑通流程再迁移的场景。跑起来之后容器内自带一套本地管理集群和 kubectl查看 cattle-system 命名空间的 Pod 状态可以直接 docker exec 进容器操作后面验证章节我会用这个方式。Rancher 的数据模型里有个概念叫 cattle 集群也就是 Rancher 自己的本地管理集群。它承载了两类东西一是 Rancher 服务端 API 需要的各种 CRD二是下游集群注册信息的存储。所以备份 Rancher 本质上就是备份这套本地集群的数据对应到容器文件系统就是 /var/lib/rancher 目录。这一点先记住后面备份恢复章节还要用到。2.2 镜像包拆解rancher/rancher 与 agent 镜像的关系这类离线镜像包拆开以后一般是带版本号 tag 的 tar 文件每个 tar 对应若干 docker 镜像。解压后通常还会附带一份 images 清单 txt 和导入脚本 sh清单用来核对镜像是否齐全脚本就是把所有 tar 循环 docker load 一遍。核心镜像只有一个rancher/rancher:v2.4.5这是 Server 本体其余镜像按用途可以分成四类镜像作用使用场景rancher/rancher:v2.4.5Server 主程序含 UI、API、本地管理集群部署管理面必导rancher/rancher-agent:v2.4.5下游集群里跑的 agent负责注册和心跳导入已有集群、新建集群时下发rancher/pause、rancher/ingress-nginx、rancher/metrics-server 等新建下游集群时预置的系统组件离线建集群前要预置到节点rancher/mirrored-* 系列其他系统组件镜像如 etcd、flannel 的镜像包装随集群版本配套存在rancher-agent 和 rancher/rancher 是两回事这是离线包里最容易混淆的一对。Server 镜像管的是控制面agent 镜像是要下发到每个业务集群里跑的。很多人在离线环境只导了 rancher/rancher结果建集群时 agent 镜像拉不下来才回头补镜像顺序完全搞反。我习惯的做法是不管当前要不要建集群先把包里的镜像全部 load 进去反正 tar 在手上多花几分钟省得后面一次一次「等发现缺了再补」。tag 是另一个容易踩的细节。镜像包里的 tag 全部是具体版本号不带 latest。这一点是有意为之Rancher 2.4.x 的镜像如果打了 latestdocker pull 时会把镜像漂移到一个未知版本离线环境里一旦漂移后续排查成本极高。所以我在脚本里会强制按 tag 引用导入完成后用 docker images | grep rancher 核对 tag 和包内清单是否一致这一步快但能挡掉大半问题。2.3 兼容边界2.4.5 对 K8s 版本与 docker 版本的约束版本边界是这个镜像包能不能用起来的前提。先说结论Rancher 2.4.x 官方兼容矩阵里可管理的下游集群落在 K8s 1.17、1.18 这个区间具体小版本随 2.4.x 补丁更新2.4.5 遵循这个边界。如果你手里现成的业务集群是 1.19 及以上这个包管不了那是 2.5 系列才正式接管的版本。这是 2.4 系列最硬的一条线不要指望靠配置绕过——Rancher 用 client-go 和集群通信版本差太大时 API 兼容性直接出问题表现就是集群状态反复同步失败、页面报错玄学问题一查全是版本不匹配。Server 所在节点的 docker 版本也有讲究。按当时的支持列表docker 19.03.x 最稳docker 20.10 多数情况下能跑 Server但下游 RKE 集群节点如果装了 docker 20RKE 1.x 的探测逻辑会报警告。我一般把 Server 节点和下游节点的 docker 都锁在 19.03.x等整个环境稳定了再谈升级。docker 版本这个事在 2.4.5 的场景里属于「平时没感觉、出事就翻车」的类型避坑章会展开讲。另外单容器形态的 Rancher Server 不强制预装 cert-manager它默认用自己签的自签名证书这一点和 Helm 安装形态不同也是离线包通常不带 cert-manager 镜像的原因。如果你的内网有统一证书体系可以在 docker run 时挂载自定义证书但别在第一次部署时就折腾证书先让默认自签名跑通全流程后面再替换排查链路会清晰很多。3. 离线导入与单节点部署tar 包到 Web 控制台的三步3.1 环境核对磁盘、内存、docker 版本在动镜像包之前把环境当一个 checklist 过一遍能避免后面一半的翻车。第一是 docker 版本这个节点我要求 docker 19.03.x用 docker --version 确认如果是 docker 20.10也不是不能用但建议先读一遍 2.3 节的边界说明再决定。第二是磁盘/var/lib/docker 所在分区至少留 20G 空闲——镜像包解压后约 2 到 4G但 docker load 的过程需要额外的临时空间磁盘不够时 load 会莫名中断具体表现在避坑章第一条就是它。第三是内存Server 单容器建议 4G 起步我给生产环境通常配 8G因为建集群时 Rancher 还会在本地跑控制器内存太小直接表现成集群创建卡住。端口方面默认 80 和 443 要保证没被占、防火墙放行。很多内网机器开着 firewalld默认 zone 会拦 80/443导致容器起来了页面却打不开。我的习惯是在部署前就把 80/443 放行写进初始化脚本firewall-cmd --permanent --add-port80/tcp --add-port443/tcp firewall-cmd --reload ss -lntp | grep -E :(80|443)ss 这步确认端口在当前节点真的在监听而不是只看防火墙配置。如果 80 被 nginx 之类的服务占着docker run 时端口映射会失败容器反复重启docker ps 里状态一直是 Restarting这时候先解决端口占用再重新创建容器。3.2 docker load 导入镜像先解压再按清单核对镜像包的导入我从来不用一条龙脚本一把梭而是分两步走先解压再逐个 load。解压时注意包本身可能是个压缩包常见是 tar.gz 或 tar.zst先确认后缀mkdir -p /opt/rancher-offline cd /opt/rancher-offline tar xzf rancher-v2.4.5-images.tar.gz grep -c ^ rancher-images.txt # 数一下清单里有多少个镜像 for f in *.tar; do docker load -i $f; done第一行创建目录并进入第二行解压第三行统计镜像清单的数量最后一行是循环导入。grep -c 这步看似多余但它能在导入前告诉你预期的镜像总数导入完对比 docker images 的数量能立刻发现有没有漏。循环导入时如果某个 tar 损坏docker load 会直接报错并中断这时候先排查文件完整性别反复重试同一个文件。导入完成后做一次核对把实际 tag 输出到文件和 rancher-images.txt 做 diffdocker images --format {{.Repository}}:{{.Tag}} | sort /tmp/loaded.txt diff /tmp/loaded.txt (sort rancher-images.txt)diff 无输出说明镜像齐了。这一步在离线交付里是底线动作少一个镜像后面建集群时才发现排查成本就是小时级。提示diff 出来的差异行如果只是 repo 名相同但 tag 不同多半是包内有重复 tag先回看 tar 解压目录不要急着改清单。3.3 docker run 启动 Rancher Server参数逐项说明镜像导完启动 Server 就一条命令docker run -d --privileged --restartunless-stopped \ -p 80:80 -p 443:443 \ --name rancher \ rancher/rancher:v2.4.5参数拆开说-d 后台运行--privileged 给容器特权Rancher 要在容器内操作 iptables 和挂载少了它会报权限错误--restartunless-stopped 保证 docker 服务重启后容器自动拉起生产环境必须加-p 把宿主 80/443 映射进容器--name 固定容器名后面升级备份都是靠这个名字找到容器。tag 必须写全版本号 rancher/rancher:v2.4.5不能省略写成 latest理由 2.2 节说过镜像漂移在离线环境是灾难。启动后别急着开浏览器先看日志确认初始化走到哪一步docker logs -f rancher --tail 50日志里出现 Rancher UI 已就绪或 cattle 相关组件启动完成的字样再用 curl 做一次本机探测curl -k https://localhost 能拿到 302 或 200 响应说明 HTTPS 服务起来了。注意加 -k因为默认是自签名证书不加会报证书错误这个错误是预期内的不是故障。3.4 首次登录与 server-url 设置浏览器访问 https://节点IP第一次打开会要求设置管理员密码。密码策略会提示最短长度设个强密码并记录到团队密码库别用弱口令——Rancher 是管理面入口登进去就是全部集群的控制权。设置完会进到 Server URL 配置页这一步最影响后续集群接入填 IP 就写 https:// 填域名必须保证所有下游节点都能解析到这个域名。Server URL 填错是启动后最贵的错误。它会被写进集群注册命令下游 agent 用这个地址回连 Rancher填了内网才能访问的域名业务集群在另一个网段就彻底连不回来。我给内部交付的经验是先用 IP 跑通等域名和证书体系就绪后再改。修改入口在全局 → 设置 → server-url改完重启容器生效。初始化完成后进容器看一眼 cattle-system 的 Pod 状态确认管理面组件都在 Runningdocker exec rancher kubectl get pods -n cattle-system看到 cattle-cluster-agent、cattle-controller 等 Pod 处于 Running管理面才算真的立起来了。这一步会有一个等待过程一般 1 到 3 分钟取决于节点性能和镜像 load 的完整度。4. 避坑镜像导入与启动阶段的五个翻车现场下面这几条是拆包部署里真实碰过的血泪经验按「现象 → 原因 → 解决」写照着排查就行不用按顺序全读。4.1 docker load 中途报 no space left on device现象docker load -i 执行到一半进度条停住终端报 no space left on device或者报 write /var/lib/docker/overlay2/... no space。原因/var/lib/docker 所在分区剩余空间不够。镜像包解压后好几个 Gload 时 docker 要先解压 tar、再逐层写入 overlay2 目录这个过程需要的临时空间约等于镜像体积的 1.5 倍。很多人只看包大小以为剩余空间够实际到导入中段就爆了。解决先用 df -h 看 /var/lib/docker 挂载点确认空间如果确实紧改 docker 的>cat /etc/docker/daemon.json # {data-root: /data/docker} systemctl restart docker改完重启 docker 服务再重新 load。注意改>kubectl apply -f https://server-url/v3/import/cluster-id_token.yamlcluster-id 和 token 是这段命令的核心参数cluster-id 标识这个集群在 Rancher 里的资源对象token 是注册用的鉴权凭证两者拼在 URL 里泄露 token 等于把集群注册权交出去。所以这条命令不要在聊天工具里随便转发用内部文档或加密通道传递。如果业务集群也是离线环境、无法直接访问 server-url常见做法是先在能访问 Rancher 的机器上把 yaml 拉下来curl -k https://server-url/v3/import/cluster-id_token.yaml -o import.yaml scp import.yaml node:/tmp/拷到业务集群节点上再 kubectl apply -f /tmp/import.yaml。apply 之后业务集群里会创建 cattle-system 命名空间和 cattle-cluster-agent 等资源。验证是否注册成功看两个地方业务集群侧 kubectl get pods -n cattle-system 的状态以及 Rancher UI 里这个集群是否变 Active。如果 Pod Running 但 UI 长期 Pending回头按 4.3 的排查顺序走。集群导入成功后我还会顺手做两件事一是按业务线建项目把命名空间划进项目里后续 RBAC 在项目维度分配比全局维度好管得多二是关掉一些默认的全局权限避免导入集群后被所有人可见。2.4.5 的界面里这两个操作路径都在全局 → 安全与权限和项目/命名空间菜单下别等到集群多了再补那时候命名空间已经乱成一团。5.2 用 RKE 新建集群节点角色、docker 前置与离线镜像预置没有现成集群的话可以直接用 Rancher 的创建向导新建。2.4.5 走的是 RKE 1.x 的逻辑Rancher 生成一份 RKE 配置在目标节点上用 docker 把 etcd、controlplane、worker 这些组件容器化跑起来。所以节点前置要求有三条装好支持版本的 docker19.03.x、关闭 swap、节点之间网络互通且都能访问 Rancher Server。离线场景下新建集群比导入多一个步骤把下游集群要用的系统镜像预置到每个节点。Rancher 2.4.5 的创建向导里集群选项中有系统镜像相关配置常见做法是让节点预先 load 同一套离线镜像或者把所有节点放进能访问内网 harbor 的网络把 RKE 配置里的 system_images 指向 harbor 地址。这一步不做节点创建集群时 docker pull 会直接去外网离线环境必然失败。镜像拉取方式不同后面换仓库时记住 RKE 配置里镜像地址是带 tag 全量写的不是只写仓库前缀。节点注册命令是 UI 里为每个节点生成的执行后节点以 rancher-agent 容器方式加入集群简化后长这样docker run -d --privileged --restartunless-stopped \ --nethost -v /etc/kubernetes:/etc/kubernetes \ rancher/rancher-agent:v2.4.5 \ --server https://server-url --token token --worker--nethost 让 agent 直接复用节点网络避免端口映射带来的混乱--token 和 --worker 决定节点以什么角色加入。实际命令以 UI 生成的全量版本为准这里只是帮你理解每个参数在干什么。角色参数是最容易点错的生产环境里一个节点最好只勾一个角色新手图省事把 etcd、controlplane、worker 全勾在一个节点上单节点跑完体验一下可以交付生产就是在给自己埋雷。注意节点注册命令里的 token 是敏感信息命令生成后不要直接贴在共享文档里用一段时间就轮换一次。5.3 etcd 与关键参数三个最该动的配置新建集群的参数里etcd 相关是最值得提前设的别等集群跑起来再补。第一个是 etcd 快照策略在集群的编辑配置里etcd 备份可以设置定时快照间隔和保留份数我一般设每小时快照、保留 24 份同时对生产集群配置 S3 存储目标避免快照只存在本地节点磁盘坏了就全没了。第二个是 etcd 节点数小集群一个 etcd 节点够用但要知道它是单点规模上来以后扩到 3 个etcd 必须奇数个别配成 2 个或 4 个。第三个是调度相关生产环境我习惯把 controlplane 和 etcd 放在同一组节点上并打上污点worker 节点单独一组避免业务容器把控制面节点资源吃满。节点角色与规格我一般按这张表的底线来配角色职责底线建议etcd存储集群状态独立小机器SSD奇数数量controlplane运行 API、调度器、控制器与 etcd 同组或独立生产不混 workerworker跑业务负载按业务规模扩容内存优先这些配置在 2.4.5 里的路径是全局 → 集群 → 编辑配置 → 集群选项RKE 模板可以把一组参数固化下来后面新建集群直接复用。参数层面的东西说多了容易忘我的做法是每次建集群前先拉一个模板把镜像前缀、快照策略、污点三项填好再走创建向导。集群多的时候模板就是唯一让人不手滑的办法。验证一个集群是否健康我习惯在 UI 之外再用命令过一遍kubectl get nodes 看节点 Readykubectl get pods -n kube-system 看组件状态再在 Rancher 里看集群的 etcd 快照列表是否按计划生成。三条都对这个集群才算交付完成。6. 备份与升级etcd 快照加 rancher-data 容器的一次演练6.1 备份 /var/lib/rancher 的最小操作Rancher 单容器形态的全部状态都存在容器内的 /var/lib/rancher 下包括用户账号、集群注册信息、RBAC 配置。下游业务集群的 etcd 数据在各集群里不归 Rancher 管但想连业务集群一起兜底得先在每个下游集群里配置 etcd 快照UI 路径是全局 → 集群 → 工具 → 备份/恢复 etcd能配定时快照和 S3 存储目标。我先说 Server 本身的备份docker create --volumes-from rancher --name rancher-data rancher/rancher:v2.4.5 docker run --volumes-from rancher-data -v /backup:/backup \ alpine tar czf /backup/rancher-2.4.5-data.tgz /var/lib/rancher第一行创建了一个只挂载旧容器数据卷的 rancher-data 容器第二行用 alpine 把数据打成 tar 存到宿主 /backup。恢复时在新机器上导入同版本镜像把 tar 解回 /var/lib/rancher再以 --volumes-from 方式启动即可。这套备份操作就是我的后悔药没有它的时候一次手滑 rm 容器等于整个管理面归零。6.2 升级到同系列版本的换壳操作2.4.5 要升到同系列更高 2.4.x 小版本前提是你手头有对应 tag 的镜像。操作分三步备份 → 停掉旧容器 → 用 rancher-data 挂载启动新镜像docker stop rancher docker rename rancher rancher-old docker run -d --volumes-from rancher-data --privileged \ --restartunless-stopped -p 80:80 -p 443:443 \ rancher/rancher:v2.4.x注意 --restart 策略和端口映射要和原来一致否则升级完你会发现 UI 端口变了。跨大版本2.4 → 2.5不要用这个手法必须先看官方升级路径。6.3 验证一把到底升级完不要急着宣布成功我至少会跑三样docker logs -f rancher --tail 100 看日志无异常curl -k https://localhost/ping 返回 pong再登 UI 看集群列表和 RBAC 是否完好。以前我偷懒只看了 UI结果第二天用户反映某集群权限丢了查下来是数据没挂对。从那以后我每次动 Rancher 之前都强制走一遍 etcd 快照加 /var/lib/rancher 备份的双保险升级完再逐项验证权限和集群状态宁可多花十分钟也不让生产环境变成黑匣子。这套流程我用这份 2.4.5 镜像包完整跑过不止一遍照着做你的内网管理面也能稳稳立起来。希望帮到你。本文还有配套的精品资源点击获取