Rancher 运维与故障处理

Rancher Server/RKE 集群跑起来后机器重启打不开、镜像拉取超时、时间回拨、api-server/webhook 报错、证书认证过期等故障的处理方法

02-部署安装 / 部署方式
rancher故障k3sregistries.yaml镜像拉取超时docker hubmirrorhelm-operation时间回拨time skewkube-apiserverwebhookvalidatingwebhookconfigurations证书过期dynamic-cert.jsonk3s-servingcanal

Rancher 运维与故障处理

机器重启后 Rancher 无法打开

docker exec -it myrancher bash
kubectl get pod -A   # 看 k3s 容器是否都正常,如果都正常,可以打开 rancher 平台

如果报错镜像拉取失败,可以 describe 查看详情。

如果报错类似:

Failed to pull image "rancher/shell:v0.3.1": rpc error: code = DeadlineExceeded
desc = failed to pull and unpack image "docker.io/rancher/shell:v0.3.1": ...
dial tcp 108.160.170.39:443: i/o timeout

说明 k3s 内部 containerd 访问 Docker Hub 超时。修复方式(配置镜像加速):

sudo docker exec myrancher sh -lc 'set -e
cat > /etc/rancher/k3s/registries.yaml <<EOF
mirrors:
  docker.io:
    endpoint:
      - "https://docker.m.daocloud.io"
      - "https://docker.1ms.run"
      - "https://hub.rat.dev"
configs:
  "docker.m.daocloud.io":
    tls:
      insecure_skip_verify: true
  "docker.1ms.run":
    tls:
      insecure_skip_verify: true
  "hub.rat.dev":
    tls:
      insecure_skip_verify: true
EOF
'

sudo docker restart myrancher

sudo docker exec myrancher kubectl get node
sudo docker exec myrancher kubectl get pod -A

清理历史失败的 helm-operation Pod

镜像拉取修复后,之前失败的 helm-operation-* Pod 会残留为 Error,可以清理:

sudo docker exec myrancher sh -lc \
  'kubectl get pod -n cattle-system --no-headers |
   awk '"'"'/^helm-operation-/ && $3 == "Error" {print $1}'"'"' |
   xargs -r kubectl delete pod -n cattle-system'

大量 "Up Less than a second"(时间回拨)

如果重启后 kube-apiserver 报 service account token is not valid yetdocker ps 控制面容器显示 Up Less than a second、大量 Pod 异常,这是时间回拨问题,参考《故障恢复 - 集群时间回拨》

api-server 报错问题

# 打开 rancher 平台查看 k8s 集群报错,unavailable 可能是 webhook 失效了
docker ps -a | grep webhook   # 找到自己集群 k8s webhook
docker restart webhookxxxxxx
# 重启完 webhook 还要等几分钟,因为 webhook 要创建证书

api-server 报错 1

api-server 报错 2

api-server 报错 webhook 不可用,会导致 Kubernetes Service 的 Endpoint 丢失。典型日志:

authentication.go:73] "Unable to authenticate the request"
err="[invalid bearer token, service account token has expired,
Post http://127.0.0.1:6440/v1/authenticate?timeout=30s: dial tcp
127.0.0.1:6440: connect: connection refused]"

然后就是令牌失效。这个令牌连接的是 rancher agent 节点上 webhook 的令牌:

docker ps -a | grep webhook
docker restart 集群webhook
kubectl get validatingwebhookconfigurations,mutatingwebhookconfigurations

webhook 配置

k3s 内部容器需要先稳定打开平台;创建这些容器前,operator 先要成功启动。

配置认证过期问题

Rancher Server 的证书有效期是一年,一年后会报证书过期。可以通过下面的方式创建新证书。

# 2.6.2 版本的解决方法
sudo docker exec -it <container_id> sh -c "rm /var/lib/rancher/k3s/server/tls/dynamic-cert.json"
sudo docker exec -it <container_id> k3s kubectl --insecure-skip-tls-verify=true delete secret -n kube-system k3s-serving
sudo docker restart <container_id>
# rancher server 修复后,重启每台机器的 canal 网络 pod

# 之前版本的解决方法
docker stop $RANCHER_CONTAINER_NAME
docker start $RANCHER_CONTAINER_NAME
docker exec -it $RANCHER_CONTAINER_NAME sh -c "rm /var/lib/rancher/k3s/server/tls/dynamic-cert.json"
docker logs --tail 3 $RANCHER_CONTAINER_NAME
# 会出现类似:
# [INFO] Waiting for server to become available: Get https://localhost:6443/version?timeout=30s: x509: certificate signed by unknown authority
docker stop $RANCHER_CONTAINER_NAME
docker start $RANCHER_CONTAINER_NAME
# rancher server 修复后,重启每台机器的 canal 网络 pod
最后更新 2026-06-30完整文档以官方仓库为准:GitHub Wiki