服务公告

服务公告 > 综合新闻 > Rancher:集群管理

Rancher:集群管理

发布时间:2026-04-21 20:01

一、前言

搞过的人都知道,Rancher管理多集群最烦的就是手动切来切去,节点状态来回跳,kubectl配半天配不对。本文直接上实操,从装Rancher到跑通日常管理命令,手把手搞定多集群管理场景。

二、操作步骤

第1步:搞台机器装Rancher Server

# 先跑个Rancher单节点,生产环境建议外部数据库
docker run -d --restart=unless-stopped 
  -p 80:80 -p 443:443 
  -v /opt/rancher:/var/lib/rancher 
  rancher/rancher:latest

预期输出:

Unable to find image 'rancher/rancher:latest' locally latest: Pulling from library/rancher 8e3ba11baa67: Pull complete Digest: sha256:7d6e8c9f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c Status: Downloaded newer image for rancher/rancher:latest a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6

第2步:初始化Admin密码并获取集群kubeconfig

# 浏览器访问 https://YOUR_RANCHER_IP ,首次登录设置admin密码
# 登录后点击集群 → local → 下载Kubeconfig文件
# 或者用curl直接拿令牌

curl -s -k -X POST 'https://YOUR_RANCHER_IP/v3-public/localProviders/local?action=login' 
  -H 'Content-Type: application/json' 
  -d '{"username":"admin","password":"YOUR_PASSWORD"}'

预期输出:

{"type":"token":"Bearer kpttOKEN123456789abcdefghijklmnopqrstuvwxyz","expiresAt":"2024-12-31T23:59:59Z"}

第3步:导入现有K8s集群(Rancher管理其他集群)

# 在被管理集群上执行Rancher提供的命令
kubectl apply -f https://YOUR_RANCHER_IP/v3/import/TOKEN123456789abcdefghijklmno.yaml

# 验证agent是否运行
kubectl get pods -n cattle-system

预期输出:

NAME READY STATUS RESTARTS AGE cattle-cluster-agent-xxx 1/1 Running 0 2m cattle-node-agent-xxx 1/1 Running 0 2m rancher-operator-xxx 1/1 Running 0 5m

第4步:通过Rancher API批量操作多集群

# 列出所有受管集群
curl -s -k -H "Authorization: Bearer YOUR_TOKEN" 
  'https://YOUR_RANCHER_IP/v3/clusters' | jq '.data[] | {name:.name, state:.state}'

预期输出:

{ "name": "prod-cluster", "state": "active" } { "name": "dev-cluster", "state": "active" } { "name": "test-cluster", "state": "provisioning" }

第5步:配置kubectl直接切换集群(多集群管理核心)

# 下载各集群kubeconfig后合并
mkdir -p ~/.kube
cat ~/.kube/config_rancher > ~/.kube/config

# 添加集群别名快速切换(加到~/.bashrc)
alias k8s-prod='kubectl config use-context prod-cluster && kubectl get nodes'
alias k8s-dev='kubectl config use-context dev-cluster && kubectl get nodes'

# 立即生效
source ~/.bashrc


预期输出:

$ k8s-prod Switched to context "prod-cluster". NAME STATUS ROLES AGE worker-01 Ready worker 30d worker-02 Ready worker 30d

第6步:日常巡检命令(批量检查多集群Node状态)

#!/bin/bash
# 批量巡检脚本,保存到/usr/local/bin/multi-cluster-check

for cluster in prod-cluster dev-cluster test-cluster; do
  echo "===== 检查 ${cluster} ====="
  kubectl --context ${cluster} get nodes --no-headers | awk '{print $1" "$2}' | grep -v Ready && echo "发现异常节点" || echo "节点正常"
  kubectl --context ${cluster} get pods -A --no-headers | grep -v Running | grep -v Completed && echo "发现异常Pod" || echo "Pod正常"
done


预期输出:

===== 检查 prod-cluster ===== 节点正常 发现异常Pod ingress-nginx-controller-xxx 0/1 ImagePullBackOff 0 45m ===== 检查 dev-cluster ===== 节点正常 Pod正常 ===== 检查 test-cluster ===== 节点正常 Pod正常

三、常见问题FAQ

Q1: Rancher页面能打开但节点一直卡在Waiting状态怎么办?

老手回答:通常是cattle-node-agent镜像拉不到。先在节点上手动跑一遍:docker pull rancher/rancher-agent:YOUR_TAG,如果超时就配国内镜像源。注意看节点上/var/log/rancher/agent.log,大部分是DNS解析问题或者iptables规则把流量拦了。生产环境建议提前在节点上做离线镜像预拉取,别等上线了再救火。

Q2: 导入集群时报cattle-cluster-agent NotFound,怎么排查?

老手回答:先检查被导入集群的cattle-system命名空间是否存在。不存在说明命令没执行成功,重新kubectl apply -f一次。如果命名空间存在但agent没起来,用kubectl describe pod -n cattle-system看Events字段,八成是证书问题或者RBAC权限不够。最坑的是Rancher Server本身时间不同步,节点上NTP没配的话agent启动会直接失败。

Q3: 生产环境几百个集群,怎么批量升级Rancher Server?

老手回答:千万别直接upgrade,除非你的集群数量一只手数得过来。正确姿势是:先用备份API备份所有集群配置curl -k -X POST https://YOUR_RANCHER_IP/v3/clusterregistrationtokens,然后按顺序逐个迁移集群到新Rancher实例。批量操作用Rancher API写脚本,千万别手撸,容易出纰漏。升级前先在测试环境跑一遍,生产环境没有重来的机会。

Q4: kubectl连接Rancher管理的集群报错Unable to connect to the server,怎么破?

老手回答:先确认kubeconfig里的server地址是不是对。很多时候是Rancher重启后IP变了或者证书换了,但kubeconfig没更新。直接去Rancher界面重新下载kubeconfig最稳。另外注意context名称不要重复,重复的话kubectl会用最后一个,切换集群时容易混乱。建议每个集群的kubeconfig单独存一个文件,用KUBECONFIG环境变量合并。

四、总结

核心要点:

延伸阅读:

⚠️ 警告:本文涉及的生产操作请务必先在测试环境验证,涉及删除集群、重置配置等危险操作时建议提前做好备份。

上一篇: Kong:服务发现

已经是最后一篇啦!