1. 为什么我们需要一个“看得见”的Kubernetes集群?

如果你已经跟着教程,吭哧吭哧地在几台服务器上敲完了 kubeadm init kubeadm join ,看着 kubectl get nodes 返回了 Ready 状态,心里那块石头算是落了地。恭喜你,一个原生的 Kubernetes 集群搭建成功了。但兴奋劲儿可能持续不了五分钟,当你试图部署第一个应用,或者想看看集群的资源使用情况时,就会立刻被拉回现实:难道以后管理这个集群,就全靠这一行行黑底白字的命令行吗?

这就像你费尽心思组装了一台性能怪兽级的电脑,结果发现显示器是坏的,所有操作都得靠盲打命令来完成。 kubectl 固然强大,是运维和开发的瑞士军刀,但它有几个天生的“短板”,尤其是在团队协作和日常运维视角下:

  1. 可视化缺失 :你无法一眼看清整个集群的全局状态。哪些节点压力大?Pod 分布是否均衡?Ingress 流量走向如何?这些在命令行里需要组合多个命令才能拼凑出模糊的图景。
  2. 操作门槛与风险 kubectl apply -f deployment.yaml 很简单,但写错一个 yaml 字段就可能引发故障。对于不熟悉 YAML 语法和 K8s 资源定义的团队成员(比如测试、产品经理甚至部分开发),这堵墙太高了。
  3. 多集群管理之痛 :现代企业往往不止一个 K8s 集群。开发、测试、预生产、生产环境可能各自独立,甚至跨云、跨地域。用 kubectl 切换 context 管理多个集群,不仅容易出错,也缺乏统一的视图和权限管控。
  4. 运维便捷性 :想快速扩缩容一个 Deployment?查看某个 Pod 的实时日志?进入容器内部执行个命令?这些高频操作在命令行下步骤繁琐,远不如在界面上点几下直观高效。

所以,一个图形化的管理界面不是“锦上添花”,而是让 Kubernetes 从极客玩具走向企业生产环境的“雪中送炭”。它降低了使用门槛,提升了运维效率,并提供了至关重要的全局可视性。而 Rancher,正是在这个领域里,被验证过无数次的企业级解决方案。它不是简单的 Dashboard,而是一个完整的容器管理平台,能够以你意想不到的方式,让 K8s 集群变得温顺、可控。

2. Rancher 的核心定位:不止于 Web 界面

很多人第一次接触 Rancher,以为它就是个漂亮的 K8s Dashboard 替代品。这个理解对,但不完全。Rancher 的官方定义是“完整的 Kubernetes 管理平台”,这句话包含了三层关键含义,理解了它们,你才知道自己引入的是什么。

第一层:统一的多集群管理平面。 这是 Rancher 最核心的价值。你可以把它想象成云计算的控制台,但这个控制台管理的不是虚拟机,而是一个个独立的 K8s 集群。无论这些集群是部署在公司的物理机上、私有云 OpenStack 里,还是公有云的 AKS、EKS、GKE 上,Rancher 都能将它们“纳管”进来。在 Rancher 的全局视图中,你可以一键切换不同集群,用相同的界面和逻辑去管理它们,极大地简化了混合云、多环境下的运维复杂度。

第二层:开箱即用的企业级功能增强。 一个原生 K8s 集群要投入生产,你需要自己搞定一大堆“配件”:镜像仓库(Harbor)、CI/CD 流水线(Jenkins/GitLab CI)、监控告警(Prometheus + Grafana)、日志收集(EFK/ELK)、安全策略(OPA/Gatekeeper)等等。Rancher 通过其应用商店(Catalog)和内置集成,为这些功能提供了“一键部署”或深度整合的方案。比如,你可以直接从 Rancher 的应用商店部署一个完整的 Prometheus Stack,它已经预配置好了对 K8s 资源的监控数据采集和 Grafana 看板。

第三层:简化的集群生命周期管理与用户权限控制。 Rancher 提供了图形化的向导来创建新的 K8s 集群(支持 RKE/RKE2、K3s 以及导入现有集群)。更重要的是,它有一套基于项目的 RBAC(角色权限控制)系统。你可以创建用户,并赋予他们特定的角色(如“项目成员”、“只读”),精确控制他们能在哪个集群、哪个命名空间里做什么操作。这对于需要将集群资源按部门或项目隔离的大型团队至关重要。

所以,整合 Rancher,你得到的不仅仅是一个 Web 界面,而是一个覆盖了 K8s 集群“生老病死”全生命周期,并附赠了大量生产级工具的“管理套件”。接下来,我们就看看如何把这个“套件”装到我们已有的集群上。

3. 部署 Rancher:选择适合你的安装姿势

Rancher 的安装非常灵活,官方主要推荐三种方式:Docker 单容器运行、Helm Chart 部署到 K8s 集群、以及 RKE(Rancher Kubernetes Engine)部署。对于整合到已有 K8s 集群这个场景, 使用 Helm 部署到目标集群内部是生产环境的最佳实践 。它利于高可用部署,也方便后续的升级和管理。

注意:虽然用 Docker run 最简单( docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher ),但这只适用于快速测试。单容器运行有单点故障风险,且证书管理、升级都不如 Helm 方便。

3.1 前置条件与准备工作

在开始 Helm 安装之前,请确保你的目标 K8s 集群满足以下条件:

  1. Kubernetes 版本 :Rancher 2.6.x/2.7.x 支持 K8s 1.20-1.25 等版本,具体需查看官方兼容性矩阵。你的集群版本最好在支持范围内。
  2. 节点资源 :运行 Rancher Server 的节点(通常是 Master 节点或专用节点)建议至少 4核 CPU、8GB 内存。Rancher 本身也是由多个 Pod 组成的微服务应用。
  3. 网络与存储 :确保节点间网络通畅,并能拉取 Docker Hub 或你配置的私有镜像仓库上的镜像。需要为 Rancher 准备一个默认的 StorageClass,以便其 Pod 能动态创建持久化存储卷(PVC)。
  4. Ingress 控制器 :Rancher 默认会创建自己的 Ingress 资源,因此集群中必须已安装 Ingress Controller(如 Nginx Ingress、Traefik)。这是外部访问 Rancher Web 界面的前提。
  5. Helm 命令行工具 :在你的本地管理机上安装 Helm 3。这几乎是 K8s 生态的标配包管理工具。

3.2 使用 Helm 部署 Rancher Server

假设你已经有一个可以正常工作的 kubectl 上下文,指向你的目标 K8s 集群。我们一步步来:

第一步:添加 Rancher Helm 仓库 Helm 通过仓库来管理 Charts(应用包)。首先将 Rancher 的官方仓库添加到本地。

helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
helm repo update

执行 helm repo list ,你应该能看到 rancher-stable 这个仓库。

第二步:创建 Rancher 专用的命名空间 为了资源隔离清晰,我们为 Rancher 创建一个独立的命名空间。

kubectl create namespace cattle-system

第三步:安装 cert-manager(用于自动管理 TLS 证书) Rancher 的安全访问依赖于 HTTPS。cert-manager 是一个流行的 K8s 证书管理工具,能自动从 Let‘s Encrypt 申请和续期 TLS 证书,也可以使用自签名证书。

# 安装 cert-manager 的 CustomResourceDefinitions (CRDs)
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.0/cert-manager.crds.yaml

# 添加 Jetstack Helm 仓库并安装 cert-manager
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.11.0

安装后,用 kubectl get pods --namespace cert-manager 检查所有 Pod 是否进入 Running 状态。

第四步:安装 Rancher 这是最关键的一步。你需要决定是使用 Let‘s Encrypt 的免费证书(需要公网 IP 和域名),还是使用自签名证书(用于内网环境)。这里以最常见的 自签名证书 为例,因为它不依赖外部网络和域名。

首先,你需要生成一个自签名证书。可以使用 openssl 命令,但更推荐使用 Rancher 提供的工具生成符合 K8s 要求的 TLS 证书 Secret。

# 假设你的 Rancher 访问域名是 rancher.mycompany.com(即使内网,也最好配置一个域名或 hosts 解析)
# 生成自签名证书(这里用了一个简化示例,生产环境应考虑证书的 CN 和 SAN 配置)
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
  -keyout tls.key -out tls.crt -subj "/CN=rancher.mycompany.com" \
  -addext "subjectAltName=DNS:rancher.mycompany.com"

# 将证书和密钥创建为 K8s Secret,注意命名空间是 cattle-system
kubectl -n cattle-system create secret tls tls-rancher-ingress \
  --cert=tls.crt \
  --key=tls.key

然后,使用 Helm 安装 Rancher,并指定使用我们刚创建的自签名证书。

helm install rancher rancher-stable/rancher \
  --namespace cattle-system \
  --set hostname=rancher.mycompany.com \
  --set replicas=1 \
  --set ingress.tls.source=secret \
  --set privateCA=true \
  --set bootstrapPassword=Admin123 # 请务必修改为一个强密码!

参数解释:

  • --set hostname :你访问 Rancher 时使用的域名。
  • --set replicas=1 :单副本部署。生产环境建议设置为 3 以实现高可用。
  • --set ingress.tls.source=secret :告诉 Rancher 从名为 tls-rancher-ingress 的 Secret 中读取 TLS 证书。
  • --set privateCA=true :声明我们使用的是私有 CA(自签名证书)。
  • --set bootstrapPassword :设置初始管理员密码。 首次登录后必须修改!

第五步:验证安装与访问 安装命令执行后,使用以下命令观察部署状态:

kubectl -n cattle-system get pods
kubectl -n cattle-system get ingress

rancher 相关的 Pod 都变为 Running ,并且 Ingress 资源创建成功后,就可以尝试访问了。

由于是自签名证书,浏览器会提示“不安全”。你需要手动添加安全例外(高级 -> 继续前往)。在地址栏输入你设置的 hostname (如 https://rancher.mycompany.com ),即可看到 Rancher 的登录界面。使用用户名 admin 和你设置的 bootstrapPassword 登录。

第一次登录,系统会强制你修改密码并设置一个默认的“服务器 URL”,这个 URL 就是集群内其他组件(如监控 Agent)访问 Rancher Server 的地址,通常就设置为你的访问域名。

4. 纳管现有 Kubernetes 集群:导入与直连

登录进 Rancher 后,你会发现界面很“空旷”,只有一个“本地”集群。这个“本地”集群,其实就是运行 Rancher Server 自身的那个 K8s 集群。我们的目标是把已有的、外部的业务 K8s 集群管理起来。Rancher 提供了两种主要方式: 导入 通过集群驱动创建 。对于已经存在的集群,“导入”是最直接的方式。

4.1 通过导入方式纳管集群

这个过程的本质,是在你的外部集群中部署一个 Rancher Agent(代理)。这个 Agent 会与 Rancher Server 建立连接,将集群的指标、事件和状态“上报”给 Server,并接收来自 Server 的控制指令。

在 Rancher UI 中的操作:

  1. 在全局视图下,点击右上角的“添加集群”。
  2. 选择“导入”。
  3. 为集群起一个名字(如“生产集群-北京”),然后点击“创建”。

在目标集群上的操作: 点击“创建”后,Rancher 会生成一段 kubectl 命令。这段命令的作用是在你的目标集群中创建一个 cattle-system 命名空间,并部署一个 rancher-agent 的 Deployment。

# 这是一个示例命令,实际内容由 Rancher 动态生成
kubectl apply -f https://rancher.mycompany.com/v3/import/xxxxx.yaml

你需要 在目标集群的 Master 节点上,使用能操作该集群的 kubeconfig ,执行这段命令。

关键原理与排查: 执行完命令后,回到 Rancher 界面,集群状态会从“Pending”变为“Provisioning”,最后变为“Active”。这个过程可能需要一两分钟。其背后的流程是:

  1. Rancher Agent Pod 在目标集群启动。
  2. Agent 向 Rancher Server 注册,建立双向的 WebSocket 或 HTTPS 长连接。
  3. Rancher Server 通过这个连接,开始拉取目标集群的节点、工作负载等信息。

如果集群状态长时间卡在“Provisioning”,最常见的原因是 网络连通性问题

  • 目标集群 -> Rancher Server 不通 :Agent 无法连接到 Rancher Server 的 URL(即你设置的“服务器 URL”)。检查目标集群节点是否能 curl telnet 通 Rancher Server 的域名和端口(通常是 443)。
  • Rancher Server -> 目标集群 API Server 不通 :Rancher Server 需要能访问目标集群的 Kubernetes API Server。如果目标集群的 API Server 是内网地址,或者有防火墙规则,需要确保运行 Rancher Server 的节点能访问它。在导入时,Rancher 会要求你填写“集群 API Server 端点”,如果自动检测的不对,需要手动填写一个能从 Rancher Server 网络访问的地址。

实操心得:对于网络环境复杂的场景(如跨机房、跨 VPC),我强烈建议在导入前,先在目标集群的某个 Pod 里手动测试网络连通性。可以运行一个 busybox Pod,在里面尝试 wget https://<RANCHER_SERVER_URL> ,看看证书和连接是否正常。这能提前排除大部分问题。

4.2 纳管后的权限与项目隔离

集群导入成功后,你会在 Rancher 的全局视图中看到它。点击进入集群,你会发现界面和功能与“本地”集群几乎一样。现在,你可以利用 Rancher 强大的多集群管理能力了。

统一监控与告警 :在 Rancher 的“监控”菜单下,你可以为每个集群一键启用监控。Rancher 会帮你部署好 Prometheus、Grafana 等组件,并预置针对 K8s 的监控面板。你可以在一个界面下查看所有集群的 CPU、内存、Pod 状态等指标。

集中式的用户与权限管理 :这是 Rancher 相对于原生 K8s RBAC 的巨大优势。你可以在 Rancher 的“用户与认证”中,添加公司 LDAP/AD 用户,或者创建本地用户。然后,通过“集群成员”和“项目成员”功能,精细地分配权限。

  • 集群角色 :可以授予用户“集群所有者”、“集群成员”或“只读”等角色,控制其在集群层面的操作权限。
  • 项目角色 :Rancher 引入了“项目”的概念,一个项目可以包含多个命名空间。你可以将用户添加到某个项目中,赋予其“项目所有者”、“项目成员”或“只读”角色。这样,开发团队 A 只能看到和管理他们项目下的命名空间和资源,完全看不到团队 B 的资源,实现了逻辑上的强隔离。

这种“全局用户 - 多集群 - 项目/命名空间”的三层权限模型,非常适合中大型企业的多团队协作场景,避免了直接分发和管理一堆 kubeconfig 文件的混乱和风险。

5. 通过 Rancher 界面进行日常运维:实战演练

现在,集群已经纳管,我们来体验一下通过 Rancher 的 Web 界面,能如何简化日常运维工作。我们以一个经典的“部署 Web 应用并暴露服务”的场景为例。

5.1 图形化创建工作负载(Deployment)

在原生 K8s 里,你需要编写一个 deployment.yaml 文件,定义容器镜像、端口、环境变量、资源限制等,然后用 kubectl apply 。在 Rancher 里,这个过程变成了表单填空。

  1. 进入目标集群,点击顶部菜单的“工作负载”。
  2. 点击“部署服务”,选择“Deployment”。
  3. 在表单中,你需要填写:
    • 名称 :给你的 Deployment 起个名,如 my-webapp
    • 命名空间 :选择一个已有的,或新建一个。
    • Docker 镜像 :输入镜像地址,如 nginx:1.21 。Rancher 支持从私有仓库拉取,你只需要提前在集群级别配置好镜像仓库凭证(Secrets)。
    • 端口映射 :添加容器端口,如 80 。Rancher 会自动帮你创建对应的 Service。
    • 环境变量 :可以通过表单轻松添加。
    • 资源限制 :设置 CPU 和内存的 Request 和 Limit,这是保障集群稳定的重要设置,在界面上操作非常直观。
    • 健康检查 :配置存活探针(Liveness)和就绪探针(Readiness),这是生产应用必备的。
    • 滚动更新策略 :设置最大不可用 Pod 数和最大超出 Pod 数,控制更新时的行为。

填写完毕后,点击“启动”。Rancher 会在后台生成对应的 YAML 并提交给 K8s API。你可以在“工作负载”列表里看到它的状态从“部署中”变为“活跃”。点击进入详情,你能看到 Pod 列表、事件、以及每个 Pod 的实时日志——所有这些都不需要敲任何命令。

避坑提示:在图形界面配置“资源限制”时,Rancher 默认的单位是 Mi (Mebibyte)和 m (千分之一核)。例如, 1000m 就是 1 个 CPU 核心, 512Mi 就是 512 Mebibytes 内存。务必理解这些单位,设置过小会导致 Pod 无法启动,设置过大会造成资源浪费。对于不确定的应用,可以先设置一个较小的 Request 和一个较大的 Limit 进行观察。

5.2 配置服务发现与负载均衡(Service & Ingress)

Deployment 创建后,Rancher 通常会自动生成一个同名的 ClusterIP 类型的 Service。但如果想让外部访问,我们需要 Ingress。

  1. 在集群菜单下,进入“服务发现” -> “Ingress”。
  2. 点击“添加 Ingress”。
  3. 配置路由规则 :这是最核心的部分。你需要指定:
    • 名称 命名空间
    • 请求主机 :你的域名,如 webapp.mycompany.com 。如果只是测试,可以填 *
    • 路径 :如 / ,表示根路径。
    • 目标服务 :选择你刚刚创建的 my-webapp Service。
    • 服务端口 :选择 80
  4. Rancher 还允许你直接在界面上配置 TLS 终止(上传证书或使用 Let‘s Encrypt)、负载均衡算法、会话保持等高级特性。

创建完成后,Rancher 会生成一个 Ingress 资源。集群内的 Ingress Controller(如 Nginx)会监听到这个资源的变化,并自动更新其配置,将流量路由到你的后端 Pod。你只需要将域名解析到 Ingress Controller 的公网 IP 或负载均衡器 IP 即可访问。

5.3 监控、日志与命令行工具集成

监控 :如果启用了集群监控,在“工作负载”或“节点”的详情页,你会直接看到 CPU、内存、网络等监控图表,无需跳转到 Grafana。

日志 :点击任何一个 Pod,在详情页有“日志”选项卡。你可以选择查看指定容器的实时日志,并支持简单的过滤和搜索。虽然不如专业的日志平台强大,但对于快速排错足够了。

内置命令行工具(Cloud Shell) :Rancher 在右上角提供了一个“启动 kubectl”按钮。点击后,会在浏览器中打开一个终端窗口,这个终端已经自动配置好了当前集群的 kubeconfig 。你可以直接在这里运行 kubectl helm 等命令,免去了本地配置和切换上下文的麻烦。这对于执行一些复杂的、界面不支持的运维操作非常方便。

6. 进阶:利用 Rancher 应用商店与流水线

当基础运维变得轻松后,Rancher 的另外两个强大功能可以进一步提升你的生产力: 应用商店 流水线

6.1 应用商店:一键部署复杂应用

K8s 生态中有大量优秀的开源应用,如 MySQL、Redis、WordPress、Jenkins 等。手动为它们编写 Helm Chart 或一堆 YAML 文件非常耗时。Rancher 应用商店集成了 Helm Chart 仓库,并提供了图形化的配置界面。

例如,要部署一个高可用的 Redis 集群:

  1. 在集群菜单下,进入“应用商店”。
  2. 在“全部”或“数据库”分类中找到“Redis”。
  3. 点击“启动”,选择要部署的命名空间。
  4. 你会看到一个详细的配置页面,可以设置 Redis 的密码、架构(主从/集群)、持久化存储、资源限制等所有参数。这些参数对应着 Helm Chart 的 values.yaml
  5. 点击“启动”,Rancher 会帮你完成所有资源的部署。

这极大地降低了在 K8s 上部署中间件的门槛。Rancher 官方维护的商店包含了许多经过验证的 Chart,你也可以添加自定义的 Helm 仓库,来部署企业内部的应用。

6.2 集成 CI/CD 流水线

Rancher 2.x 版本集成了基于 Jenkins 的流水线功能。你可以在项目级别启用“流水线”,通过图形化方式或编写 Jenkinsfile 来定义构建、测试、部署的步骤。

虽然对于已经拥有成熟 CI/CD 工具链(如 GitLab CI、GitHub Actions)的团队来说,这个功能可能不是首选,但它提供了一个开箱即用的、与 K8s 深度集成的轻量级方案。特别适合中小团队快速搭建从代码到部署的自动化流程。流水线可以直接使用 Rancher 内部的项目和服务账号,权限管理更统一。

7. 常见问题与运维心得

在长期使用 Rancher 管理生产集群的过程中,我积累了一些踩坑经验和最佳实践。

问题一:Rancher Server 升级后,纳管的集群 Agent 连接中断? 这是升级 Rancher 时的一个经典问题。Rancher Server 和 Agent 之间存在版本兼容性。升级 Server 后,较老版本的 Agent 可能无法连接。 解决方案 是,在升级 Rancher Server 后,通常需要重新生成导入命令,在纳管集群上重新执行一次(即重新部署 Agent)。Rancher 文档的升级指南中会明确说明这一点。稳妥的做法是,先在测试环境演练整个升级流程。

问题二:Rancher 界面操作很慢,或者经常超时? 这可能由几个原因导致:

  1. Rancher Server 资源不足 :检查 cattle-system 命名空间下 Rancher Pod 的资源使用情况。如果 CPU 或内存经常跑满,需要给节点扩容或调整 Rancher 的资源请求/限制。
  2. 网络延迟 :如果 Rancher Server 与纳管集群的 API Server 之间网络延迟很高(如跨地域),操作响应就会变慢。考虑将 Rancher 部署在离业务集群网络质量更好的区域。
  3. 集群规模过大 :单个集群节点数过多(例如超过 200 个),或者资源对象(Pod、Service等)数量巨大,会给 Rancher 的缓存和同步带来压力。需要对集群进行合理规划与拆分。

问题三:如何备份和恢复 Rancher? Rancher 的状态数据(用户、权限、集群信息等)是保存在其所在集群的数据库(默认是嵌入的 etcd,高可用部署会用外部数据库如 MySQL)中的。因此,备份 Rancher 实质上是备份这个数据库。官方推荐的方法是:

  • 单容器安装 :备份挂载的 volume 数据。
  • Helm 安装(使用外部数据库) :定期备份你的 MySQL/PostgreSQL 数据库。
  • Helm 安装(使用内置 etcd) :使用 etcdctl 工具对 etcd 进行快照备份。 务必定期测试恢复流程,确保备份有效。

个人运维心得:

  1. 权限收口 :尽早启用外部认证(如 LDAP/AD),并利用好 Rancher 的项目权限模型。避免长期使用 admin 账号进行日常操作,为不同角色的成员创建对应的账号和权限。
  2. 标签的艺术 :无论是节点、命名空间还是工作负载,养成打标签(Labels)的好习惯。在 Rancher 界面中,你可以基于标签进行高效过滤和查询。例如,给所有测试环境的资源打上 env=test ,给某个业务线的资源打上 product=order
  3. 善用“视图”功能 :Rancher 允许你保存自定义的过滤视图。比如,你可以创建一个名为“我负责的服务”的视图,过滤出特定项目下、状态不是“运行中”的工作负载。这能帮你快速聚焦关键问题。
  4. 界面与 CLI 结合 :不要试图用 Rancher 界面完成所有事情。对于批量操作、复杂的资源编排(如使用 Kustomize)、或者需要版本控制的配置,仍然应该使用 kubectl 和 YAML 文件。Rancher 的“YAML 编辑”功能可以让你直接修改资源的原生 YAML,这是连接图形化与声明式配置的桥梁。

整合 Rancher 来管理 Kubernetes 集群,本质上是在原生 K8s 强大的自动化引擎之上,加装了一个直观的仪表盘和一套便捷的操控杆。它没有改变 K8s 的底层运行机制,而是让这些机制变得更易于观察和调用。对于从零开始的学习者,它降低了入门曲线;对于运维团队,它提升了管理效率和安全性;对于企业,它则为容器化平台的统一治理奠定了基础。当你熟悉了在界面上点点鼠标就能完成扩缩容、查看日志、管理证书之后,恐怕就很难再回到那个纯命令行的“黑暗时代”了。

更多推荐