企业级多集群Kubernetes管理平台,统一纳管与分发应用
Rancher 是 SUSE 开源的多集群 Kubernetes 管理平台,Apache 2.0 协议。它本身不是 Kubernetes 发行版,而是装在一个 Kubernetes 集群上的管理平面:通过它的 Web UI 或 API,可以创建、导入、升级、监控几十甚至上百个下游集群,并在所有集群上统一部署应用。
Rancher 解决的问题是集群数量增长后的运维失控:当你有 3 个集群时,kubeconfig 切换还能忍;有 30 个集群、分布在三个云和两个机房时,版本一致性、证书到期、谁改了 RBAC、某个应用只在部分集群上生效——这些都需要一个中心。
SUSE 提供两个版本:
Rancher Community 开源版,Apache 2.0,社区支持
Rancher Prime 商业版,含长期支持、安全补丁与厂商支持
两者代码同源,Prime 主要多了支持周期与合规能力。
理解 Rancher 的关键在于通信方向:
下游集群(downstream cluster)
│
│ cattle-cluster-agent 主动向外连接(443)
▼
Rancher Server(管理集群)
Rancher 从不主动连进下游集群,而是由下游集群里的 cattle-cluster-agent 主动连出来。这个设计意味着:
另外还有一个 cattle-node-agent 以 DaemonSet 形式运行,负责节点级的操作(如 etcd 快照恢复、节点清理)。
Rancher 官方推荐用 Helm 装在已有的 Kubernetes 集群上;单容器 docker run 的方式仅适合快速体验,已被明确标注不适合生产。
前置条件:一个可用的 Kubernetes 集群、已装 kubectl 与 helm、一个 Ingress Controller(K3s/RKE2 自带)。
# 1. 添加 Helm 仓库
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
helm repo add rancher-alpha https://releases.rancher.com/server-charts/alpha
helm repo update
# 2. 创建命名空间(必须是 cattle-system,发布名建议固定为 rancher)
kubectl create namespace cattle-system
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.18.0/cert-manager.crds.yaml
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set crds.enabled=true
# 使用 Rancher 自签 CA(默认)
helm install rancher rancher-stable/rancher \
--namespace cattle-system \
--set hostname=rancher.example.com \
--set bootstrapPassword=admin
# 使用 Let's Encrypt
helm install rancher rancher-stable/rancher \
--namespace cattle-system \
--set hostname=rancher.example.com \
--set bootstrapPassword=admin \
--set ingress.tls.source=letsEncrypt \
--set letsEncrypt.email=ops@example.com \
--set letsEncrypt.ingress.class=nginx
# 使用自有证书(把 tls.crt / tls.key 提前放进 cattle-system 的 Secret)
helm install rancher rancher-stable/rancher \
--namespace cattle-system \
--set hostname=rancher.example.com \
--set ingress.tls.source=secret
# 指定版本
helm install rancher rancher-stable/rancher --version 2.15.1 ...
kubectl -n cattle-system rollout status deploy/rancher
kubectl -n cattle-system get deploy rancher
kubectl -n cattle-system get pods
kubectl get secret --namespace cattle-system bootstrap-secret \
-o go-template='{{.data.bootstrapPassword|base64decode}}'
安装时用到的 --set 参数必须记录下来,后续 helm upgrade 时一个都不能少,否则配置会被重置。
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
--privileged \
rancher/rancher:latest
# 取初始密码
docker logs <container-id> 2>&1 | grep "Bootstrap Password:"
# 1. 在 Rancher UI 中:Cluster Management → Import Existing → Create
# 会得到一条带 token 的指令,形如:
kubectl apply -f https://rancher.example.com/v3/import/<token>.yaml
# 2. 在下游集群执行后,Agent 会被部署
kubectl -n cattle-system get pods
kubectl -n cattle-system logs deploy/cattle-cluster-agent
# 3. 在 Rancher 中确认状态变为 Active
该导入清单实际创建的是 cattle-cluster-agent 的 Deployment 与相关 RBAC。
默认情况下,通过 Rancher 操作下游集群的所有 kubectl 请求都要经过 Rancher Server 中转,链路长且 Rancher 是单点。ACE 允许 kubectl 直连下游集群的 API Server:
# 在 Rancher 中为集群启用 ACE,并指定对外暴露的地址
kubectl config use-context <downstream-cluster>
kubectl get nodes # 此时已直连下游集群
适合大规模集群与网络延迟敏感的场景。
# Fleet:Rancher 内置的 GitOps 引擎,可向成千上万个集群分发应用
# UI 中:Continuous Delivery → Git Repos → 添加仓库
# Fleet 会为匹配的集群生成 Bundle 与 GitRepo 资源
kubectl -n cattle-fleet-system get gitrepos
kubectl -n cattle-fleet-system get bundles
Rancher 也支持原生的 Helm 应用市场(Apps & Marketplace),以及通过 Fleet 做集群级的 YAML 分发。
K3s 与 RKE2 集群可以通过 Rancher 直接升级,Rancher 会在下游集群部署 system-upgrade-controller,以声明式的 Plan 逐个节点滚动升级:
# 下游集群中会看到
kubectl -n cattle-system get plans
kubectl -n cattle-system get jobs
Rancher 早期内置了一套 Cluster API 集成(rancher-provisioning-capi)。从 Rancher v2.14 起,内置 CAPI 功能被移除,官方统一改为通过 Rancher Turtles 集成:
# Turtles 以 operator 形式装到 Rancher 所在的集群上
# 升级到 2.14 时会被自动迁移,但手工禁用过 Turtles 的需要重新启用
kubectl get pods -n rancher-turtles-system
kubectl get clusters.cluster.x-k8s.io -A
helm repo update
helm upgrade rancher rancher-stable/rancher \
--namespace cattle-system \
--version 2.15.1 \
--set hostname=rancher.example.com \
--set bootstrapPassword=admin
# 其余安装时的 --set 参数需一并带上
--set 参数必须在每次 helm upgrade 时重复一遍。漏掉 hostname、ingress.tls.source 这类参数会导致 Ingress 与证书配置被重置,是最常见的「升级后访问不了」原因。建议把参数写进 values 文件并纳入版本管理。cattle-system,发布名建议固定为 rancher。官方文档明确要求,改名会带来一堆意料之外的路径问题。bootstrapPassword 只在首次安装时生效。安装完成、完成初始化设置后,该密码不再有用;忘记了就用 bootstrap-secret 那条命令取。Unavailable,先查下游集群到 Rancher 域名的 DNS 与出站连通性。rancher-turtles-system 下的组件是否正常运行。rancher-backup operator 的备份恢复方案。cattle-cluster-agent 的 Secret 泄露等于集群被接管,轮换证书要用 Rancher 提供的流程,不要直接删 Pod 了事。kubectl — Kubernetes集群管理工具helm — Rancher 的推荐安装方式k3s — 常与 Rancher 搭配的轻量发行版cluster-api — Rancher Turtles 集成的上游项目argocd — 另一种 GitOps 交付方案