简介:面向K8s运维及Rancher平台使用者,这份离线镜像包用于解决内网或离线环境无法在线拉取Rancher v2.4.5及其关联组件镜像的问题,避免手工寻找版本匹配的麻烦。压缩包内共7个文件,其中5个为tar格式的Docker镜像包,按职能覆盖Rancher服务端、节点代理、kube-proxy、flannel网络插件及Prometheus节点监控组件;另有1个flannel网络部署yaml和1个说明文档,帮助快速理解导入顺序与网络配置要点。整个压缩包约178MB,使用docker load导入tar镜像即可完成基础镜像加载,再按需应用yaml文件即可搭建可用环境;每个镜像tar包独立存放,便于选择性导入。镜像中特意集成了Prometheus节点导出器、flannel CNI插件等配套组件,能有效支撑后续集群监控与网络管理。目前已有289人学习下载,适合具备一定K8s基础、需要离线交付或快速搭建Rancher实验环境的工程师参考使用。
1. Rancher V2.4.5 离线镜像包:隔离网络里最省事的一座 K8s 控制台
做过一次在隔离网段里交付 K8s 集群的活儿你就懂,最磨人的不是集群本身,而是管理面工具怎么进去。团队当时把整个部署介质翻了个遍,最后就靠一套 Rancher V2.4.5 的 docker 镜像包解决了问题。这个压缩包的本质是:把 Rancher Server 和配套 agent、系统所需的全部 docker 镜像离线整理好,导入内网后一条 docker run 就能拉起来整套图形化的 K8s 管理平台。它适合用在内网交付、机房私有化、以及所有不方便直接访问公共镜像仓库的现场。对运维工程师来说,拿到这个包相当于拿到了一个黑白照片时代的显影配方,省掉了临时拉镜像的各种折腾和失败,后续纳管业务集群也顺手很多。
2. 镜像包内容拆解:三类镜像决定你能拿它做什么
2.1 主控镜像与代理镜像:Rancher 家族的分工逻辑
先看镜像包的核心构成,目录里最显眼的肯定是 rancher/rancher:v2.4.5。这个镜像即 Rancher Server 本体,里面包含了 UI、API Server、集群管理逻辑,以及内置的 k3s 和 kubelet 相关组件。启动后,你浏览器里登录的那个 Web 控制台,就是由它提供的。
除了主控镜像,包里还有一类容易被忽略却非常关键的 rancher/rancher-agent:v2.4.5。这个镜像的职责是“被管理端”,当你要把集群导入 Rancher 时,agent 会被部署到目标集群中,负责打通目标集群与 Rancher Server 之间的通信通道。很多初次上手的人会把注意力全放在 server 镜像上,实际导入集群时才发现 agent 镜像离线里没准备,被卡住半天,指纹都差点按碎了。
另外包内还会附带一些辅助镜像,比如 cert-manager、cattle-cluster-agent、kubectl 和 hyperkube。其中 cattle-cluster-agent 与 rancher-agent 同源,负责在纳管后持续同步集群状态。把这些镜像分类理清,后续部署时才能明白“为什么 load 完所有镜像还不能直接创建集群”这类问题。
2.2 版本选型为什么是 V2.4.5:兼容边界与成熟度
选 Rancher V2.4.5 有其版本逻辑。这个版本在 v2.4.x 系列中相对稳定,功能上保留了经典的一键导入、多集群管理、项目与命名空间资源隔离,安全上也能支持自签名证书实现全链路 TLS。相比更晚的 v2.5、v2.6 系列,V2.4.5 的部署形态更轻,不需要额外引入 K3s 或嵌入式 etcd,也少了一些分布式依赖。因此对容器镜像导入和单机快速起服务这种场景,V2.4.5 显得很从容。
兼容性上,V2.4.5 可以纳管 Kubernetes 1.14 到 1.18 的一系列版本,在 K8s 迭代较快的当时,这覆盖了大部分业务集群。如果你手里的业务集群还在 1.15、1.16 这类版本上,V2.4.5 几乎就是最省心的管理端。要提醒的是,镜像包里的辅助镜像版本也都锁定在配套的版本上,使用的时候不要随意混搭几个不通用的版本镜像,否则可能出现 GUI 正常但 agent 挂掉的诡异情况,且排查起来费神,属于典型的“明明照着做的却翻车”类型。
3. 离线部署实战:从镜像导入到 Rancher Server 启动
3.1 镜像转移五连:save、load 与 tag 的处理细节
拿到镜像包之后,第一步是把里面的镜像文件导入到目标服务器。这一步的操作逻辑很简单,但细节上栽过不少跟头。常见的导出命令如下:
# 在有网环境下先拉取镜像并保存为 tar 文件 docker pull rancher/rancher:v2.4.5 docker save rancher/rancher:v2.4.5 -o rancher-server-v2.4.5.tar # 批量保存多个镜像时建议逐个写明 tag,确保 load 后 tag 不丢失 docker save rancher/rancher-agent:v2.4.5 -o rancher-agent-v2.4.5.tar docker save rancher/cattle-cluster-agent:v2.4.5 -o cattle-agent-v2.4.5.tar# 在内网服务器上批量导入 for i in *.tar; do docker load -i "$i"; done上面这段命令的逻辑是:先在可以联网的机器上把镜像 pull 下来,docker save 打包成独立的 tar 文件,再把 tar 复制到内网服务器,最后用 docker load 一次性导入。networking 隔离环境不能直接从 Docker Hub 拉镜像,这是最标准的离线搬运姿势。
注意一个容易踩的细节:docker save 指令如果不写 tag,而写 image ID,那么加载到内网服务器后镜像的仓库名和 tag 会丢失,显示成<none>:<none>。这在后面 docker run 时会出现明明有镜像却提示找不到的尴尬局面。我在处理这个资源时,习惯写全 repo 和 tag,不偷懒,后面省事很多。
3.2 单机快速起服务:docker run 启动 Rancher Server 的参数解读
镜像导入完成后,可以用一段 docker run 命令把 Rancher Server 拉起来。这是最常用的单机部署方式,命令示例如下:
docker run -d --name rancher-server \ --restart=unless-stopped \ -p 8443:443 \ -v /opt/rancher:/var/lib/rancher \ rancher/rancher:v2.4.5这段命令里有两个关键参数值得解释。一个是-p 8443:443,把容器内的 HTTPS 端口映射到了宿主机的 8443,这样在宿主机已经有 Nginx 或其他服务占用 443 时,就不会起冲突。另一个是-v /opt/rancher:/var/lib/rancher,把 Rancher 的数据目录挂载出来。这并不只是存放配置文件这么简单,里面还有 Rancher 管理的数据、证书、集群 token 和部分日志,以后升级或迁移,只要保留这个目录,Rancher 就能恢复相当一部分状态,算是一条后悔药。
启动后,用浏览器访问https://<服务器IP>:8443,第一次进入会要求设置管理员密码,设置完成后即可看到 Rancher 的首页。这里建议等待启动日志稳定后再访问,首次启动时日志里会出现 “Bootstrap Password” 字样,这组初始密码在重新设置前可以用来登录,必要时可用它救急。
3.3 高可用形态的最小方案:多个节点共同承担控制面
如果交付环境要求 Rancher 自己也要高可用,常见的做法是至少准备三台服务器,分别启动 Rancher Server,再在前面加一层负载均衡,把 443 流量分发到三台机器的映射端口。此时需要注意数据一致性,单靠 bind mount 同一个宿主机目录无法解决跨节点的一致性问题。更稳妥的方式是让 Rancher 使用外部数据库,在启动命令中添加数据库地址参数,并让多个节点共享同一个数据库。
不过在实际交付中,V2.4.5 这种形态的管理面多数场景用单节点加定期备份就够了。业务的稳定性主要由被纳管的 K8s 集群保证。如果你后续考虑升级到更高版本,再重新规划高可用形态也不迟,不必在初期就强行撑大架构。
4. 把业务集群纳管进来:导入已有集群的执行流程
4.1 生成注册命令并下发执行:代理模式的秘密
Rancher Server 启动后,最先要做的事情就是把已有的业务 K8s 集群纳入管理。这类集群往往不是 Rancher 创建的,而是用 kubeadm 或其他方式搭建的。Rancher 对这种场景的通用方案是:在集群管理页面选择“导入集群”,填写集群名称后,Rancher 会生成一段注册命令,交给目标集群的 kubectl 执行。
这段命令通常会变成下面这种形式:
curl --insecure -sfL https://<rancher-server-ip>:8443/v3/import/<token-id>/<cluster-token>.yaml | kubectl apply -f -执行命令时助手的逻辑是:通过 curl 把 Rancher Server 生成的 YAML 拉下来,再用 kubectl apply 把资源应用到目标集群。这些资源会在目标集群创建cattle-system命名空间,并部署 cattle-cluster-agent。之后 agent 会建立一个从目标集群到 Rancher Server 的主动连接,反反复复上报集群资源状态。
这里有一个新手经常误解的地方,以为 Rancher 是“远程控制”目标集群,需要从 Server 发起连接。实际恰恰相反,是目标集群内的 agent 主动回连 Server,因此在网络模型的规划上,应该确保 agent 能访问到 Rancher Server 的端口,而不是要求 Server 能访问所有业务节点的端口。
4.2 端口与网络要求:哪些端口必须通
导入集群涉及的端口并不复杂,但非常关键。下面是常见的端口要求表:
| 通信方向 | 端口 | 用途 |
|---|---|---|
| 目标集群 Agent → Rancher Server | 443 | HTTPS 控制面通信 |
| 目标集群节点 → Kubernetes API Server | 6443 | 同步状态及获取集群信息 |
| 节点驱动创建集群时 | 22 | SSH 访问新节点 |
| 目标集群节点 → 集群内 API | 10250 | kubelet 指标收集 |
实际现场最容易出问题的不是 443,而是 6443。部分网络策略默认只放行 443 和 80,一旦 agent 需要访问业务集群的 kube-apiserver 时,发现 6443 被防火墙拦截,集群状态会一直停留在“等待”或“部分可用”,这个现象在隔离网络中非常典型。处理这类问题要回到网络策略层面,提前把所有需要的端口一次性放宽,不要等失败后一个个试。
4.3 Local 集群与业务集群的合理分工
Rancher 首次启动时自带了一个本地集群,管理面 UI 上也能看到它。这个 local 集群是 Rancher 自己运行的内部集群,用来跑治理组件和代理逻辑。我在初学阶段犯过一个错误,就是把业务负载直接放到 local 集群里跑,结果一次管理面的升级连带业务跟着重启,折腾了整整一个晚上。后续交付时我会刻意提醒团队成员,local 集群只承担管理职责,业务应用一律放到正式导入的集群里。镜像包里的 agent 镜像正是为这些待纳管业务集群准备的,两者职责分开,后期运维会顺畅很多。
5. Rancher V2.4.5部署避坑:六个高频翻车点与解决方案
5.1 镜像导入后 tag 全丢失,docker run 提示找不到镜像
现象:导入 tar 包后执行docker images发现一堆<none>:<none>,docker run 时报Unable to find image。原因:导出 tar 时没有明确写 repo:tag,反而把镜像 ID 导出,导致 load 后无名无姓。解决:导出的命令一定要写完整仓库名和 tag,形如docker save rancher/rancher:v2.4.5 -o xxx.tar,不要用镜像 ID 替代。批量处理时可用循环脚本把源镜像列表逐行处理,并检查导出后的 tar 列表是否保留 tag。
5.2 首次启动后容器不断重启
现象:Rancher Server 容器启动后状态反复变成 Exited,日志里出现权限或磁盘错误。原因:数据目录挂载后权限不足,或者/opt/rancher所在分区磁盘空间不足。解决:启动前先检查挂载目录是否存在且权限为 755 或归属正确,再检查磁盘剩余空间满足至少 20GB,最后删除失败容器重新运行。日志是判断此类问题最直接的工具,别只看容器状态就反复重启。
5.3 导入集群后状态一直“等待”,集群列表点进去没内容
现象:注册命令执行成功,但集群状态长时间等待,日志显示 agent 反复连接失败。原因:目标集群的 agent 无法反向访问 Rancher Server,常见原因是让 agent 访问了localhost或错误的 IP 地址。解决:确认注册命令中的服务器地址是业务集群可达的 IP 或域名,同时在 Rancher Server 所在防火墙确认 443 端口对外可达。测试时可以用目标集群节点上的 curl 命令访问注册地址,如果连接不通就一定是网络问题,而不是配置问题。
5.4 证书报错导致页面频繁告警
现象:使用自签名证书或默认方式部署 Rancher 后,浏览器提示不安全,部分集群注册命令执行时出现 tls 相关报错。原因:Rancher 部署时未正确配置证书参数,系统生成了动态证书,但在外部访问地址不匹配或时间不同步时造成了信任链问题。解决:若内网环境没有正规证书,可在启动命令中使用--no-cacerts参数并手动放置自签证书,同时确保所有节点时间同步,NTP 服务在离线环境也需要单独配置,时间偏移通常会引起证书验证失败。
5.5 系统 Charts 拉取失败,创建项目或安装监控组件时卡住
现象:在 Rancher UI 中尝试为集群启用监控、日志或 ingress 时,界面长时间 Loading,后台日志出现与 charts 或 catalog 相关的错误。原因:Rancher 需要从内置的 charts 仓库拉取对应应用模板,离线环境下无法访问外部仓库。解决:在部署前将 Rancher 的系统 Charts 仓库替换为私有仓库地址,或者下载对应版本 charts 包并放置到数据目录中。若使用网关上做域名白名单来拨测仓库地址,绕不开离线限制,落地要稳,应该直接把仓库地址和资源打到内网对象存储或本地 HTTP 服务中。
5.6 升级或迁移后管理面报数据库异常
现象:将数据目录复制到新机器启动 Rancher,启动后登录报数据库连接异常,甚至出现空白页。原因:Rancher 默认数据目录中存在嵌入数据库,迁移时可能只复制了部分文件,或权限归属变化导致数据库文件损坏。解决:迁移前应先停止原容器,完整拷贝整个/var/lib/rancher目录,再在新机器上重新挂载并启动。切勿在容器运行期间直接复制数据目录,避免产生不一致状态,这个习惯后来救了我好几次。
6. 进阶玩法:给已有 Rancher 替换自签证书并保持集群不掉线
在实际交付里,初始部署的 Rancher 往往用的是临时自签证书,但客户安全审计要求使用受信任 CA 签发的证书,这就涉及替 Rancher 换证书。换证书最忌讳的是全局重启所有业务集群的 agent,那样把影响范围放大了。这里有一个相对平滑的做法:只更新 Rancher Server 容器内的证书文件并重启 server 容器本身。
操作上先准备新证书,将证书和私钥拷贝到数据目录中的临时文件夹,然后执行更新脚本。Rancher 2.4.x 可以通过 update-certs 命令实现证书更新:
docker exec rancher-server update-certs这个命令会根据数据目录中放置的证书重新生成配置并重启 server 内部的 Kubernetes 控制面。执行完成后,用新证书路径访问管理面,确认页面正常,再逐一对业务集群做一次快速连通测试即可。
替换证书的整个过程我强制在低峰期进行,先备份整个/var/lib/rancher数据目录,再执行命令,如果不放心还会提前抓取一次集群状态的快照。毕竟证书一换,如果链路层面不匹配,影响面可能蔓延到所有纳管集群。现场执行过一次之后,后面的交付我都会把证书替换纳入标准流程,而不是等到审计上门再手忙脚乱。希望这段经验能帮你在离线部署 Rancher 时少走一段弯路。
本文还有配套的精品资源,点击获取