ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Rancher v2.7.5实战:K8s集群纳管、证书配置与运维避坑指南

Rancher v2.7.5实战:K8s集群纳管、证书配置与运维避坑指南 Rancher在运维圈子里其实不用多介绍只要是搞过Kubernetes集群管理的人多半都跟它打过交道。我最早接触Rancher还是v2.1时代那时候图的就是它能在浏览器里点鼠标建集群比纯命令行敲kubeadm省心太多。这两年版本迭代很快到v2.7.x这代功能已经很完整了多集群管理、项目RBAC、监控告警、应用商店全部内置基本是开箱即用的K8s管理平台里最成熟的一档。这篇以v2.7.5-rc1为基准把我实际部署和日常运维里沉淀下来的操作步骤、参数细节、踩坑记录全部整理出来给正在做Rancher选型或者准备从旧版本迁移上来的同学一个可以直接照着操作的参考。全文不会只贴官方文档的翻译版更多是实际操作中验证过的方案以及文档里不会写清楚的注意事项。比如单节点和多节点怎么选HTTPS证书怎么配才不踩坑下游集群agent连不上的时候到底按什么顺序排查还有备份恢复里最容易忽略的细节。你如果正准备在生产环境跑Rancher v2.7.x这篇可以帮你省掉不少试错时间。1. 项目背景与版本选型1.1 Rancher到底是什么用它能解决什么问题Rancher本质上是一个Kubernetes集群的统一管理平台。你在上面可以同时维护几十个、上百个K8s集群既有Rancher自己创建的也有从外部导入的。所有集群的节点状态、Pod运行情况、命名空间资源配额都能在一个界面上看全。对于多团队、多环境的公司来说这个价值非常大——不需要挨个连kubectl切context所有操作在Rancher的Web UI里就能完成。它不是一个单纯的图形化工具底层还集成了很多关键能力。比如RBAC权限管理可以让不同团队只看到自己项目下的资源再比如应用商店内置了各种常用Chart点几下就能把监控、日志、中间件部署到对应集群。这些能力组合起来Rancher在K8s生态里才一直保有一席之地。v2.7.x这代有一个重要变化就是开发重心明显放在了存量集群的纳管和持续交付上。相比早期版本它的导入集群流程更顺滑agent组件的稳定性也提升了不少。1.2 v2.7.5-rc1版本有什么值得关注的变化v2.7.5-rc1是v2.7.5的预发布版本核心变化集中在对Kubernetes新版本的兼容适配和部分稳定性修复。最直观的一个感受是这个版本对下游集群的K8s版本范围支持得更宽从1.24到1.27的集群都能正常纳管这对那些还在用旧版本K8s、但又想升级Rancher控制面的团队非常友好。还有一个值得留意的点是从v2.7开始Rancher把禁用Local集群访问做成了一个独立的Feature Flag。也就是说Rancher自身那个local集群不再默认暴露给所有用户操作减少了误操作把控制面搞挂的风险。我实际用下来这个改动在生产环境里很有意义——以前团队里有人不小心在local集群里删了东西整个平台都可能受影响。这个rc版本还修复了一些UI上的问题比如集群仪表盘在某些情况下图表加载不出来、命名空间配额显示不准确等。如果你之前被这些边角BUG困扰升级到v2.7.5-rc1后体验会好不少。1.3 为什么拿rc版本单独写手册正常情况下生产环境不太建议直接上rc版本。但有两种场景例外一种是你所在的团队已经在用v2.7系列想提前评估下一个补丁版本对现有环境的影响另一种是你准备从更早的v2.6或v2.5往上升级需要提前规划路径。rc版本本质上功能已经冻结只差最后的bugfix所以用它来做预研和测试是最合适的。这篇手册里的操作在正式版v2.7.5发布后也基本适用。命令参数、界面路径、配置项不会有什么大变化。2. 部署前必做的环境准备与规划2.1 硬件资源与操作系统要求Rancher控制面本身是跑在一组容器里的对硬件的要求并不夸张。以单节点部署为例4核8G内存基本够用带10个以内的下游集群没问题。但我建议有条件的话直接8核16G起步因为Rancher自己也要跑一堆controller、webhook、cattle-cluster-agent再加上监控组件内存吃紧的话会频繁触发OOM。下游集群的节点资源就另算了那是K8s本身的负载跟Rancher控制面无关。操作系统方面Rancher官方支持主流Linux发行版Ubuntu 20.04/22.04、CentOS 7.9、Rocky Linux 8/9我都实际用过。CentOS 7.9要注意内核版本不能太低至少3.10以上否则Docker和K8s都会有兼容性问题。2.2 网络规划端口、DNS与证书的前置准备Rancher对外主要通过80和443端口提供服务。明明是HTTPS访问为什么还要占用80端口因为Rancher默认会从80端口跳转到443如果80没开用户在浏览器里直接输入域名不带https就会访问失败。所以我部署的时候通常两个端口都放通。域名这块我强烈建议单独给Rancher准备一个域名不要用IP地址访问。原因很简单如果后续要配置高可用或自动签发证书域名是必须的而且用IP访问时生成的证书在浏览器里总会有警告体验很差。DNS解析要提前配好确保在同一局域网内的机器都能解析到这个域名。证书方面Rancher支持多种方式自签名证书、Lets Encrypt自动签发、自定义证书、私有CA证书。自签名最省事但浏览器不认Lets Encrypt需要域名能公网访问私有CA适合内网环境。我实际用得最多的模式是内网私有CA浏览器里导入一次根证书后面所有访问都顺畅也不用依赖外网。2.3 节点角色划分单节点、高可用与离线环境的取舍安装Rancher之前先想清楚你的冗余级别。单节点部署最简单一条docker run命令就能跑起来。它的缺点也很明显Rancher控制面是单点一旦服务器宕机所有下游集群的API入口都会失去管理能力虽然下游集群本身不受影响但平台不可用会给开发和运维带来麻烦。单节点适合测试环境、内部工具平台或者团队规模很小、能接受短时间不可用的情况。高可用部署则是把Rancher跑在一个独立的高可用K8s集群里同时至少三台节点用外置数据库MySQL或PostgreSQL存数据。这套架构的好处是控制面自身具备故障转移能力缺点是部署和维护成本高不少。对生产环境来说这是推荐方案。离线环境是另一个容易被忽略的场景。很多公司在内网部署服务器不能访问公网。Rancher官方的离线安装包体积比较大包含所有需要的镜像。部署时要用私有镜像仓库提前把所有镜像推送到内网再配置Rancher使用私有仓库地址。步骤不算多但每一步都要细心尤其是镜像列表的下载和sha256校验错过一个就得重新来过。3. 从零开始Rancher v2.7.5-rc1 完整部署过程3.1 Docker方式快速起一个单节点实例最直接的方式就是用Docker启动Rancher容器。我常用的命令如下docker run -d --restartunless-stopped \ -p 80:80 -p 443:443 \ -v /opt/rancher:/var/lib/rancher \ --name rancher-server \ rancher/rancher:v2.7.5-rc1关键参数解释-p 80:80 -p 443:443把宿主机的80和443端口映射到容器内浏览器就能通过HTTP和HTTPS访问。-v /opt/rancher:/var/lib/rancher数据目录挂载Rancher的配置、证书、数据库文件都保存在这里。如果不挂载容器一删数据就全没了。--restartunless-stopped服务器重启后容器自动拉起保证服务可用性。启动之后容器内部会跑很多个进程这是正常现象Rancher架构本身就是多组件协作的。你可以通过docker logs -f rancher-server观察启动日志看到Rancher UI is up类似的字样就说明启动完成。首次启动到Web界面可用通常需要2到5分钟中间会有初始化流程。如果你希望把Rancher的日志放到宿主机来方便排查可以追加一个参数-e CATTLE_AGENT_LOG/var/lib/rancher/logs3.2 HTTPS证书配置自签名、私有CA与Lets Encrypt单节点部署默认会用Rancher自动生成的自签名证书。浏览器访问时会有安全警告测试环境可以忽略生产环境则必须替换。替换证书的推荐方式是在启动容器时就通过参数指定证书文件docker run -d --restartunless-stopped \ -p 80:80 -p 443:443 \ -v /opt/rancher:/var/lib/rancher \ -v /opt/certs/tls.crt:/etc/rancher/ssl/cert.pem \ -v /opt/certs/tls.key:/etc/rancher/ssl/key.pem \ -v /opt/certs/ca.crt:/etc/rancher/ssl/cacerts.pem \ --name rancher-server \ rancher/rancher:v2.7.5-rc1路径要和容器内的预期路径完全一致否则Rancher启动时会报找不到证书的错误。还有一个容易忽略的地方如果证书是被私有CA签发的ca.crt一定要一起挂载进去这样下游集群的agent才能正确信任Rancher服务端。我遇到过几次agent报TLS校验失败排查到最后都是因为ca.crt没配。如果想用Lets Encrypt自动签发Rancher也支持但要求域名必须能通过公网DNS解析到这台机器并且80端口可访问因为证书签发需要验证域名所有权。内网环境不满足这个条件还是老老实实用私有CA。3.3 首次访问与管理员引导流程启动完成后浏览器访问https://服务器IP或域名会进入管理员初始化页面。需要设置一个符合密码复杂度要求的密码然后填写Rancher Server的访问地址建议填域名如果填了IP后面诱导下游集群时agent会用IP去连接Rancher Server可能造成网络不通的问题。初始化完成后首页就是Rancher的集群列表。这里会有一个local集群这是Rancher自己的编排集群不要在这个集群里部署业务应用。v2.7里可以在全局设置里把local集群的访问权限禁用只给管理员保留安全性更高。4. 集群管理把已有K8s集群接进来4.1 导入集群与agent组件的工作原理Rancher导入集群的原理不复杂它会往目标集群里部署一组agent组件这些agent长期连接着Rancher Server把目标集群的状态上报上来。这个机制让Rancher几乎能管理任何符合标准Kubernetes API的集群不管是裸机部署的、云厂商托管的还是其他平台建的。导入过程在UI上分两步第一步填写集群名称第二步会生成一条kubectl命令在目标集群上执行即可。这条命令里包含了Rancher Server的地址、集群标识和tokenagent组件启动后就靠这些信息建立长连接。实际操作中Rancher Server和下游集群之间的网络通常只需要单向连通即下游集群可以访问Rancher Server的443端口。反向的连接一般是走websocket长连接不需要额外开端口。不过为了稳妥我会把Rancher Server所在服务器的443端口对所有下游集群节点放通。4.2 agent连接失败的定位思路与解决这是Rancher运维中最高频的问题。导入集群之后集群状态一直显示Pending或Connecting基本就是agent组件起不来或者连接不到Rancher Server。排查步骤我按经验排序列一下先看下游集群中cattle-system命名空间下的Pod状态kubectl get pods -n cattle-system如果Pod处于ImagePullBackOff大概率是私有镜像仓库的认证问题或者agent镜像地址拉不到。看日志kubectl logs -n cattle-system agent-pod-name日志里如果出现connect: connection refused说明agent根本连不上Rancher Server。重点检查网络和防火墙策略。检查agent使用的token是否过期或被删。如果cattle-system里有个名为cattle-token的Secret被人删了agent就丢失了身份需要重新生成导入命令。确认Rancher Server在用户发起导入时的访问地址能被下游集群正确解析。如果填的是域名但下游集群没法解析这个域名agent也会连不上。这种情况需要把域名IP映射写到每台节点的/etc/hosts里或者把Rancher Server地址改填成IP。还有一个常见坑是代理。很多公司内网有HTTP代理agent连接时如果走了代理且代理不支持websocket升级连接就会莫名其妙中断。遇到这种问题可以用环境变量把代理排除掉或者在容器的环境变量里指定NO_PROXY包含Rancher Server地址。4.3 直接创建下游集群的场景限制Rancher除了导入已有集群也支持在界面上直接创建全新的K8s集群。这个功能适合没有现成K8s、想用Rancher一键搭集群的场景。实际操作时选择创建集群后Rancher会要求提供节点信息和认证凭证然后自动执行kubeadm的完整流程把集群搭建起来。但这里要提醒一点从v2.7开始Rancher对自定义集群的创建流程做了不少调整底层依赖kubeadm的步骤更标准化了。如果你用的云厂商有自己的K8s托管服务比如托管版K8s集群那直接用导入功能更合理没必要让Rancher去接管云厂商的节点资源。我在生产环境中更倾向于已有集群导入这种模式。理由很简单Rancher作为控制面管理平台不应该过多介入下游集群的资源创建和节点管理否则一旦Rancher出问题影响面会变大。让各团队用自己熟悉的方式维护K8s集群Rancher只做统一管理和应用分发这样职责边界更清晰。5. 应用交付与多集群管理玩法5.1 项目、命名空间与RBAC权限模型Rancher的资源管理模型很有特色它引入了项目这个层级的抽象。一个项目可以包含多个K8s命名空间项目归属于某个集群。这个设计是为了解决多团队共用集群时的权限隔离问题。举个例子你可以为支付团队创建一个项目把这个项目下的所有命名空间都授权给对应的成员。这些成员登录Rancher后只能看到自己被授权的项目和资源能不能增删改查都由角色决定。Rancher内置了一批预置角色比如集群所有者、项目成员、只读成员基本覆盖了常见场景。搭建项目级RBAC时我会建议遵循一个原则集群级别的角色只给极少数平台管理员普通开发者一律走项目成员角色。这样可以避免开发者误操作集群级资源也方便后面审计。v2.7.5-rc1里Rancher的权限审计功能可以记录用户的关键操作输出到日志系统。如果公司有合规要求这个特性值得开启。5.2 通过应用商店部署应用Chart仓库接入实战Rancher内置了一个Application菜单叫应用商店或者Apps。默认带了一些官方Chart仓库比如Rancher的生态Chart。真正实用的是接入你自己的私有Chart仓库。以Harbor为例在Rancher的全局设置里找到应用商店页面点击添加仓库填入Git仓库地址或Helm Chart仓库地址。Rancher会拉取仓库索引然后把Chart列表显示出来。这样团队内部封装的中间件、业务基础组件都能在Rancher里一键部署版本回滚、参数配置都在界面完成。我常用Harbor作为私有Chart仓库配合Rancher的应用商店发布流程变成开发把Chart推送到Harbor运维在Rancher里选择版本、修改values、点击部署。整个过程有UI日志实时输出出错了也能直接在界面上看到报错信息效率比纯命令行的Helm操作高很多。一个值得注意的点应用商店部署的Chart在默认设置下是通过Helm进行管理的。如果你想在Rancher里管理应用的生命周期建议开启helm相关的功能开关否则修改了values之后状态可能不更新还需要手动同步。5.3 多集群应用分发与持续交付多集群应用是Rancher商业化能力里很重要的一块对应的开源功能叫Multi-Cluster Apps。它允许你定义一份应用配置一次性推送到多个下游集群。这个功能对多环境发布特别有用生产环境、预发环境、测试环境各自是独立的K8s集群你想让某个应用同时发布到三个集群不用每个地方单独点一遍。实际操作中创建多集群应用时选择一个模板Chart填写统一的values文件然后勾选目标集群列表。Rancher会在这些集群里各自部署一份应用实例版本保持一致。如果某个集群部署失败Rancher会标记状态你可以单集群重试不会影响其他集群。我印象最深的一次场景是帮业务团队统一升级日志采集Agent。原来几十个集群挨个跑Helm升级搞了一下午后来改成多集群应用管理一次更新推送到所有集群几分钟全搞定。这个功能非常实用如果你在管理大量集群强烈建议优先用起来。6. 升级、备份恢复与高可用设计6.1 备份Rancher数据一键备份和API方式长效方案Rancher的数据都存在它自己的K8s集群里主要是CRD资源、配置、用户信息还有下游集群的注册信息。一旦数据丢失整个管理平台就废了所以备份是日常运维里绝对不能省的一环。Rancher有内置的备份还原功能叫rancher-backup。需要先在应用商店里安装rancher-backupChart它会负责定期把Rancher的数据快照上传到S3或者持久化卷上。你可以配置定时备份策略比如每天凌晨两点全量备份保留最近7份。如果你不想装额外的Chart也可以直接用kubectl拉取CRD数据kubectl get clusters.management.cattle.io -o yaml clusters.yaml这种方式比较原始只适合临时救急完整备份还是建议用官方备份工具。我实际操作中最常用的备份方式是装好rancher-backup后配置S3存储或者本地PV然后在UI上看一下备份记录是否正常生成。这里有一个反复踩过的坑如果备份任务一直失败先检查S3的凭证配置再检查目标Bucket权限Rancher备份服务对S3的访问权限要求比较严格。6.2 从备份恢复一个毫发无伤的Rancher恢复场景通常在两种情况下出现旧服务器损坏需要迁移到新机器或者Rancher版本升级失败需要回滚。恢复的流程在Rancher UI里可以直接完成在备份文件列表里选择要恢复快照点击恢复Rancher会重新创建相关资源。我用API方式恢复试过几次步骤如下# 先指定备份文件 curl -k -X POST https://rancher-server/v3/restores \ -H Authorization: Bearer token \ -H Content-Type: application/json \ -d {backupFilename:rancher-backup-2025-01-01T00-00-00Z.tar.gz}这个操作耗时取决于备份文件大小我的经验是在几十秒到几分钟之间。恢复完成之后一定要检查下游集群的状态确保agent重新连接成功。实际操作中恢复之前我会把当前Rancher的数据目录再备份一份因为有时候恢复操作本身就会覆盖现有数据。万一新备份文件有问题不至于把最后一条路也断了。6.3 高可用部署与升级路径生产环境的高可用架构是要单独部署一个K8s集群把Rancher以Helm方式安装到这个集群上。需要提前准备至少三个节点全部跑同一个K8s版本外置数据库用MySQL或PostgreSQL避免Rancher自身的数据持久化依赖某个节点的本地存储。高可用集群的安装方法和单节点完全不同准备一个K8s集群节点数至少三台etcd和数据平面分离更佳。安装好K8s后给它配置Ingress Controller比如nginx-ingress或traefik。创建命名空间比如cattle-system。通过Helm安装Rancherhelm repo add rancher-latest https://releases.rancher.com/server-chart/latest helm install rancher rancher-latest/rancher \ --namespace cattle-system \ --set hostnamerancher.example.com \ --set bootstrapPasswordadmin \ --set replicas3高可用模式下升级Rancher就变成了纯Helm操作。先修版本号再执行Helm upgrade。升级前一定要对照官方升级路径不能跳版本。比如在v2.7.5和v2.8之间如果隔了多个小版本就要先升到中间版本再继续往上。6.4 版本升级前后的避坑清单升级Rancher是我觉得平台运维里最需要谨慎的操作之一。整理一份避坑清单升级前的准备确认当前版本到目标版本之间是否有官方支持的升级路径不要跳大版本。做一次全量备份并且验证备份文件可以在另一个环境正常恢复。查看官方Release Notes确认没有已知的重大变更和兼容性问题。升级中要注意如果是Docker单节点部署用docker stop停止旧容器然后docker rm删除再拉起新版本镜像的容器。直接docker run一个同名容器会冲突。高可用部署升级时Helm upgrade过程如果卡住先看Pod状态和日志不要盲目回滚。升级后的检查下游集群是否全部从Disconnected恢复为Active。监控告警是否还在正常工作。用户权限有没有丢失特别是自定义角色。有一次我在升级后没有立即检查下游集群状态结果发现agent和Rancher Server的版本不匹配导致集群一直连不上。后来把所有下游集群的agent也升级一遍才恢复。如果你正在管很多集群这个教训可以参考——升级完Rancher控制面要关注下游集群的agent版本也要跟随匹配。7. 常见问题与排查速查7.1 浏览器访问Rancher时提示连接不安全这个问题几乎每个刚用Rancher的人都会遇到。因为单节点安装时默认用的是自签名证书浏览器自然不认。有两个解决方向一是按前面提到的方式换上私有CA签发的证书二是在浏览器里手动信任Rancher的CA证书。实际工作中如果团队比较大、用户多最省事的办法是让IT统一把内网CA根证书下发并安装到每台电脑的信任区。这样才能从根本上消除警告。单独在每台机器点“继续访问”短期能用但长期会让用户搞不清到底安不安全。7.2 下游集群的agent无法连接Rancher Server前面4.2已经提过排查思路这里补充一个我印象比较深的场景。有一次有个下游集群的Pod显示创建成功但日志里反复出现TLS handshake timeout。最后发现是Rancher Server所在服务器的防火墙把某些IP段的443端口流量拒绝了。问题不在agent这边而是在于网络策略太严格。排查这种问题不要只看Rancher界面先到Rancher Server上做一个简单的连通性测试比如用curl从一个下游集群节点发起HTTPS请求到Rancher Server地址能通就说明网络层正常不通就先解决网络问题。7.3 Rancher UI加载慢或者图表显示不出来Rancher UI的很多组件需要从Rancher Server获取数据如果服务器资源紧张或者浏览器与服务器之间存在代理导致websocket连接不稳定UI就会表现得很卡。常见做法确认服务器的CPU/内存负载如果长期80%以上考虑扩容。查看Rancher Server日志里有没有大量错误上报。在浏览器开发者工具里观察Network请求是否有大量失败尤其是websocket相关。如果使用的是Rancher Desktop这类本地开发工具连接Docker引擎发现连不上Docker API比如报failed to connect to the docker api at npipe:////./pipe这类错误这多半是Docker引擎没有正常启动或者用户权限不够。Windows上出现这个错误先确认Docker Desktop是否在运行再调整用户组权限把当前用户加入docker-users组。7.4 问题排查速查表问题类型表现常见原因解决方向浏览器无法访问Rancher UI页面打不开或连接被拒绝容器未启动、80/443端口被占用检查docker ps、释放端口自签名证书警告浏览器提示不安全使用默认自签证书替换为私有CA证书agent一直Pending下游集群无法纳管token异常、网络不通、镜像拉取失败查看cattle-system Pod日志应用商店Chart无法安装安装报Chart校验失败私有仓库索引未更新、版本名错误刷新应用商店索引监控面板数据为空看不到指标监控组件未正确安装检查cattle-monitoring-system组件用户无法登录认证服务异常外部认证配置失效检查认证Backend状态备份任务失败备份文件没有生成S3权限不足或网络不通测试S3连通性和凭证权限节点内存飙升频繁OOM下游集群数量过多或监控数据量大扩容节点或精简监控指标这行表格整理的是最常见的八类问题实际运维中可能会遇到更奇特的报错但排查思路基本都是从组件状态、日志、网络三个维度入手。Rancher的优势在于组件分工比较清晰遇到问题先定位是哪个组件的日志再往下排查就快很多。7.5 两个容易忽略的日常维护细节第一个是时钟同步。Rancher涉及证书校验和token签发如果服务器时间和实际时间偏差太大会出现各种莫名其妙的认证失败。我见过一台服务器时间快了5分钟结果下游集群的Pod全部报证书过期。建议所有Rancher相关节点都配置好NTP并且定期检查。第二个是日志清理。Rancher容器运行久了/var/lib/rancher/目录下的日志文件会越积越多尤其是k3s和containerd的日志。我通常会写一个简单的cron任务定期清理超过7天的日志文件。不清理的话磁盘满了之后Rancher会出现诡异的问题——界面能打开但配置修改后保存不上。清理日志的命令可以参考cd /var/lib/rancher find ./logs -type f -mtime 7 -exec rm -f {} \;注意先确认目录结构再执行避免误删。8. 我的一些经验体会写到最后不需要我再重复一遍Rancher的好处了。我真正想说的是Rancher这种平台工具最难的不是装上而是在日常运维中让它稳定地撑住业务。我自己用了这么多年最大的体会是版本升级别激进rc版本可以在测试环境验证生产环境还是等正式版发布稳定后再动备份这东西宁可多备一次也不要少备一次还有最重要的一旦下游集群多了别只依赖界面关键操作多用API和命令行脚本固化下来省时间也降低操作风险。这篇手册里的内容基本覆盖了从部署到日常维护的主要环节。你照着走一遍大概率能把Rancher v2.7.5-rc1跑起来并且知道出了问题该去哪查。后续如果用了Rancher的高可用方案或者接了外部认证系统那边又会有不少新坑等我自己踩过了再回来补充吧。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进