You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vagrant VM关机重启后Tiller Pod陷入CrashLoopBackOff故障求助

Hey,我帮你梳理下这个Tiller重启后崩溃的问题,结合你给出的日志细节,咱们一步步来排查解决:

问题核心分析

从你提供的Pod描述和事件日志里,能抓到几个关键线索:

  • Tiller的Liveness和Readiness探针全部超时(日志里的request canceled (Client.Timeout exceeded while awaiting headers))
  • 首次vagrant up一切正常,但虚拟机关机重启后就出问题
  • 还出现了Failed create pod sandbox的错误,这大概率和你用的Weave Net网络插件重启后的状态有关
逐步排查步骤

1. 先检查Weave Net网络插件状态

Pod sandbox创建失败通常和CNI网络插件的运行状态直接相关,先确认Weave的Pod是否正常运行:

kubectl get pods -n kube-system -l name=weave-net

如果看到Weave Pod有重启记录或者状态异常,赶紧查看它的日志找问题:

kubectl logs <你的weave-pod名称> -n kube-system -c weave

虚拟机重启后,Weave有时候会因为网络环境变化无法正常恢复,导致后续启动的Pod(比如Tiller)没法获取正常的网络栈,探针自然连不上。

2. 查看Tiller崩溃前的具体日志

探针超时只是表面现象,咱们得看看Tiller容器启动时到底出了啥问题,用这个命令查看上一次崩溃的容器日志:

kubectl logs tiller-deploy-78f96d6f9-cswbm -n kube-system --previous

说不定能找到Tiller启动失败的具体原因,比如无法连接K8s API Server之类的。

3. 验证K8s API Server的可达性

Tiller完全依赖K8s API Server工作,重启虚拟机后API Server可能还没完全就绪,先在虚拟机里直接测试:

curl -k https://localhost:6443/healthz

如果返回ok说明API Server正常,否则得去检查kube-apiserver的Pod状态和日志。

可行的解决方法

方法1:重启Weave Net网络插件

如果Weave状态确实有问题,先删掉Weave的Pod让它重新创建:

kubectl delete pods -n kube-system -l name=weave-net

等Weave Pod恢复到Running状态后,再删掉Tiller的Pod让它重启:

kubectl delete pod tiller-deploy-78f96d6f9-cswbm -n kube-system

很多时候网络插件恢复后,Tiller就能正常启动了。

方法2:调整Tiller的探针超时配置

默认的探针超时1秒真的太短了,虚拟机重启后系统资源可能比较紧张,Tiller启动慢就会被探针判定为不健康。咱们修改下Tiller的Deployment配置:

kubectl edit deployment tiller-deploy -n kube-system

找到livenessProbe和readinessProbe这两段,把timeoutSeconds改成5,initialDelaySeconds改成10(给Tiller足够的启动缓冲时间):

livenessProbe:
  httpGet:
    path: /liveness
    port: 44135
  initialDelaySeconds: 10
  timeoutSeconds: 5
  periodSeconds: 10
  successThreshold: 1
  failureThreshold: 3
readinessProbe:
  httpGet:
    path: /readiness
    port: 44135
  initialDelaySeconds: 10
  timeoutSeconds: 5
  periodSeconds: 10
  successThreshold: 1
  failureThreshold: 3

保存退出后,Deployment会自动更新Tiller Pod,应该就能避免探针超时的问题了。

方法3:重新安装Tiller

如果上面的方法都不管用,那就彻底重置Tiller再重新安装:

helm reset
# 如果之前没创建过tiller的服务账号,先执行下面两句
kubectl create serviceaccount tiller -n kube-system
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
# 重新初始化Tiller
helm init --service-account tiller --upgrade

方法4:给Vagrant虚拟机加资源

虚拟机内存或CPU不够的话,重启后系统负载高,Tiller启动会特别慢。你可以修改Vagrantfile,给虚拟机分配更多资源:

config.vm.provider "virtualbox" do |v|
  v.memory = 4096 # 改成4G内存
  v.cpus = 2 # 改成2核CPU
end

然后执行vagrant reload重启虚拟机,资源充足后Tiller启动会顺畅很多。

总结

这个问题大概率是虚拟机重启后网络插件未正常恢复,或者Tiller的探针配置太苛刻导致的。优先从Weave网络插件排查,再调整探针参数,基本就能解决啦。

内容的提问来源于stack exchange,提问作者Kostas Demiris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:45:35