☰
单节点Rancher快速部署:一台Docker主机跑通K8s管理平台
2026/10/21 5:49:54 网站建设 项目流程

如果你只是想在本机或一台小服务器上把Kubernetes的管理界面跑起来,单节点Rancher快速部署可能是性价比最高的路径。不需要准备三台Master、不需要折腾高可用网络,只要一台装了Docker的Linux机器,十来分钟就能把Rancher Server拉起来。这篇我把这套流程从头到尾捋一遍,包括版本怎么选、Docker怎么装、运行参数怎么理解、初始化怎么做,还有我实际踩过的几个坑。

1. 单节点Rancher能干什么:场景边界与选型逻辑

1.1 为什么单节点仍然是很多人的起点

Rancher这东西,简单说就是一个开源的Kubernetes多集群管理平台。你可以在一个Web界面上同时管好几套K8s集群,建集群、导集群、看资源、发工作负载,全在一个地方搞定。很多人第一次接触Rancher,其实并不是为了管理巨多云集群,而是想在本地或者一台测试机上先把它跑起来,看看K8s到底怎么运营。

单节点部署的意思,就是把Rancher Server跑在一个容器里,这个容器会承载管理端所需的Web服务、认证逻辑、集群状态存储等组件。它的长期运行状态落在宿主机某个目录里,比如/var/lib/rancher。你不需要单独部署数据库,因为内置存储已经帮你把这些事包了。

这种部署方式覆盖了至少三类人。第一类是刚学K8s的同学,想找一个直观的界面理解集群是怎么组起来的;第二类是后端或运维开发,要在内网搭一套临时环境给团队做联调;第三类是生产环境的前置验证,先在单节点上把流程跑通,再决定要不要上正式高可用架构。对我自己来说,大部分时候第一类和第二类的需求占了绝大多数。

1.2 单节点的边界:什么情况下别硬上

单节点好是好,但它不是万能钥匙。Rancher Server所在的这个节点本身也跑着一套K8s集群,也就是所谓的local集群。单节点意味着这套集群的控制面和数据面都在这台机器上,一旦机器挂了、磁盘坏了、网络断了,Rancher的管理入口也就没了。

所以如果你把生产集群挂在单节点Rancher上,风险是客观存在的。比如你导入了一两套大集群,发现Rancher Server节点突然重启,虽然业务集群还在照常跑,但你暂时失去了统一管理入口,该做的巡检、该看的告警全都会中断。

我的建议很简单:实验环境、开发环境、团队内部测试平台,单节点完全够用。但如果是正经生产环境,至少把Rancher Server做成三节点HA,或者直接用托管K8s服务的管理方案。就算条件暂时不允许上HA,也一定要做好单节点的数据备份,后面我会专门讲这块。

2. 部署前的环境准备:版本、硬件与Docker一次搞定

2.1 版本选择逻辑:别盲目拉latest

很多人上手就直接docker run rancher/rancher:latest,我的建议是稍微停一下,先把版本选明白。Rancher的镜像Tag非常多,有latest、v2.7.x、v2.8.x、v2.9.x,还有*-head这种开发版。

在正式环境里,我基本不会用latest,因为latest跟随新版本更新,Rancher版本大版本之间的一些配置结构会有变化,今天能用的配置明天可能就提示废弃了。更重要的是,Rancher版本和Kubernetes版本之间有适配关系,你要管理的目标集群是什么K8s小版本,直接决定了你该选哪个Rancher大版本线。

以我常用的版本线为例:如果团队里用的K8s还是1.24到1.27之间,那v2.7.x和v2.8.x都是顺手的选择;如果已经上了1.28以上的版本,就会优先考虑更新的Rancher版本。具体可以看官方镜像仓库里的Tag列表,选一个明确的小版本号,比如v2.7.9,不要用latest含糊带过。

2.2 宿主机准备要点:内核、存储驱动、时钟

Rancher Server虽然是容器,但底层还是要依赖宿主机的Linux内核能力和磁盘性能。我之前在一台很老的CentOS 7.5上尝试部署,就遇到了内核版本过低的问题,Docker存储驱动只能退到较老的模式,Rancher启动后频繁异常。现在我的底线是内核3.10以上,当然越高越省心,Ubuntu 22.04、CentOS 7.9以上都没什么大问题。

硬件配置上,单纯跑Rancher Server,2核4G是最低起步,4核8G用起来才舒服。很多人忽略了磁盘IO对etcd的影响。local集群会往磁盘写大量小文件,机械硬盘在这种场景下会拖慢整体响应,有条件就上固态盘,容量建议留出50GB以上,日志、镜像、etcd快照都会慢慢占空间。

时间同步是个小事但很关键。Rancher和K8s的证书体系都对时间敏感,宿主机时间漂移会导致证书校验失败,访问界面直接报证书错误。装完系统第一步就把chrony或ntpd配好,保证timedatectl输出的是正确时间,这个坑我踩过一次,后面排查时会被各种假象误导,非常难受。

2.3 Docker安装:curl脚本不是唯一选择

Docker本身没什么神秘感,按官方文档装就行。Ubuntu/Debian用apt,CentOS/RHEL用yum,关键是别装太老的版本。Docker Engine版本建议20.10以上,新版Rancher对Docker API版本有要求,版本太老会出现端口映射或者卷挂载行为异常。

国内环境拉镜像是一个绕不开的话题。Rancher的镜像比较大,首次拉取可能要等很久,配置镜像加速器能明显改善体验。我通常在/etc/docker/daemon.json里写入加速器地址,然后重启Docker。这一步虽然简单,但没配置的话,有的环境下拉镜像直接超时。

还有一个容易忽略的点:Docker服务要设置开机自启,systemctl enable --now docker。另外,不要在生产或长期使用的机器上随便改Docker的存储路径,Rancher数据卷一旦依赖了某个路径,后续搬迁会很麻烦。

3. 核心部署动作:一条docker run命令之后

3.1 启动命令逐参数拆解

环境准备好以后,核心动作其实就一条命令。我习惯先把数据目录建好,再启动容器:

mkdir -p /opt/rancher docker run -d --privileged \ --restart=unless-stopped \ --name rancher-server \ -p 80:80 -p 443:443 \ -v /opt/rancher:/var/lib/rancher \ rancher/rancher:v2.7.9

每个参数都不是随手写的,拆开看:

--privileged是Rancher容器运行需要的权限模式,它要在容器内部拉起完整的K8s组件,包括网络、iptables规则、挂载操作,普通权限模式会限制这些行为。

--restart=unless-stopped让Docker在宿主机重启后自动拉起容器,除非你手动停止它。单节点部署没有外部守护进程,这个参数相当于最简单的兜底保障。

-p 80:80 -p 443:443把宿主机的80和443映射到容器内。Rancher管理界面默认走HTTPS,所以443是必开的。80端口会被用来做转发或Let's Encrypt证书校验,如果被别的Nginx占了,一定要先解决端口冲突。

-v /opt/rancher:/var/lib/rancher是数据卷挂载。容器可以随时删掉重建,但数据必须留在宿主机上。这个映射路径对应Rancher的持久化目录,里面包含了local集群的etcd数据、配置文件、证书等关键信息。

3.2 首次访问:TLS提示是正常的

启动之后,先看日志确认Rancher是不是真的起来了:

docker logs -f rancher-server

日志里会有一长串启动信息,看到类似“Rancher UI is up”或者监听地址出现,就可以打开浏览器访问了。访问地址就是宿主机IP的HTTPS端口,比如https://192.168.1.100。

第一次打开,浏览器几乎肯定会弹一个安全警告。原因很直接:Rancher默认用的是自己生成的自签名证书,没有经过公共CA签发的信任链。这个警告不是说明你装错了,而是正常现象。开发环境直接忽略警告继续访问就行,确认完证书能通过、页面能打开,再决定后面要不要换成正式的域名证书。

如果是用IP访问,Rancher后续生成的集群导入命令里也会带上这个IP。所以从一开始就要想清楚,你后续是用IP管理还是用域名管理。如果脾气不急,我更建议在前期就把域名或者固定的内网IP定下来,省得后期改Server URL导致集群token失效。

3.3 URL配置:影响后续导入集群的关键

Rancher Server第一次初始化的时候会让你设置Server URL。这个地址非常重要,它是Rancher用来向被管理集群下发注册命令的入口地址。

比如你后面要导入一套外部K8s集群,Rancher会生成一条kubectl命令,那里面会把Server URL写进去。如果URL填的是localhost,那外部集群的节点访问Rancher时就会去连它自己的localhost,必然失败。

我建议在这个环节就填入最终管理人员访问Rancher的地址。如果有域名就填域名,没有域名就填固定内网IP,千万别填127.0.0.1。这个值后面虽然在Rancher设置里也能改,但一旦已经有集群导入过,改动可能会让已有集群的agent重新连接失败,属于能不动就不动的配置。

4. 初始化与Server URL:首次登录绕不开的两件事

4.1 admin初始化:密码设置与界面逻辑

浏览器打开Rancher页面后,第一步是设置admin账户的登录密码。这个密码复杂度建议高一点,因为Rancher是管理K8s的入口,权限一旦泄露等于整个容器平台裸奔。

设置完成以后,Rancher会要求你确认Server URL。这个流程和普通软件的首次引导类似,但背后检视的是你后续集群导入的连通性。我在实际部署中见过不少同事看都不看就点了默认值,结果后面花了一小时排查节点注册失败的问题。

首次登录之后,页面里会有几个明显的能力入口:一个本地集群叫local,可以点进去看到Rancher自身所在集群的资源状态;还有创建集群和导入集群的按钮。此时Rancher已经具备管理能力,但还没开始实际管理其他集群。

4.2 创建与导入集群的两种路径

Rancher里加集群有两种方式,很多人一开始分不清。第一种叫创建集群,意思是你还没有一套K8s集群,需要Rancher帮你调用云厂商或裸金属节点来创建一套新的集群;第二种叫导入集群,意思是你的K8s集群已经存在了,Rancher只是拿过来纳管。

单节点部署场景下,我大部分时候用的是导入方式。比如你已经有一套用Kubeadm建好的集群,或者有一套云上的托管集群,直接在Rancher里选导入,它会生成一个manifest或脚本,到目标集群上执行一次,之后目标集群的状态、工作负载、事件就都能在Rancher里看到了。

还有一点要区分清楚:Rancher本体所在的local集群和应用集群不是同一个概念。你可以把local集群也当作一套普通K8s来使用,但最好不要在上面部署乱七八糟的业务。它的主要职责是承载Rancher自身的组件,保持轻量。

4.3 节点角色与资源预留

无论是创建还是导入集群,都会遇到节点角色这个概念:etcd、Control Plane、Worker。这其实是K8s节点的三种角色标签。在Rancher的创建流程里,你可以在一台机器上同时勾选多个角色,这在单机测试环境很常见。

但我想提醒的是资源分配问题。如果你在一台只有4G内存的机器上导入一个新的单节点集群,同时勾选了etcd、Control Plane、Worker三个角色,那这台机器上不仅跑着Rancher Server,还要跑K8s的整套控制面组件,内存很快就会见底。

我的习惯是:如果Rancher Server本身已经占了不少资源,那就别再往同一台机器上塞新的K8s集群,或者至少把节点角色拆开,不要让一个节点背太多活。测试环境可以凑合,持久使用的环境还是别这么干。

5. 单节点部署的常见翻车点:现象、排查与修复

5.1 容器反复重启:八成是内存和磁盘问题

单节点部署最典型的故障现象,就是容器启动一段时间后自动重启,或者在docker ps里显示Restarting状态。第一次遇到这种问题,我先会docker logs --tail 200 rancher-server看看有没有OOM或资源不足的日志。

如果日志里出现类似内存分配失败、进程被Killed的迹象,那就该看宿主机的内存占用。Rancher启动阶段会做很多初始化操作,内存峰值在2G到4G之间都正常。机器只有2G内存的话,跑起来之后确实捉襟见肘。

磁盘空间也是容易被忽略的一点。Rancher的local集群会持续写入etcd数据,Docker的镜像层和容器日志也在增长,根分区满了以后,etcd写盘失败,容器也会陷入崩溃循环。平时用df -h看一眼空间,预留足够余量,能省去很多无谓的排查时间。

5.2 防火墙与端口:443被吞的排查

假如容器状态是Up,端口映射也正常,但浏览器就是连不上,那十有八九是防火墙拦住了流量。我在Ubuntu上遇到过ufw默认规则导致外部无法访问的案例,在CentOS上也见过firewalld没有放行443端口的情况。

排查思路我一般这样走:先在宿主机上用ss -lntp确认443端口有没有被Docker监听,如果有,说明端口本身是通的;然后从外部机器用telnet IP 443测试连通性,连不上就检查防火墙规则。

还有一个容易被坑的点:宿主机上可能已经装了Nginx或其他Web服务,占用了80或443端口。Docker端口映射在启动时会直接报错,但如果其他服务是后起来的,可能会悄悄把Rancher的端口抢走。这时候用ss -lntp看占用进程,再决定是停服务还是改端口。

5.3 与时间同步相关的证书异常

有时候你会遇到一个很奇怪的现象:Rancher页面能打开,但导入集群时总是报证书校验失败,或者浏览器警告提示证书有效期不对。此时我会先看宿主机时间和实际时间差多少。

之前帮一个同事排查,他机器上的时间整整快了5分钟,Rancher生成的自签名证书在客户端校验时就会因为时间偏差被判定为无效。这种情况下,调整时区、配置NTP同步、重启容器就恢复了。

说这个是想强调,单节点部署的很多疑难杂症,根源往往不在Rancher本身,而是宿主机的基础配置。时间、内核、磁盘、端口,任何一个环节不干净,都会以各种诡异的形态暴露出来。

5.4 Server URL配置错误的连锁反应

Server URL配置错误这件事,很多时候是在导入集群之后才暴露的。比如在导入流程里执行了注册命令,状态一直卡在Waiting,或者节点信息一直不出现。

Rancher生成注册命令时,会把Server URL拼进YAML里。这个URL填成了localhost或127.0.0.1,目标集群里的agent就会尝试连接它自己的回环地址,当然连不上Rancher。此时去改Server URL能解决一部分问题,但如果旧的URL已经被一些节点缓存了,可能需要重新生成导入命令。

所以最好的做法就是在一开始初始化的时候,把这个地址一次性填对。如果后续确实要改域名或IP,我建议重新走一遍导入流程,不要硬在原集群上改配置文件。

6. 数据备份与后续演进:单节点不是终点

6.1 持久化目录与备份策略

单节点Rancher的所有关键数据,基本都在/var/lib/rancher这个目录下,对应到宿主机就是我们启动时挂载的/opt/rancher。包括local集群的etcd数据、证书、配置、用户认证信息,都在里面。

所以备份的核心就是把这个目录完整打包。我的做法是先停容器再复制目录,避免运行状态下数据不一致。命令大概是这样的:

docker stop rancher-server tar czf /backup/rancher-backup-$(date +%F).tgz -C /opt rancher docker start rancher-server

这个操作虽然简单,但很实用。如果你是凌晨做定时备份,可以借助cron或定时任务自动执行。现在也有更精细的Rancher备份恢复组件,可以做到在Web界面上创建备份,恢复到某个时间点。但对单节点环境来说,我个人还是觉得目录打包最直观、依赖最少。

6.2 数据迁移与单节点重建的思路

如果某天这台宿主机彻底坏了,你只要还有备份包,恢复的思路其实就是重装Docker、挂数据目录、再跑一遍同样的docker run命令。启动后看到的数据就是你备份时的状态。

要注意的是镜像版本必须一致。用v2.7.9备份的数据,恢复到latest上,兼容性不一定有保证。所以我把版本固定这件事看得很重要,备份文件上最好也顺手把版本号写上。

如果是从单节点平滑迁移到三节点HA,操作路径就不是“直接同步”了。我经验里比较稳妥的办法是:新搭建的HA环境保持Rancher版本一致,然后把旧环境上的配置和集群逐个重新导入,或者通过官方迁移工具处理核心配置。业务集群本身不需要重建,只要Rancher重新纳管即可。

6.3 关于单节点的使用体会

我用了很久的单节点Rancher,最大的体会是:它能让你用最小的成本理解K8s管理平台的全貌,但也最容易让人产生“这就够了”的错觉。单节点适合承载那些允许出问题的环境;如果是正经业务链路,真心建议至少把备份做扎实,再想HA的事。

最后再补充一个常用动作:Rancher容器的日志会一直增长,时间久了会占用不少磁盘。我在维护单节点环境时,会写一个简单的Logrotate规则或者定时清理脚本,避免日志把磁盘塞满。这个细节看起来小,但确实救过我很多次。

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

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

立即咨询