UOS上离线部署Rancher容器管理平台的完整实操

发布时间:2026/10/22 13:52:57
UOS上离线部署Rancher容器管理平台的完整实操
最近在一台跑着 UOS 系统的服务器上把 Rancher 完整部署了起来从准备离线物料到最终打开管理界面前后踩了不少坑也跑通了整个流程。这篇就是把我的实操过程完整记录下来如果你也打算在国产化环境下做容器平台建设或者正想在 UOS 上跑一套 Kubernetes 统一管理面可以直接参考这套方案。我会把体系选型、离线镜像准备、helm 安装、证书处理、常见坑全部讲一遍尽量让没接触过 Rancher 的人也能照着做出来。先说下这东西到底解决什么问题。Rancher 是一个开源的多集群 Kubernetes 管理平台它可以在 Web 界面里完成集群的创建、导入、权限分配、应用部署、监控告警相当于给你的所有 K8s 集群装了一个图形化控制台。平时我们十几个环境全靠 kubectl 切 context环境一多很容易敲错命令有了 Rancher 之后开发、测试、生产集群都在同一个界面里切换权限也能按项目隔离运维效率提升非常明显。UOS 系统在国内政企和行业场景里越来越常见很多单位要求核心应用必须跑在国产化底座上而容器平台作为上层应用的标准载体自然也需要在这类系统上落地。我这次是在一台全新的 UOS 服务器上做的单节点部署用官方推荐的方式在内网环境里把 Rancher 装起来整个过程既有常规 Linux 部署的共通点也有不少国产系统环境特有的坑下面一一拆解。1. 部署方案整体设计与选型思路1.1 为什么要在 UOS 上跑 Rancher先把背景说清楚。UOS 系统本质上是 Linux 发行版内核和用户态工具与主流发行版高度一致因此理论上常见的开源软件都能跑。但实际落地时你会发现很多软件在 UOS 上的资料很少遇到问题不知道是该查系统的问题还是软件自身的问题特别是容器平台这种牵一发动全身的组件更需要一套稳妥的部署路径。Rancher 作为一个控制面本身也是跑在 Kubernetes 之上的应用它可以在单机上以 all-in-one 的方式部署也可以部署在已有 K8s 集群中。对于我们这种没有现成 K8s 集群、也不想先造一套集群再装管理面的场景直接用单机模式部署是最快的路径。Rancher 在单机模式下会内置启动一个 Kubernetes 集群相当于管理面和被管理面在同一台机器上适合测试验证和为后续多集群纳管做铺垫。另外选择 Rancher 而不是裸装 K8s 组件还有一个很现实的原因后续要接开发、测试、生产多套集群Rancher 的集群导入功能可以省去大量手工配置 kubeconfig 的麻烦。而且它自带 UI团队成员不需要人人会敲 kubectl普通开发也能自助查看日志、部署应用。1.2 离线部署还是在线部署在 UOS 这类国产化系统环境中往往面临一个很现实的问题机器所在网络是隔离的无法直接访问公网镜像仓库。即使有外网很多单位的策略也不允许服务器直连互联网必须走内部镜像源。所以这次部署我一开始就按离线环境来设计。离线部署的核心思路是在能联网的机器上把所需镜像全部拉下来导出成 tar 包再传到目标机器上导入私有镜像仓库或直接导入到 containerd/docker。Rancher 官方其实提供了完整的离线部署文档但流程有点散实际动手的时候很多细节需要自己补。在线部署相对简单但如果网络不稳定你会死在拉镜像这一步。Rancher 全家桶镜像加起来好几个 GB一旦中途断流重试起来很痛苦。离线部署虽然前期准备麻烦但一旦物料齐全后续安装反而不容易出现网络相关的幺蛾子。1.3 版本选型与兼容性考量版本选型是这次部署中最容易被忽视、却影响最大的一步。Rancher 的版本和 Kubernetes 版本有对应关系它在安装时会根据自身版本去初始化内置集群。我用的是 Rancher 2.7.x 版本线对应 Kubernetes 1.24 到 1.26 的范围这个版本线在容器运行时兼容性上比较成熟对 Docker 和 containerd 都有较好的支持。UOS 系统自带的软件仓库里的 Docker 版本往往偏旧而 Rancher 对 Docker 版本有一定的要求如果版本太老可能出现容器运行异常、网络插件初始化失败等问题。我最后选择了 Docker 20.10.x 系列这个版本在稳定性与 Rancher 兼容性之间是一个比较均衡的选择。如果你打算用 containerd 作为运行时也可以但初次部署建议还是先用 Docker遇到问题时排查链路更熟悉、资料也更多。2. 基础环境准备与系统初始化2.1 主机配置要求Rancher 单机部署对硬件的要求不算高但如果想跑得舒服建议不要低于 4 核 8G磁盘 100G 以上。我这次用的机器是 8 核 16G、200G SSD部署完 Rancher 后大概占用 20 多 G 磁盘后续还要导入镜像和跑日志空间一定要留足。特别提醒一点Docker 的数据目录默认在 /var/lib/docker如果系统盘不大建议单独分一个数据盘挂到 /var/lib/docker 或者直接把 Docker># 设置主机名 hostnamectl set-hostname rancher-server # 设置时区并开启时间同步 timedatectl set-timezone Asia/Shanghai timedatectl set-ntp true这里有个细节整套 K8s 组件对时间非常敏感时间偏移超过一定阈值会导致证书校验失败、节点心跳异常。你如果是在内网环境没有 NTP 服务器至少也要确保和运维侧的时间源手工校准过否则部署完整个平台后各种诡异问题会接踵而来。防火墙方面我直接关闭了 firewalld因为内网环境里网络边界已经由机房防火墙控制了。如果你的部署环境要求必须开着防火墙至少需要放行以下端口端口用途443Rancher Web UI 和 API80HTTP 跳转 HTTPS可不开6443Kubernetes API Server2379-2380etcd 客户端和服务端通信10250kubelet 指标和命令关闭防火墙的命令很简单但要注意 UOS 上可能同时存在 iptables 服务和 firewalld两个都别放过systemctl stop firewalld systemctl disable firewalld systemctl stop iptables systemctl disable iptables2.3 内核参数与模块调整容器平台的关键在于网络栈。K8s 的网络插件比如 flannel、calico依赖 iptables 对 bridge 流量做 NAT 转发因此必须确保br_netfilter模块已加载并且内核参数允许 bridge 流量通过 iptables。很多人在这一步吃了亏部署完毕后 Pod 间通信正常但 Service 访问死活不通大概率就是这两个内核参数没调。我的做法是手动创建内核参数配置文件然后应用到系统cat /etc/sysctl.d/99-kubernetes.conf EOF net.bridge.bridge-nf-call-iptables 1 net.bridge.bridge-nf-call-ip6tables 1 net.ipv4.ip_forward 1 vm.swappiness 0 EOF # 加载所需内核模块 modprobe br_netfilter modprobe overlay # 应用内核参数 sysctl --system这里解释一下为什么vm.swappiness 0K8s 节点在内存压力大时倾向于使用 swap但容器平台对内存延迟非常敏感一旦发生 swap 回收Pod 的响应时间会急剧恶化。Rancher 管理面自身是运行在容器里的如果宿主机的内存经常被打到 swapUI 会变得卡顿。在测试环境里你可能感觉不明显但在生产环境里这个参数值得提前设好。设置完毕后用命令验证一下是否生效sysctl net.bridge.bridge-nf-call-iptables如果输出为 1说明 bridge 流量可以被 iptables 处理。如果提示文件不存在先检查 br_netfilter 模块是否加载成功模块加载失败通常是因为内核版本不支持或者缺少对应的 kernel modules 包这种情况在 UOS 上可以通过安装内核模块包解决。2.4 检查系统包管理器与基础依赖UOS 不同版本可能使用不同的包管理体系有的基于 deb 包有的基于 rpm 包。为了避免踩坑安装任何软件前先确认清楚系统属于哪一类。可以用下面命令快速识别cat /etc/os-release我这次用的 UOS 是基于 deb 体系的所以后面安装 Docker 用的是 apt 工具链。如果你拿到的是 rpm 体系安装命令换成 dnf 或 yum 即可其余大体相同。基础依赖里我建议先把curl、vim、tar、openssl这几个装上后面很多操作都要用。UOS 默认可能不带完整的 openssl 命令行工具而我们需要用它来生成私钥和证书缺失的话会卡在证书环节。3. 容器运行时安装与离线镜像准备3.1 Docker 安装与配置要点在 UOS 上安装 Docker最简单的方式是直接使用系统仓库自带的 docker.io 包。但前面提过系统仓库里的版本可能偏旧。如果你能接受旧版本可以直接装省事。但如果要对齐 Rancher 的兼容性要求建议还是安装指定版本。我的做法是从官方源的离线包目录里拿了 Docker 20.10.x 的 deb 包然后传到服务器上批量安装dpkg -i docker-ce_20.10.7-0_amd64.deb \ docker-ce-cli_20.10.7-0_amd64.deb \ containerd.io_1.4.6-0_amd64.deb安装完不要急着启动先改 Docker 的 daemon.json。我之前吃过日志无限增长的亏所以这次直接加上了日志大小限制同时把>mkdir -p /data/docker cat /etc/docker/daemon.json EOF { data-root: /data/docker, log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 }, storage-driver: overlay2 } EOFmax-size和max-file这两个参数非常有用。Rancher 在生产运行时会产生大量日志如果不限制单个容器日志能膨胀到几十个 G。我见过一台机器磁盘被容器日志写满导致 etcd 挂掉的故障加了限制之后磁盘使用稳定了很多。启动 Docker 并验证systemctl daemon-reload systemctl enable docker systemctl start docker docker info看到 Storage Driver 是 overlay2 就说明 Docker 正常工作了。如果没有 overlay2很可能是内核缺少 overlay 模块返回上一步确认。3.2 离线镜像导出与导入的完整链路离线部署最核心的工作是准备镜像。Rancher 2.7.x 的离线部署需要用到一组镜像包括rancher/rancher 主镜像rancher/rancher-webhookrancher/fleetrancher/gitjobrancher/kubectlrancher/prometheus 相关监控组件cert-manager 相关镜像k3s 内置集群所需的基础组件镜像手工逐个拉取费时费力最稳妥的做法是在联网机器上直接执行 Rancher 官方提供的镜像列表脚本它会自动拉取全部所需镜像并打成一个 tar 包。# 在联网机器上执行 wget https://get.rancher.com/rancher-images-2.7.9.txt docker pull rancher/rancher:v2.7.9实际准备目标时可以这样操作用脚本从镜像列表文件逐行拉取拉完后docker save打包成 tar拷贝到目标机器再通过脚本docker load导入。离线镜像包挺大建议用内网共享目录传输U 盘传这几个 G 的文件既慢又容易损坏。导入后记得确认镜像都到位了docker images | grep rancher如果发现某个镜像缺失回看列表手动补拉即可。镜像导入这块没有太多技术含量关键是耐心和细致。缺一个镜像后续 Rancher Pod 就会一直 ImagePullBackOff排查起来反而更费时间。3.3 搭建本地镜像仓库可选但推荐如果你后续还要在 UOS 上部署其他容器应用建议在准备阶段顺便搭一个本地镜像仓库把导入的镜像 push 到仓库里统一管理。这样每台需要拉镜像的机器只需配置一个仓库地址而不用每台机器都去 docker load 一遍。我这边是用 docker 跑了一个 registry 容器docker run -d --name registry \ -p 5000:5000 \ -v /data/registry:/var/lib/registry \ --restartalways \ registry:2然后把打好的镜像重新打 tag 并 push 到本地仓库。这样 Rancher 所在机器和其他后续要纳管的节点都只需在 daemon.json 里配置 insecure-registries就可以直接通过内网拉镜像效率高很多{ insecure-registries: [registry.local:5000] }为什么用 insecure-registries 而不是配置证书因为内网环境如果用 HTTPS 仓库需要先给所有节点下发 CA 证书配置量增加不少而内网链路本身是可信的HTTP 模式在隔离网络里是可接受的简化方案。当然如果公司有统一的 CA 体系直接用 HTTPS 仓库是更好的选择。4. Rancher 核心部署流程与实现细节4.1 Helm 与 Chart 的准备Rancher 官方推荐用 Helm 来部署。Helm 是 Kubernetes 的包管理工具它把 Rancher 的所有部署清单打包成一个 Chart用户只需要提供少量配置参数就能完成安装。理解这个方式很重要Helm 做的事情本质上就是生成一堆 YAML 并交付给 Kubernetes但因为 Rancher 包含的组件很多手工填写所有 YAML 不现实所以用 Helm 来做参数化管理。在离线环境下需要先把 Helm 安装包和 Rancher 的 Chart 包准备好。Helm 的安装很简单下载二进制后解压到 /usr/local/bin 即可tar -zxvf helm-v3.12.0-linux-amd64.tar.gz mv linux-amd64/helm /usr/local/bin/helm helm versionRancher 的 Chart 包可以从发行页下载通常是一个 tgz 文件例如rancher-2.7.9.tgz。下载后解压到目标机器上tar -zxvf rancher-2.7.9.tgz解压后会得到一个rancher目录里面包含部署 Rancher 所需的全部模板和默认配置。后续helm install时直接引用这个目录即可。4.2 证书方案设计Rancher 默认会尝试申请 Let’s Encrypt 证书但离线环境无法访问外网这条路直接不可行。所以需要提前决定证书怎么处理。常见的做法有两种第一种使用 Rancher 自签名证书。部署时指定ingress.tls.sourcerancher它会在启动时自动生成一个 CA 并签发自用证书。这种方式最省事但浏览器访问时会有证书警告需要手动信任。第二种使用自有 CA 签名证书。如果内网已经有一套 PKI 体系可以提前生成一个包含rancher.local域名的证书部署时指定ingress.tls.sourcesecret把证书内容提前放进 Kubernetes Secret 里。这种方式部署完浏览器不会报错体验最好。我这次选用的是第二种因为后续要让团队多人访问每个人都手动点一遍“继续访问”并不现实。用 OpenSSL 生成私钥和 CSRopenssl req -newkey rsa:2048 -nodes \ -keyout tls.key \ -out tls.csr \ -subj /CNrancher.local openssl x509 -req -days 3650 \ -in tls.csr \ -signkey tls.key \ -out tls.crt这里我用的是自签 CA 的一次性证书相当于自己既当 CA 又签发证书。真实企业环境里更推荐用内网 CA 签发的证书但原理是一样的。生成后把证书和私钥导入 Kuberneteskubectl create ns cattle-system kubectl -n cattle-system create secret tls tls-rancher-ingress \ --certtls.crt \ --keytls.key创建 Secret 之前要确认已经存在cattle-system命名空间。这个命名空间专门用来放 Rancher 相关的资源后面所有部署都在这里面进行。4.3 Helm 安装命令与参数详解安装 Rancher 的完整命令如下我逐段解释它的含义helm install rancher ./rancher/ \ --namespace cattle-system \ --set hostnamerancher.local \ --set bootstrapPasswordAdmin12345 \ --set ingress.tls.sourcesecret \ --set privateCAtrue \ --set replicas1helm install rancher表示安装名为 rancher 的 release。--namespace cattle-system指定 Rancher 的命名空间。--set hostnamerancher.local指定访问域名证书必须匹配这个域名。--set bootstrapPasswordAdmin12345设置首次登录时的管理员密码。--set ingress.tls.sourcesecret告诉 Rancher 使用我们提前创建好的证书 Secret。--set privateCAtrue告诉 Rancher 证书是内网私有 CA 签发的这样才能正确处理 CA 链。--set replicas1只跑一个副本单机部署不需要高可用。这里有一个容易踩坑的点如果设置了privateCAtrue在管理面下面的 Pod 之间通信时都会校验证书必须确保 Secret 名称是tls-rancher-ingress否则 Rancher 找不到证书会一直等待。如果你通过--set ingress.tls.secretNamecustom-secret-name指定了其他名称一定要保证 Secret 存在且格式正确。执行完helm install后查看 Pod 状态kubectl -n cattle-system get pods正常情况下可以看到 rancher 主 Pod 和 webhook 等组件进入 Running 状态。首次启动需要拉取镜像、初始化数据库、启动物理机集群这个过程可能要几分钟需要耐心等。4.4 cert-manager 是否需要安装这里我要单独说明一下 cert-manager。Rancher 的官方部署文档默认会让你先安装 cert-manager但那个前提是你打算使用 Rancher 自动签发的证书或对接 Let’s Encrypt。如果你像上面这样完全使用自定义 Secretcert-manager 并不是必须的。在离线环境里多装一个 cert-manager 意味着要多导一批镜像还会多引入一组 CRD 资源如果不需要自动签发证书的话完全没有必要给自己增加复杂度。我当时一开始按照官方文档装了 cert-manager后来发现根本用不到又花时间清理。所以这一步的判断依据很简单你的证书是提前准备好的就不装如果以后想自动化签发再补装也不难。有人说“Rancher 默认强制依赖 cert-manager”这在某些版本里会让安装直接失败。如果你遇到这种情况可以在 helm install 时加上--set certmanager.enabledfalse或--set global.cattle.psp.enabledfalse之类按版本调整。每个小版本差异不同遇到报错就按错误信息往这个方向排查。4.5 等待初始化完成并验证安装完成后不要急着打开浏览器。Rancher 首次启动时会在后台做一堆初始化工作包括创建本地集群、配置 RBAC、启动子组件。可以通过日志来确认进度kubectl -n cattle-system logs -f deploy/rancher日志里出现类似Listening on :443或Controller started的信息基本就可以访问了。等到这一步再用浏览器打开https://rancher.local应该能看到登录页面。之前设置过一次 bootstrapPassword但如果你当时没有设置或者想确认当前管理员密码可以从 Deployment 里取出来kubectl -n cattle-system get secret rancher-admin -o jsonpath{.data.password} | base64 -d这个 Secret 只有首次启动时才会创建如果你错过了初始密码删除这个 Secret 并重启 Rancher Pod 可以重新生成。5. 初始化登录与集群纳管实操5.1 首次登录与管理员密码设置第一次访问 Rancher 管理界面会进入一个欢迎页面要求设置管理员密码。这个密码就是以后登录用的超级管理员密码建议用密码管理工具生成一个强度足够的随机密码不要图省事设置成弱密码。Rancher 的管理员账号拥有对所有纳管集群的最高权限一旦被攻破等于整个容器平台拱手让人。设置完密码后系统会询问 server-url。这个 URL 要和部署时设置的 hostname 一致也就是https://rancher.local。如果填错后续 Rancher 在与其他集群通信时会出现地址不匹配的问题。5.2 本地集群与下游集群的关系登录完成后你会看到首页上已经存在一个名为local的集群这就是 Rancher 自己运行时所在的集群。很多人第一次看到会困惑这个集群是干嘛的它其实就是 Rancher 的控制面集群Rancher 自身跑在这个集群里。从这一刻起你可以通过 Rancher 管理这个本地集群也可以继续添加新的集群。在单机模式下local 集群的组件全部在这台 UOS 机器上。测试环境里完全可以用 local 集群跑一些应用体验一下完整的 K8s 能力。但生产环境不建议把业务应用直接扔到 local 集群里因为一旦 local 集群挂掉Rancher 管理面也跟着挂掉业务和管理面互相绑死故障恢复会非常麻烦。5.3 导入已有集群的流程Rancher 最有价值的一个功能是导入已有集群。假如你在其他节点上已经有一套 K8s 集群可以通过 Rancher 的 UI 一键导入。流程是这样的在 Rancher 首页点击“创建集群”选择“导入已有集群”。填写集群名称和描述。Rancher 会生成一段 kubectl 命令需要你到目标集群上执行。目标集群执行完命令后会安装一个 agent 组件与 Rancher 通信。等待状态变成 Active集群就纳管成功了。这段命令本质上是把目标集群的权限临时授予 Rancher再由 Rancher 推送 agent 组件。如果目标集群和 Rancher 之间存在网络隔离要确保对应端口是放通的。5.4 创建新集群的方式除了导入Rancher 也支持从零创建集群。它可以在界面上选择基础设施提供商自动调用接口创建节点并初始化集群也可以通过“自定义”方式手动指定节点相当于把 kubeadm 初始化集群的过程搬到了图形界面上。对于没有现成 K8s 环境、想直接在更多 UOS 机器上建集群的情况推荐用“自定义”方式。Rancher 会为每台新节点生成启动命令你到对应机器上执行节点就会加入集群。这种方式很直观也会自动处理证书分发和组件配置比手工部署 K8s 省事得多。6. 实际部署中常见的问题与排查记录6.1 Rancher Pod 反复重启部署完成初期最容易遇到的问题就是 Pod 起不来。如果你看到kubectl -n cattle-system get pods里 rancher 状态一直 CrashLoopBackOff先看日志kubectl -n cattle-system logs -f deploy/rancher我这次遇到过一次日志显示在等待 cert-manager 的 webhook。原因是默认配置里 Rancher 还是会尝试调用 cert-manager 的 API。确认自己用的是自定义证书后我在安装时显式传了--set certmanager.enabledfalse问题就解决了。另一类常见原因是资源不足。Rancher 初始化阶段需要大量内存如果节点内存低于 6G很容易触发 OOM。出现这种情况dmesg里能看到killed process的记录。解决方法很简单要么加内存要么在部署前关闭其他占用内存的服务。6.2 证书不被信任或过期如果你用的是自签证书浏览器首次访问一定会提示不安全。这个可以通过把 CA 证书导入系统信任区来解决。在 Windows 环境是“导入证书到受信任的根证书颁发机构”在 Linux 桌面环境是把 CA 放到/usr/local/share/ca-certificates/然后执行update-ca-certificates。还有一个讨论很多的问题Rancher 自签证书的有效期和轮换。如果你用了ingress.tls.sourcerancherRancher 默认签发的证书有效期不长过期后会自动轮换。但如果用了自定义 Secret证书过期就得自己更新。我的建议是生成的证书有效期直接给 10 年省得明年再来折腾一次。6.3 本地集群初始化失败在部分情况下Rancher 的 local 集群初始化会卡住具体表现为集群状态一直处于 Provisioning。这时候要先看 k3s 组件的日志。Rancher 内置集群实际上用的 k3s 来启动本地集群的服务器进程是一个叫做k3s-server的容器。检查方法kubectl -n cattle-system logs -l appk3s常见原因包括Docker 版本过旧导致 k3s 无法创建容器磁盘 inode 耗尽swap 未关闭导致 k3s 性能异常内核参数net.ipv4.ip_forward未开启把这些基础项逐一核对一遍大多数问题都能定位。6.4 浏览器访问 404 或无法跳转登录页有时候 Pod 起来了但访问https://rancher.local显示 404或者一直停留在某个跳转页面。这通常是 nginx 和 Rancher 前端路由的会话问题。先确认你访问的 URL 和部署时设置的 hostname 完全一致包括协议头。如果你用 IP 访问而部署时用的是域名Rancher 会拒绝跳转。解决方法是把域名和 IP 的映射写入本地hostsecho 192.168.1.100 rancher.local /etc/hosts然后务必使用https://rancher.local访问不要混用 IP。6.5 节点扩容后发现组件健康但业务异常如果你后面扩容了节点的数量纳管的节点加入了集群但 Rancher 里显示组件状态正常而 Pod 之间网络不通大概率又回到了内核参数的问题。新加入的节点也需要配置同样的内核参数、关闭防火墙、调整 Docker 配置否则 flannel 或 calico 组件虽然能启动数据面却不工作。这里我养成一个习惯凡是准备接入 Rancher 的节点一律先用同一个初始化脚本跑一遍包含内核参数、容器运行时配置、时间同步、主机名设置。把这步做成标准化后面再接入新节点时就不容易遗漏。6.6 常见问题速查表现象可能原因解决动作Rancher Pod CrashLoopBackOffcert-manager 依赖未满足安装时显式关闭 certmanager 或补齐组件镜像 PullImageError离线镜像缺失用镜像列表脚本拉取完整清单并 docker load浏览器证书报错域名不匹配hostname 与访问域名保持一致网页 404URL 与 server-url 不一致改用部署时的域名访问集群状态卡在 Provisioningk3s 初始化失败查看 k3s 容器日志、确认内核参数etcd 频繁报错磁盘空间不足、IO 慢数据盘改用 SSD预留 30% 以上空间节点加入后组件异常内核模块/防火墙未配置所有节点统一执行初始化脚本HTTPS 访问极慢证书链不完整检查证书是否包含中间 CA 证书Glance 图标显示但无法操作RBAC 角色未分配给用户分配合适的项目/集群角色7. 运维中的几个实用经验与小技巧整个部署跑通之后我又陆陆续续运维了一段时间有几个心得可以分享出来节省后来人的时间。第一个是备份问题。Rancher 本身有官方的 Backup 应用可以定时把 Rancher 的配置、全局设置、用户信息备份到对象存储或本地存储。这东西一定要在刚部署完、还没开始大规模纳管集群的时候就装上。为什么因为越早装备份的数据越完整恢复时越不容易因为某个资源缺失而出问题。我见过有人部署完用了一年才想起来要备份恢复时发现有些集群的导入配置丢失只能手工重来一遍。第二个是资源配额问题。Rancher 的管理界面默认没有给项目设置资源配额和限制团队成员一旦把大内存应用扔进去可能会把整个集群资源打爆。建议在创建项目时就把 namespace 资源配额配好限制 CPU 和内存的总量。这样即使有人误操作也只会影响自己的项目不会拖垮整个集群。第三个是关于镜像仓库的配置。Rancher 支持配置多个镜像仓库凭证项目拉取私有仓库镜像时可以直接使用。在生产环境里我会把镜像仓库凭证配置在 Rancher 全局设置里这样所有项目都能复用不用每个命名空间单独做 Secret。如果你用 Harbor 这类带项目概念的仓库建议把凭证在 Rancher 里按项目隔离好避免权限外泄。第四个是日志和监控组件。Rancher 集成了监控和日志体系开启后可以在界面上直接查看 Pod 日志、节点指标。但注意这些组件本身也吃资源。在单机测试环境里如果机器只有 8G 内存开启完整的监控栈可能会导致节点内存告急。如果资源紧张可以先关闭监控只保留 Rancher 核心功能等节点扩容后再开启。第五个体验上的建议访问 Rancher 界面时尽量避免在公网上直接暴露。管理面本身是攻击者的重点目标最好只在内网使用并且配置防火墙只允许运维 IP 访问 443 端口。如果确实需要远程访问可以走带身份认证的跳板不要裸奔。整套流程走下来你会发现 UOS 上部署 Rancher 和在其他 Linux 发行版上部署核心流程完全一致区别只在于离线镜像准备、包管理和系统基础配置的一些细节。对我个人来说最省时间的一步是提前把镜像清单和系统初始化脚本准备好后半段安装基本就是流水线操作。如果你计划在自己的环境里跑一遍建议先在一台低配测试机完整走通再对生产机器操作这样能避免很多不确定的坑。