Rancher 线上级RKE2 集群搭建与深度排错指南

0 阅读2分钟

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
fiecho "设置主机名为: $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 获取镜像清单与工具

  1. 访问 Rancher GitHub Releases 页面。

  2. 找到与您 Rancher Server 对应的版本(例如 v2.13.1)。

  3. 下载以下三个关键文件:

    • rancher-images.txt (镜像列表)
    • rancher-save-images.sh (镜像拉取脚本)
    • rancher-load-images.sh (镜像推送脚本)

image-20260205173811162 image-20260205175031622

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.gzrancher-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 配置集群初始化信息

  1. 登录 Rancher UI,进入 集群管理 -> 创建 -> 自定义

image-20260205181042557

image-20260205181102846

image-20260205181115429

2.填写集群名称,选择 RKE2/K3s 类型和所需的 Kubernetes 版本。

image-20260205181227729

3.关键步骤:配置私有仓库。 配置私有集群镜像仓库地址,在配置之前,如私有仓库需要认证,则需要,再Rancher的管理节点,创建仓库的secret。

注意此处最好不要直接通过页面创建secret,因为Rancher在创建registries.yaml的时候,如果直接从页面配置,registries.yaml文件中的auth配置会变成明文,而正常生效的配置必须是通过base64加密的,故在创建后,集群注册时,拉取镜像会报错。

#对账号密码进行加密,中间:是必须保留的
echo -n "账号:密码" | base64cat > 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为仓库认证的密钥,如下

image-20260205184640043

image-20260205184914496

image-20260205185100532

3.2 注册集群节点

  1. 集群创建后,Rancher 会生成节点注册命令。在每台已完成 “第一部分:系统初始化” 的节点上,以 root 身份执行对应的命令(分为 Server/Etcd 和 Worker 角色)。

image-20260205185323236

然后再初始化好的集群节点执行,不同节点分配不同角色即可

可选(数据目录定制) :如果希望将集群数据存储在特定数据盘(如 /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-serverrancher-system-agent 服务。

    bash

    journalctl -u rke2-server -f
    journalctl -u rancher-system-agent -f
    
  • Worker 节点:检查 rke2-agentrancher-system-agent 服务。

4.2 配置排查工具环境

确保你的数据目录有如下工具,如果有,就按照接下来的步骤操作。

image-20260205190407786

在节点上配置以下工具,以便深入检查容器运行时状态:

# 配置 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-systemkube-systemrancher-operator-system 等)下的 Pod 应全部为 Running 状态。

至此,一个由 Rancher 管理、基于 RKE2 且完全运行在内网私有环境中的 Kubernetes 集群已部署完毕。

image-20260205190813076

image-20260205190923412