李成笔记网

专注域名、站长SEO知识分享与实战技巧

容器老是重启?99% 是这几个 K8s 设置没配好!

“咋回事,我这个服务老是自己重启?”
“明明没改代码,Pod 一小时重启了十次!”
“监控告警了,说服务挂了,其实还在转圈圈重启…”

你有没有遇到过这些让人抓狂的问题?
别急!本文将一次性帮你搞懂 Kubernetes 的重启机制、重启原因、排查方法和优化策略,让你的服务跑得稳、告警少、老板放心!


一、K8s 中的重启策略:你可能从未真正了解过

Kubernetes 为 Pod 提供了三种重启策略(RestartPolicy),但只有两种你经常用到

重启策略

适用场景

默认值

Always

所有 Deployments、ReplicaSets

默认值

OnFailure

Job 场景:失败才重启

Never

Pod 失败后直接终止不重启

重点:你只要用 Deployment,就一定是 Always。


二、哪些情况下 Kubernetes 会触发重启?

Kubernetes 并不会随便重启容器,只有下面几种情况下才会:

1. 容器运行异常退出(非 0 状态码)

Exit Code: 1
Reason: Error

典型原因:服务抛异常、panic、缺少依赖、环境变量缺失。

2. 被存活探针(liveness probe)判定为“死亡”

Liveness probe failed: HTTP probe failed with statuscode: 500

探针失败次数超过 failureThreshold,Kubelet 会重启容器。

3. 超过内存限制被 OOMKilled

Reason: OOMKilled
Exit Code: 137

内存不够直接 kill 重启! K8s 对内存是零容忍的!

4. 镜像拉取失败也会触发重启(CrashLoopBackOff)

Reason: ImagePullBackOff

虽然不是容器本身 crash,但依然导致 Pod 重启失败。


三、CrashLoopBackOff 是什么?为啥总是你?

这是一种常见且“烦人”的状态,意思是:

容器一直崩 -> K8s 试图重启 -> 又崩 -> 再试 -> 越试越慢!

你会看到这样的状态日志:

Back-off restarting failed container

Kubernetes 会采用指数退避(backoff)策略延迟重启,从 10 秒 20 秒 40 秒 … 最长 5 分钟。

所以 别等着它自动好,得主动排查!


四、实战排查容器频繁重启的 3 个关键命令

1 查看重启次数

kubectl get pod

留意 RESTARTS 列,一小时内几十次就很危险。

2 看容器退出原因

kubectl describe pod <pod-name>

关注 Last State 和 Events 区域。

3 看日志排错

kubectl logs <pod-name> --previous

别忘了加 --previous,否则只能看到刚启动那次的日志!


五、如何避免重启?这里是全网最全优化建议!

正确配置资源限制

resources:
  requests:
    memory: "512Mi"
  limits:
    memory: "1Gi"

防止 OOM,记得查看真实内存占用,别拍脑袋写!


谨慎使用 Liveness 探针

  • 新手建议先关闭 liveness,仅用 readiness。
  • 或设置较宽容的失败阈值:
livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 20
  periodSeconds: 10
  failureThreshold: 5

服务启动慢?用 startupProbe!

startupProbe:
  httpGet:
    path: /start
    port: 8080
  failureThreshold: 30
  periodSeconds: 10

告诉 K8s:“我启动慢,但别急着判我死”!


避免写死导致崩溃的错误配置

如环境变量没配置导致空指针,DB 连接失败直接 panic 等。

加入容错机制或降级处理,别让小问题变重启风暴!


设置重启上限告警,别让问题无限扩大

结合监控平台(如 Prometheus + Alertmanager)设置告警阈值:

rate(container_restart_count[5m]) > 2

5 分钟内重启超过 2 次就告警,让问题早暴露!


六、结语:重启 ≠ 恢复,频繁重启 = 服务不稳

Kubernetes 给了我们“自动重启”的机制,但这不是“我不管”的借口。

服务频繁重启背后,一定是配置、代码或资源出了问题。

学会正确地识别问题、排查问题、优化问题,才是真正的 DevOps 能力。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言