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 yet、docker 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 报错 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

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