k8s(3)rocky9.7 k8s和Rancher

本文详细记录了在多台服务器上安装和配置 Rancher v2.9.2 及其相关组件(如 K3s 和 Docker)的全过程,涵盖了安装步骤、遇到的问题及其解决方案、配置调整以及集群导入的操作,重点解决了集群重置死锁问题和 Docker 镜像拉取失败的情况。


关键流程与步骤

Rancher 安装与启动
  • 在 141 主节点 上传了 Rancher 相关镜像文件:

    • 使用命令: docker load −i /opt/rancher/rancher_v2.9.2_imagedocker load −i /opt/rancher/rancher_agent_2.9.2docker load −i /opt/rancher/rancher_v2.9.2_imagedocker load −i /opt/rancher/rancher_agent_2.9.2

  • 运行 Rancher 容器命令示例: docker run −d −−privileged −−restart=unless−stopped −−name rancher−p 8880:80 −p 8443:443 −e CATTLE_SYSTEM_CATALOG=bundled−v /var/lib/rancher:/var/lib/rancher rancher/rancher:v2.9.2docker run −d −−privileged −−restart=unless−stopped −−name rancher−p 8880:80 −p 8443:443 −e CATTLE_SYSTEM_CATALOG=bundled−v /var/lib/rancher:/var/lib/rancher rancher/rancher:v2.9.2

集群死锁问题排查与解决
  • K3s 出现集群重置(Cluster Reset)状态死锁,导致 Kubernetes API Server(127.0.0.1:6444)未启动,Rancher 报错连接拒绝(connection refused)。
  • 解决方案:
    • 删除重置标记文件: rm −f /var/lib/rancher/k3s/server/db/reset−flagrm −f /var/lib/rancher/k3s/server/db/reset−flag

    • 删除数据目录: rm −rf /var/lib/rancherrm −rf /var/lib/rancher

    • 重启 rancher 容器: docker restart rancherdocker restart rancher

    • 若无效,则需重新安装 Rancher。

    • 解决:该问题参考了社区 GitHub 解决方案:rancher/issues/44279。

#放弃141之后Rancher 再次部署与访问

  • 在 142 从节点 使用类似命令运行,端口更改为 7880 和 7443,且访问需使用 HTTPS:

    docker run −d −−privileged −−restart=unless−stopped −−name rancher−p 7880:80 −p 7443:443−e CATTLE_SYSTEM_CATALOG=bundled−v /var/lib/rancher:/var/lib/rancher rancher/rancher:v2.9.2docker run −d −−privileged −−restart=unless−stopped −−name rancher−p 7880:80 −p 7443:443−e CATTLE_SYSTEM_CATALOG=bundled−v /var/lib/rancher:/var/lib/rancher rancher/rancher:v2.9.2

  • 初始密码为:123456abcdef

集群导入与配置调整
  • 在 Rancher UI 生成导入主集群命令。
  • 需要先绕过证书检查,编辑 Deployment:
    • 执行命令: kubectl edit deployment cattle−cluster−agent −n cattle−systemkubectl edit deployment cattle−cluster−agent −n cattle−system

    • 替换标签字段:

      • 将 beta.kubernetes.io 替换为 kubernetes.io
      • 将 node-role.kubernetes.io/master 替换为 node-role.kubernetes.io/control-plane

Docker 镜像拉取问题与解决

  • 问题描述:Kubernetes 无法连接 Docker 官方仓库,导致无法拉取镜像,如 nginx:1.25.3。
  • 解决方法:更换为国内镜像源以提高下载速度和成功率。
镜像源网址 备注
https://docker.mirrors.ustc.edu.cn 中国科技大学镜像
https://hub-mirror.c.163.com 网易镜像
https://registry.docker-cn.com Docker 中国镜像
https://docker.m.daocloud.io DaoCloud 镜像
  • 配置步骤:

    • 创建配置文件:

      sudo mkdir −p /etc/dockersudo mkdir −p /etc/docker

      sudo tee /etc/docker/daemon.json <<−′EOF′{"registry−mirrors":"https://docker.mirrors.ustc.edu.cn","https://hub−mirror.c.163.com","https://registry.docker−cn.com","https://docker.m.daocloud.io"}EOFsudo tee /etc/docker/daemon.json <<−′EOF′{"registry−mirrors":"https://docker.mirrors.ustc.edu.cn","https://hub−mirror.c.163.com","https://registry.docker−cn.com","https://docker.m.daocloud.io"}EOF

    • 重载守护进程并重启 Docker 服务:

      sudo systemctl daemon−reloadsudo systemctl daemon−reload

      sudo systemctl restart dockersudo systemctl restart docker

  • 配置完成后,镜像拉取成功可用。

Rancher 导入已有 K8s 集群(141 master)

1️⃣ 导入整体流程(逻辑图文字版)

复制代码

纯文本

纯文本

复制代码
Rancher UI(142)
   │
   │ 生成 import YAML(含 cluster-agent / node-agent)
   ▼
kubectl apply(141 master)
   │
   │ 跳过自签名证书校验
   ▼
cattle-cluster-agent 启动
   │
   │ 适配 K8s v1.32 标签
   ▼
Agent 注册成功 → Rancher UI 显示 Active

2️⃣ 前置条件检查(很多人忽略)

检查项 命令 期望结果
kubectl 可用 kubectl get nodes 正常返回节点
API Server 可达 kubectl cluster-info 无报错
节点时间同步 date 所有节点时间一致
网络连通 curl https://142:7443 能访问 Rancher

⚠️ 时间不同步会导致 TLS 握手失败


3️⃣ Step-by-Step 操作详解

✅ ① Rancher UI 生成导入命令

路径

复制代码

纯文本

纯文本

复制代码
Rancher → Clusters → Add Cluster → Import Existing Cluster

填写信息

字段 值
Cluster Name k8s-master
Labels 可不填
Agent Environment 默认

📌 点击 Create​ 后,会生成一条类似命令:

复制代码

bash

bash

复制代码
kubectl apply -f https://142:7443/v3/import/abcd1234.yaml

✅ ② 在 141 master 执行导入(关键)

❗ 必须绕过证书

Rancher 使用自签名证书 ,直接 kubectl apply会失败。

✅ 正确方式

复制代码

bash

bash

复制代码
curl --insecure -sfL \
https://192.168.222.142:7443/v3/import/abcd1234.yaml \
| kubectl apply -f -

📌 参数解释:

参数 作用
--insecure 跳过证书校验
-s 静默模式
-f 失败不报错
-L 跟随重定向

✅ ③ 验证 Agent 是否已创建

复制代码

bash

bash

复制代码
kubectl get pods -n cattle-system

期望看到:

复制代码

纯文本

纯文本

复制代码
cattle-cluster-agent-xxxxx     0/1   Pending / Running
cattle-node-agent-xxxxx        1/1   Running

✅ ④ 修复 K8s v1.32 标签不兼容(重点)

🔴 问题现象
  • Agent Pod 一直 Pending

  • Rancher UI 显示:

复制代码

纯文本

纯文本

复制代码
Cluster agent is not connected
🔴 原因
项目 旧(≤1.23) 新(≥1.24)
架构标签 beta.kubernetes.io/* kubernetes.io/*
Master 标签 node-role.kubernetes.io/master node-role.kubernetes.io/control-plane

Agent YAML 仍使用旧标签​ → 调度失败


✅ 修复方法(必须做)
复制代码

bash

bash

复制代码
kubectl edit deployment cattle-cluster-agent -n cattle-system

进入 vi 后,末行模式执行:

复制代码

vim

vim

复制代码
:%s/beta.kubernetes.io/kubernetes.io/g
:%s/node-role.kubernetes.io\/master/node-role.kubernetes.io\/control-plane/g

保存退出:

复制代码

vim

vim

复制代码
:wq

📌 这会触发 Rolling Update,Agent 自动重建。


4️⃣ 状态确认(导入成功标志)

✅ Rancher UI

位置 状态
Cluster List Active
Node Count ≥1
Agent Status Connected

✅ 命令行验证(141)

复制代码

bash

bash

复制代码
kubectl get nodes
kubectl get pods -A | grep cattle

✅ 正常结果:

  • 所有节点 Ready

  • cattle-cluster-agent``Running

  • 无 ImagePullBackOff


5️⃣ 常见故障 & 精准排查表

故障现象 根因 排查命令 解决
x509 certificate error 自签名证书 curl https://142:7443 加 --insecure
Agent Pending 标签不兼容 kubectl describe pod cattle-cluster-agent 替换标签
Agent CrashLoopBackOff 版本不匹配 kubectl logs cattle-cluster-agent 升级 Rancher
UI 一直 Unavailable 网络不通 telnet 142 7443 放通防火墙
node-agent Missing DaemonSet 未调度 kubectl get ds -n cattle-system 检查污点

6️⃣ 核心原理说明(为什么一定要这样)

🔹 Rancher 导入 ≠ 接管

项目 说明
etcd 不接管
apiserver 不接管
控制面 保留原样
Agent 仅做管理通道

🔹 Agent 的作用

组件 作用
cattle-cluster-agent 集群级心跳、状态同步
cattle-node-agent 节点级操作(exec/logs)
相关推荐
YonyouHRSaaS22 分钟前
从安全、信创、运维三方面看,人力资源管理系统哪种部署方式更适合企业HR?
运维·安全·hr系统·人力资源管理系统·hr saas·人事管理系统
倔强的石头1061 小时前
【Linux指南】动静态库系列(十二):库工程发布与错误排查:从能跑到可维护
linux·运维·服务器
wdfk_prog1 小时前
LWIP教程 03:从 `low_level_input()` 到 `pbuf_free()`——`pbuf` 的数据视图、Chain 与引用计数
运维·网络·笔记·学习
掉进电商坑三年没爬出来的东叔1 小时前
云服务器搭建个人网站实战:从零到公网访问,含域名HTTPS
运维·服务器·https
IT大白鼠1 小时前
彭大帅的AI运维助手跨出 Linux:全面接管 Windows 服务器
运维·服务器·人工智能
reasonsummer1 小时前
【办公类-131-05】20261007中2班周计划制作(原资料Word单元格不统一 失败)
运维·服务器
Mikko72 小时前
JVM 线上排查实战(六):JFR 怎么用?JDK 8 要不要加 UnlockCommercialFeatures、jfr 命令在哪、录的文件为什么读不了
java·运维·jvm·后端
蚰蜒螟2 小时前
一次挂载的完整旅程:Linux 内核 VFS 到 ext4 的调用链剖析
linux·运维·服务器
害人终害己2 小时前
Redis 日志:AUTH 认证信息
运维·服务器
天蓝蓝的本我2 小时前
linux本地部署Qwen3.8 27B
linux·运维·excel