ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Rancher 部署 K8s 集群实战:从节点规划到多集群管理避坑指南

Rancher 部署 K8s 集群实战:从节点规划到多集群管理避坑指南 简介这份资源面向具备一定Linux与容器基础、希望用Rancher搭建生产级Kubernetes集群的技术人员围绕集群部署与日常管理展开。内容从准备工作讲起涵盖服务器与节点角色规划、网络端口要求再到Rancher Server的Docker快速启动与Helm高可用部署两种方式并详细说明创建Custom Cluster、配置Kubernetes版本与网络插件、生成节点注册命令、按Etcd/Control Plane/Worker角色添加节点及验证集群状态的完整流程。资源包为1个docx文档约19KB以图文步骤与命令示例为主便于对照操作。文中还整理了节点无法加入、网络插件故障等常见问题的排查思路以及添加新节点、升级集群、备份与恢复等扩展操作。目前已有541人学习适合需要快速掌握Rancher部署与管理Kubernetes集群方法、并解决实际部署问题的读者参考。1. Rancher 部署 K8s 集群为什么它比手搓 kubeadm 更值得投入如果你曾在三台裸机上用 kubeadm 初始化 master然后盯着The API server is not healthy after 4m0.00747357s这条报错反复重启 kubelet你会理解为什么越来越多团队转向 Rancher 来部署 K8s 集群。Rancher 不是 K8s 的替代品它是站在 K8s 之上的集群编排与多集群管理平台——你可以用它一键拉起 RKE2 或 K3s 集群也可以导入已有的 K8s 集群统一纳管。对于需要同时维护多套环境、又不想在每个集群上重复折腾证书轮换和 etcd 备份的团队来说Rancher 把「集群生命周期管理」这件事从手工活变成了可复现的流程。这篇文章面向的是有基本 Linux 和容器基础、准备在生产或准生产环境落地 Rancher 的工程师从准备工作一路讲到集群扩展操作中间会重点拆解那些让新手翻车的参数和排查路径。2. 部署前的准备工作节点规划、系统调优与依赖检查2.1 节点角色划分与最低配置Rancher 本身可以跑在单节点 Docker 上做测试但生产环境我一般推荐至少三节点高可用部署。节点角色分两类Rancher Server 节点运行 Rancher 容器和 K8s 管理面和下游集群节点被 Rancher 纳管的业务 K8s 集群。如果资源紧张可以让 Rancher Server 和下游集群复用同一批机器但生产环境建议隔离避免管理面故障影响业务。最低配置参考角色CPU内存磁盘数量Rancher ServerHA4 核16 GB100 GB SSD3下游集群 master4 核8 GB100 GB SSD3下游集群 worker8 核16 GB200 GB SSD按业务定操作系统推荐 Rocky Linux 8/9 或 Ubuntu 22.04内核 5.4 以上。所有节点必须时间同步否则 etcd 选主会出玄学问题。2.2 系统层调优命令在每台节点上执行以下操作这些是 K8s 集群稳定的基础# 关闭 swapK8s 强制要求 swapoff -a sed -i /swap/s/^/#/ /etc/fstab # 加载内核模块 cat EOF | tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF modprobe overlay modprobe br_netfilter # 设置网络转发参数 cat EOF | tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables 1 net.bridge.bridge-nf-call-ip6tables 1 net.ipv4.ip_forward 1 EOF sysctl --system # 关闭防火墙内网可信环境或放行必要端口 systemctl stop firewalld systemctl disable firewalld # 设置 SELinux 为 permissive setenforce 0 sed -i s/^SELINUXenforcing/SELINUXpermissive/ /etc/selinux/config这几条命令的逻辑很直接swap 不关kubelet 启动时会直接拒绝br_netfilter不加载Pod 跨节点通信的 iptables 规则无法生效ip_forward不开Service 的 ClusterIP 流量出不去。防火墙和 SELinux 是新手最容易忽略的两项Rancher 节点间需要 2379、2380、6443、9345 等端口互通内网环境直接关掉最省事公网环境则要精确放行。2.3 Docker 与 Rancher 的版本匹配Rancher 2.7 以后默认使用 containerd 作为容器运行时但如果你要用 Docker 跑 Rancher Server需要确认版本兼容。我一般用 Rancher 官方推荐的 Docker 版本避免docker-ce最新版带来的 cgroup v2 兼容问题# 安装 Docker以 Rocky Linux 为例 dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo dnf install -y docker-ce-24.0.7 docker-ce-cli-24.0.7 containerd.io systemctl enable --now docker # 验证 docker info | grep -E Cgroup|Storage如果输出里Cgroup Version是 v2而你的 Rancher 版本低于 2.7.5建议降级到 cgroup v1 或升级 Rancher。这个坑我在一次 Rocky 9 部署中踩过Rancher 容器反复重启日志里只报failed to create shim查了半天才发现是 cgroup 版本不匹配。3. 用 Rancher 拉起第一个 K8s 集群从容器启动到节点注册3.1 单节点 Rancher 快速验证先用单节点 Docker 方式跑通 Rancher确认流程没问题再上 HA。这条命令启动 Rancher 并持久化数据docker run -d --restartunless-stopped \ -p 80:80 -p 443:443 \ -v /opt/rancher:/var/lib/rancher \ --name rancher \ rancher/rancher:v2.8.5参数说明-v /opt/rancher:/var/lib/rancher把 Rancher 的数据目录挂到宿主机容器重建后集群配置不丢--restartunless-stopped保证宿主机重启后 Rancher 自动拉起。启动后访问https://节点IP首次登录会要求设置 admin 密码并提示获取 bootstrap 密码。3.2 创建下游 K8s 集群登录 Rancher UI 后进入Cluster Management→Create选择RKE2或K3s。RKE2 更适合生产K3s 适合边缘和资源受限场景。关键配置项Cluster Name自定义比如prod-k8sKubernetes Version选 Rancher 支持的稳定版不要追最新Network Provider默认 Canal如果要用 Cilium 需提前规划etcd三节点以上务必开启 etcd 快照设置S3或本地路径创建后 Rancher 会生成一条注册命令形如curl -fL https://rancher-host/system-agent-install.sh | \ sudo sh -s - --server https://rancher-host \ --token cluster-token \ --ca-checksum checksum在每台下游节点上执行这条命令节点会自动注册到集群。注意注册命令里的 token 有时效性过期后需要在 UI 重新生成。如果节点注册卡在Waiting for agent to connect先检查节点到 Rancher Server 的 443 和 9345 端口是否通再看节点上的rancher-system-agent服务日志。3.3 验证集群状态节点全部注册后在 Rancher UI 的 Cluster Dashboard 可以看到节点状态。用 kubectl 验证# 在 Rancher UI 下载 kubeconfig或直接通过 Rancher 代理访问 export KUBECONFIG/path/to/prod-k8s.yaml kubectl get nodes -o wide kubectl get pods -A | grep -v Running如果kubectl get nodes显示NotReady常见原因是 CNI 插件没起来。先看kube-system下 Canal 或 Cilium 的 Pod 日志多数是镜像拉取失败或网卡名不匹配。RKE2 默认用canal如果节点有多块网卡需要在集群配置里指定node-ip。4. 集群管理中的避坑与排查那些让 API Server 不健康的真实原因4.1 坑一API Server 不健康报错The API server is not healthy after 4m0.00747357s现象kubeadm 或 RKE2 初始化时kubelet 日志反复输出这条报错集群起不来。原因这个报错本身是结果不是原因。常见根因有三个一是容器运行时没配好kubelet 无法拉取kube-apiserver镜像二是证书生成失败比如时间不同步导致证书有效期异常三是端口冲突6443 被其他进程占用。解决先journalctl -u kubelet -f看 kubelet 日志再crictl ps -a看容器状态。如果是镜像拉取问题配置国内镜像加速或提前导入镜像如果是证书问题kubeadm reset后重新初始化确保所有节点date一致端口冲突用ss -tlnp | grep 6443排查。4.2 坑二节点注册后一直Waiting for agent to connect现象下游节点执行注册命令后Rancher UI 里节点状态一直转圈。原因节点上的rancher-system-agent无法回连 Rancher Server通常是网络策略或 DNS 解析问题。解决在节点上systemctl status rancher-system-agent看服务状态journalctl -u rancher-system-agent看日志。如果是 DNS 解析失败检查/etc/resolv.conf如果是端口不通用curl -v https://rancher-host/ping测试连通性。Rancher Server 的 9345 端口必须对下游节点开放。4.3 坑三etcd 集群脑裂导致集群不可用现象三节点 etcd 集群中一台宕机后整个集群 API 不可访问。原因etcd 需要多数节点存活才能选主三节点挂一台还剩两台理论上可用。但如果网络分区导致两台节点互相不可达就会脑裂。解决生产环境 etcd 节点数用奇数三节点或五节点。定期做 etcd 快照并验证恢复流程。Rancher 里可以配置 etcd 快照到 S3恢复时用rke2 etcd-snapshot restore或 Rancher UI 的恢复功能。我一般会在集群稳定后手动触发一次快照恢复演练确认备份真的能用。4.4 坑四Rancher Server 证书过期现象Rancher UI 无法访问浏览器提示证书过期或 Rancher 容器日志报x509: certificate has expired。原因Rancher 默认生成的证书有效期一年到期后需要轮换。解决单节点 Docker 部署用docker exec -it rancher rancher-certificate rotate轮换HA 部署用kubectl -n cattle-system exec deploy/rancher -- rancher-certificate rotate。轮换后重启 Rancher 容器。建议在证书到期前一个月设置提醒或者直接换成受信任的 CA 证书。4.5 坑五下游集群删除后节点残留现象在 Rancher UI 删除集群后节点上的 RKE2 进程和容器还在跑重新加入新集群时报端口冲突。原因Rancher 删除集群时不会自动清理节点上的 RKE2 安装。解决在节点上执行 RKE2 卸载脚本# RKE2 卸载 /usr/local/bin/rke2-uninstall.sh # K3s 卸载 /usr/local/bin/k3s-uninstall.sh # 清理残留目录 rm -rf /var/lib/rancher /etc/rancher清理后再重新执行注册命令。这个坑在频繁重建测试集群时特别常见血泪经验是删除集群后顺手把节点也清理干净。5. 集群扩展与进阶操作节点扩缩容、多集群纳管与监控接入5.1 横向扩容 worker 节点业务增长后扩容 worker 节点在 Rancher UI 的 Cluster 页面点Edit Config或者直接用注册命令在新节点上执行。新节点加入后Rancher 会自动调度系统组件。如果新节点一直不承载业务 Pod检查节点标签和污点kubectl describe node new-node | grep -E Taints|Labels kubectl get pods -A -o wide | grep new-node常见问题是新节点带了node-role.kubernetes.io/control-plane污点导致普通 Pod 无法调度。用kubectl taint node new-node node-role.kubernetes.io/control-plane-去掉污点。5.2 用 Rancher 纳管已有 K8s 集群如果团队已有用 kubeadm 搭的 K8s 集群可以通过 Rancher 的Import Existing功能纳管。操作步骤在 Rancher UI 选Import Existing→ 输入集群名称 → 生成 kubectl 命令 → 在目标集群执行。纳管后可以在 Rancher 里统一查看集群状态、配置 RBAC、接入监控。注意导入集群要求目标集群的 API Server 对 Rancher Server 可达且 kubeconfig 有足够权限。如果目标集群在私有网络需要配置 Rancher 的代理或使用--server参数指定可达地址。5.3 接入 Prometheus 监控与告警Rancher 内置了 Monitoring 应用基于 Prometheus Operator。在 Cluster Tools 里安装 Monitoring配置持久化存储和资源限制。安装后可以在 Rancher UI 直接看集群 CPU、内存、Pod 状态。关键配置# values.yaml 片段 prometheus: prometheusSpec: retention: 30d resources: requests: memory: 4Gi cpu: 1 grafana: persistence: enabled: true size: 20Giretention根据磁盘容量调整30 天是常见起点。如果集群 Pod 数量多Prometheus 内存要给足否则 OOM 后监控数据断档。告警规则可以通过 Rancher UI 的 Alerting 配置也可以直接写 PrometheusRule CRD。5.4 用 Fleet 做多集群 GitOps 部署Rancher 的 Fleet 组件可以实现多集群的 GitOps 持续部署。基本流程在 Rancher 里创建 GitRepo指向你的 manifests 仓库Fleet 会自动把资源分发到匹配的集群。集群匹配用标签选择器apiVersion: fleet.cattle.io/v1alpha1 kind: GitRepo metadata: name: my-app namespace: fleet-default spec: repo: https://github.com/your-org/manifests branch: main paths: - /apps/my-app targets: - clusterSelector: matchLabels: env: prod这个配置会把apps/my-app下的资源部署到所有带env: prod标签的集群。Fleet 的好处是集群增删后自动同步不用手动 kubectl apply。我一般把 Fleet 和 Rancher 的集群标签结合用新集群打上标签就自动继承对应配置。5.5 集群故障转移与备份恢复验证Rancher 本身的高可用靠多副本 Rancher Server 加外部数据库或嵌入式 etcd。下游集群的故障转移靠 K8s 自身的调度和 etcd 多副本。但光有机制不够要定期验证手动关掉一台 Rancher Server确认 UI 和 API 仍可访问手动关掉一台 etcd 节点确认集群 API 无中断从 etcd 快照恢复到一个测试集群确认数据完整这些验证动作我一般每季度做一次写成 runbook 让团队照着执行。后悔药就是备份但备份不验证等于没备份。6. 一个具体技巧用 Rancher API 批量管理集群节点Rancher 的 UI 适合日常操作但批量场景下 API 更高效。比如要给所有 prod 集群的节点打标签可以用 Rancher API# 获取所有集群 curl -s -u $RANCHER_TOKEN \ https://rancher-host/v3/clusters | jq .data[] | {id, name} # 给指定集群的节点打标签 CLUSTER_IDc-xxxxx curl -s -u $RANCHER_TOKEN \ https://rancher-host/v3/clusters/$CLUSTER_ID/nodes | \ jq -r .data[].id | while read node_id; do curl -s -X PUT -u $RANCHER_TOKEN \ -H Content-Type: application/json \ -d {labels:{env:prod,team:platform}} \ https://rancher-host/v3/clusters/$CLUSTER_ID/nodes/$node_id done这段脚本的逻辑是先用jq提取节点 ID再逐个 PUT 更新标签。RANCHER_TOKEN在 Rancher UI 的 API Keys 页面生成注意权限范围。批量操作前先在测试集群验证避免误改生产节点标签导致调度异常。另一个实用技巧是用 Rancher 的clusterId和nodeId组合做自动化巡检。我一般写一个 cronjob每天拉取所有集群的节点状态和资源使用率异常时发告警。这样不用登录 UI 就能掌握全局。最后说个习惯每次用 Rancher 做集群变更前先手动触发一次 etcd 快照变更后确认集群健康再清理旧快照。这个习惯帮我省过至少两次回滚时间。希望帮到你。本文还有配套的精品资源点击获取
返回列表