Rancher 线上级RKE2 集群搭建与深度排错指南
本文档详细讲解如何在 Rancher 管理平台下,于内网或离线环境中,通过 RKE2 架构搭建和注册 Kubernetes 生产集群。内容涵盖从系统准备、离线镜像同步到集群创建与核心问题排查的全流程。
前提:请确保已有一个正在运行的 Rancher Server(v2.13.1),可参考前序文档:RKE2 单节点集群安装 Rancher+ 私有镜像仓库搭建 完整教程
环境要求
| 项目 | 要求 |
|---|---|
| 操作系统 | Rocky Linux 8/9、CentOS 7/8、Ubuntu 20.04+ |
| 网络 | 可访问外网或配置私有镜像仓库 |
一、系统初始化
在将任何节点加入集群前,必须完成以下基础配置。以下脚本适用于 RHEL/CentOS/Rocky Linux 系列。
#!/bin/bash
#!/bin/bash
echo "开始服务器初始化 (Rocky/CentOS 版本)..."
yum update -y
# 检查是否为 root 用户
if [ "$(id -u)" -ne 0 ]; then
echo "请使用 root 用户运行此脚本。"
exit 1
fi
# 1 修改 /etc/hostname
echo "请输入新的主机名 (hostname):"
read NEW_HOSTNAME
if [ -z "$NEW_HOSTNAME" ]; then
echo "主机名不能为空。"
exit 1
fi
echo "设置主机名为: $NEW_HOSTNAME"
hostnamectl set-hostname "$NEW_HOSTNAME"
# 2 关闭防火墙
echo "关闭防火墙..."
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld --no-pager
# 3 关闭 SELinux
echo "关闭 SELinux..."
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
# 4 禁用内存交换
echo "禁用内存交换 (swap)..."
sed -i '/ swap /s/^/#/' /etc/fstab
swapoff -a
echo "当前内存状态:"
free -h
# 5 转发 IPv4 并让 iptables 看到桥接流量
echo "设置 IPv4 转发和桥接流量配置..."
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
echo "确认加载的内核模块:"
lsmod | grep br_netfilter
lsmod | grep overlay
echo "确认系统变量:"
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
echo "所有配置完成。建议重启系统以确保所有更改生效。"
二、离线镜像准备(同步至私有仓库)
在内网环境中,必须提前将 RKE2 和 Rancher 所需的所有容器镜像推送至私有镜像仓库。
同步过程参考2. 收集镜像并发布到私有仓库 | Rancher
2.1 获取镜像清单与工具
-
访问 Rancher GitHub Releases 页面。
-
找到与您 Rancher Server 对应的版本(例如
v2.13.1)。 -
下载以下三个关键文件:
rancher-images.txt(镜像列表)rancher-save-images.sh(镜像拉取脚本)rancher-load-images.sh(镜像推送脚本)
2.2 在外网机器上拉取镜像
# 1. 去重镜像列表
sort -u rancher-images.txt -o rancher-images.txt
# 2. 赋予脚本权限并执行拉取
chmod +x rancher-save-images.sh
./rancher-save-images.sh --image-list ./rancher-images.txt
# 执行成功后,会生成 `rancher-images.tar.gz` 压缩包
执行成功后再该目录会有一个名为 rancher-images.tar.gz 的压缩包
2.3 在内网机器上导入镜像至私有仓库
将生成的 rancher-images.tar.gz 和 rancher-images.txt 上传至可访问私有仓库的内网机器。
# 1. 登录到私有镜像仓库
docker login <你的私有仓库地址:端口>
# 2. 执行推送脚本
chmod +x rancher-load-images.sh
./rancher-load-images.sh --image-list ./rancher-images.txt --registry <你的私有仓库地址:端口>
注意:确保后续所有 Kubernetes 节点都能无障碍访问此私有仓库。
三、在 Rancher 中创建 RKE2 集群
3.1 配置集群初始化信息
- 登录 Rancher UI,进入 集群管理 -> 创建 -> 自定义。
2.填写集群名称,选择 RKE2/K3s 类型和所需的 Kubernetes 版本。
3.关键步骤:配置私有仓库。 配置私有集群镜像仓库地址,在配置之前,如私有仓库需要认证,则需要,再Rancher的管理节点,创建仓库的secret。
注意此处最好不要直接通过页面创建secret,因为Rancher在创建registries.yaml的时候,如果直接从页面配置,registries.yaml文件中的auth配置会变成明文,而正常生效的配置必须是通过base64加密的,故在创建后,集群注册时,拉取镜像会报错。
#对账号密码进行加密,中间:是必须保留的
echo -n "账号:密码" | base64
cat > admin-secret.yaml << 'EOF'
apiVersion: v1
kind: Secret
metadata:
name: admin-secret
namespace: fleet-default
type: rke.cattle.io/auth-config
data:
auth: <生成的base64加密>
EOF
kubectl apply -f admin-secret.yaml
然后再配置镜像仓库的时候,选择这个secret为仓库认证的密钥,如下
3.2 注册集群节点
- 集群创建后,Rancher 会生成节点注册命令。在每台已完成 “第一部分:系统初始化” 的节点上,以 root 身份执行对应的命令(分为 Server/Etcd 和 Worker 角色)。
然后再初始化好的集群节点执行,不同节点分配不同角色即可
可选(数据目录定制) :如果希望将集群数据存储在特定数据盘(如 /data),请在执行注册命令前运行:
# 创建 /var/lib/rancher 目录
mkdir -p /var/lib/rancher
# 确保数据目录 /data/rancher 已经存在(自己的数据盘)
mkdir -p /data/rancher
#Bind mount 数据盘到 /var/lib/rancher
mount --bind /data/rancher /var/lib/rancher
#固化到 fstab(保证重启后依旧生效):
echo "/data/rancher /var/lib/rancher none bind 0 0" >> /etc/fstab
#验证挂载是否生效
mount | grep '/var/lib/rancher'
stat /var/lib/rancher /data/rancher
df -h /var/lib/rancher /data/rancher
挂载成功你应该看到:
/var/lib/rancher是目录- 底层设备和
/data/rancher一致 - 不会双倍占用磁盘
- 例如:
- 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/rlm-data 321G 12G 309G 4% /var/lib/rancher /dev/mapper/rlm-data 321G 12G 309G 4% /data
四、集群注册问题深度排查
执行注册命令后,若集群状态异常,请按以下流程排查。
4.1 检查核心服务状态
-
Master 节点:检查
rke2-server和rancher-system-agent服务。bash
journalctl -u rke2-server -f journalctl -u rancher-system-agent -f -
Worker 节点:检查
rke2-agent和rancher-system-agent服务。
4.2 配置排查工具环境
确保你的数据目录有如下工具,如果有,就按照接下来的步骤操作。
在节点上配置以下工具,以便深入检查容器运行时状态:
# 配置 crictl(RKE2 使用的 containerd socket 路径不同)
cat > /etc/crictl.yaml <<'EOF'
runtime-endpoint: unix:///run/k3s/containerd/containerd.sock
image-endpoint: unix:///run/k3s/containerd/containerd.sock
timeout: 300
EOF
# 配置 ctr (ctr主要用于无法拉取镜像的时候导入离线镜像包)
# 添加到 bashrc
cat >> ~/.bashrc <<'EOF'
# RKE2 ctr alias
alias ctr='ctr -a /run/k3s/containerd/containerd.sock'
EOF
# 立即生效
source ~/.bashrc
# 配置环境变量
echo 'export KUBECONFIG=/etc/rancher/rke2/rke2.yaml' >> ~/.bashrc
echo 'export PATH=$PATH:/var/lib/rancher/rke2/bin' >> ~/.bashrc
source ~/.bashrc
4.3 常用排查命令
# 查看 Pod 状态(无需 kubectl 即可排查)
crictl pods
# 查看已拉取的镜像
crictl images
# 查看容器状态
crictl ps -a
# 查看容器日志
crictl logs <container_id>
# 查看镜像
ctr -n k8s.io images ls | grep fleet
# 导出镜像
ctr -n k8s.io images export /tmp/fleet.tar <your repository>/rancher/fleet:v0.14.1
# 使用 ctr 导入 Docker 导出的 tar
ctr -n k8s.io images import /tmp/fleet-v0.14.1.tar
# 检查节点状态
kubectl get nodes
# 检查所有 Pod 状态
kubectl get pods -A
# 等待所有 Pod 就绪(可能需要 3-5 分钟)
watch kubectl get pods -A
# 预期输出:所有 Pod 应为 Running 或 Completed 状态
4.4 安装命令自动补全(可选)
#命令补全
apt install -y bash-completion && yum install -y bash-completion
echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc
4.5 成功状态参考
集群搭建成功后,在 Rancher UI 中:
- 集群管理 页面,该集群状态应为 Active。
- 进入集群,在 工作负载 -> Pod 页面,所有系统命名空间(如
cattle-system,kube-system,rancher-operator-system等)下的 Pod 应全部为 Running 状态。
至此,一个由 Rancher 管理、基于 RKE2 且完全运行在内网私有环境中的 Kubernetes 集群已部署完毕。