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)
相关推荐
码云骑士1 小时前
PowerShell自动化运维:批量调用图吧工具箱实现硬件检测与报告生成
运维·自动化
老H科研技术1 小时前
第 02 篇:5 分钟搭建第一个 MCP 服务器
大数据·运维·服务器·人工智能·学习·aigc·ai编程
IT策士1 小时前
第 43 篇 k8s之集群网络策略:NetworkPolicy 入门
网络·容器·kubernetes
流浪0011 小时前
Linux篇(十):取代命令行 GDB?CGDB 可视化调试全解析
linux·运维·服务器
日取其半万世不竭1 小时前
Jellyfin 卡顿是服务器不够吗?先分清转码和直播放
运维·服务器
键盘上的猫头鹰1 小时前
【Linux 基础教程(五)】磁盘管理、挂载硬盘、系统状态检测与软件安装(RPM/YUM)
linux·运维·服务器
杨某不才1 小时前
Linux服务器离线安装docker
linux·服务器·docker
MyFreeIT1 小时前
Docker & MySQL Manual
mysql·docker·容器
深圳恒讯1 小时前
印度服务器速度怎么样?国内访问延迟实测与线路解析
运维·服务器