Docker部署的Rancher无法重启----重建 Rancher Server 并修复 TLS
文章目录
- 1、原因分析
- 2、解决方案思路
- 3、具体操作
- 3.1、停止并清理旧 Rancher 容器
- 3.2、清理残留 namespace 和 webhook
- 3.3、创建 TLS 证书(自签名示例)
- 3.4、运行新的 Rancher Docker 容器
- 3.5、导入 Kubernetes 集群
- 4、Rancher 部署的组件--Cluster Agent
1、原因分析
-
Rancher Docker 部署在单节点。
-
Kubernetes 是本地 kubeadm 安装。
之前强制删除过 cattle-system,可能导致:
Rancher 系统 chart(rancher-webhook)没办法正常部署。
原来的证书、CA 文件可能和新的环境不匹配 → TLS handshake 失败。
所以同时出现:
-
chart 找不到
-
TLS 证书错误
2、解决方案思路
-
清理旧数据 + 重装 Rancher(保留 kubeadm 集群)。
-
清理残留的 cattle-system
-
删除 stuck namespace 和 webhook 配置,保证系统 chart 可以重新部署。
-
重新导入集群
-
导入前确保 Rancher Server 可访问,TLS 证书正确。
-
检查 TLS 证书
-
对 Docker Rancher Server,可以:
docker logs rancher
看证书加载是否报错
整体流程如下:
#清理旧 cattle-system namespace + webhook。#重建 Rancher Server Docker。#修复 TLS 证书。#导入 Kubernetes 集群。
3、具体操作
3.1、停止并清理旧 Rancher 容器
# 停止旧容器
docker stop rancher# 删除旧容器
docker rm rancher# 可选:清理旧数据(如果想完全重装 Rancher)
# 注意:删除后会清除所有 Rancher 配置,需要重新导入集群
# 如果你想保留数据,可跳过
rm -rf /opt/rancher/*
3.2、清理残留 namespace 和 webhook
# 删除 stuck namespace
kubectl get ns | grep cattle-system# 如果仍在 Terminating,强制清理 finalizer
kubectl get ns cattle-system -o json | jq '.spec.finalizers=[]' | \
kubectl replace --raw "/api/v1/namespaces/cattle-system/finalize" -f -# 删除残留 Rancher webhook 配置
kubectl get validatingwebhookconfigurations | grep cattle
kubectl delete validatingwebhookconfiguration <webhook-name>kubectl get mutatingwebhookconfigurations | grep cattle
kubectl delete mutatingwebhookconfiguration <webhook-name>
3.3、创建 TLS 证书(自签名示例)
Rancher Docker 容器可以使用自签名证书,也可以用 Let’s Encrypt 或现有 CA。
自签名示例:
mkdir -p /opt/rancher/certs# 生成 CA
openssl genrsa -out /opt/rancher/certs/ca.key 4096
openssl req -x509 -new -nodes -key /opt/rancher/certs/ca.key -subj "/CN=rancher-ca" -days 3650 -out /opt/rancher/certs/ca.crt# 生成服务证书
openssl genrsa -out /opt/rancher/certs/rancher.key 4096
openssl req -new -key /opt/rancher/certs/rancher.key -subj "/CN=192.168.31.203" -out /opt/rancher/certs/rancher.csropenssl x509 -req -in /opt/rancher/certs/rancher.csr -CA /opt/rancher/certs/ca.crt -CAkey /opt/rancher/certs/ca.key -CAcreateserial -out /opt/rancher/certs/rancher.crt -days 365
-
/CN 或 -subj 中使用 Rancher Server 的访问 IP 或域名。
-
/opt/rancher/certs/rancher.crt + rancher.key 将被 Docker 容器挂载。
3.4、运行新的 Rancher Docker 容器
docker run -d \--name rancher \--restart=unless-stopped \--privileged \-p 80:80 -p 443:443 \-v /opt/rancher:/var/lib/rancher \-v /opt/rancher/certs:/etc/rancher/ssl \rancher/rancher:latest
容器启动后,Rancher 会自动使用挂载的 TLS 证书。
日志查看:
docker logs -f rancher
确认没有 TLS handshake 错误。
3.5、导入 Kubernetes 集群
打开 Rancher UI → 集群管理 → 导入集群 → 复制 import YAML。
在 K8s master 上执行:
curl --insecure -sfL https://192.168.31.203/v3/import/8rgtrrxl2vjrpfk7r4xlkxhgk24gx7pngtnfsjwgdvkjn9w7gpt4rt_c-7v2xw.yaml | kubectl apply -f -
cattle-system namespace 会被正常创建。
Rancher cluster-agent 将自动部署。
kubectl get pods -n cattle-system
注意事项
如果使用自签名证书,访问 Rancher UI 时需要在浏览器或 kubectl 上信任 ca.crt。
不要在 namespace 卡住时导入集群,否则 webhook 会阻塞。
强烈建议 先清理残留 webhook + Terminating namespace
4、Rancher 部署的组件–Cluster Agent
NAME READY STATUS RESTARTS AGE
cattle-cluster-agent-68f49f5594-fmd2m 1/1 Running 0 118m
cattle-cluster-agent-68f49f5594-z7n8j 1/1 Running 0 119m
rancher-webhook-6d67cf7c8c-g8j7z 1/1 Running 0 117m
上述Pod不是 K8s 系统自带的 Pod。
它们是 Rancher 部署的组件,属于 Rancher 的 Cluster Agent。
他们的作用:
-
当你在 Rancher UI 导入或创建 K8s 集群 时,Rancher 会在目标集群里部署两个重要的 Agent:
-
cattle-cluster-agent → 用来和 Rancher Server 通信,把集群状态上报给 Rancher UI,并接收指令。
-
cattle-node-agent → 部署在每个节点上,执行一些操作,比如拉取镜像、管理 workload。
换句话说: 这些 Pod 是 Rancher 和你这个 K8s 集群之间的“桥梁”。
“人的一生会经历很多痛苦,但回头想想,都是传奇”。