0

0

十一、可观测性——你的应用健康吗

雪夜

雪夜

发布时间:2025-07-19 10:18:04

|

316人浏览过

|

来源于php中文网

原创

在将应用迁移到 kubernetes(k8s)后,如何确保应用的健康和稳定性是一个关键问题。以下是一些方法和策略,以提高应用的可观测性和可恢复能力。

提高应用的可观测性

为了确保应用的健康和稳定性,提高应用的可观测性至关重要。这包括监控资源使用情况、应用自身的健康状态以及实时日志,以方便进行问题的诊断和分析。

提高应用的可恢复能力

当应用出现问题时,首先需要降低影响范围。例如,当 Pod 不可用时,Service 会在负载均衡中移除该 Pod。理想情况下,K8S 的自愈机制可以进行完整的恢复,例如在 Node 故障时,K8S 会将该 Node 上的 Pod 迁移到其他健康的 Node 上。

应用健康状态探测

K8S 提供了两种主要的探测机制来检查应用的健康状态:

  • Readiness Probe(就绪探针):用于判断 Pod 是否就绪。只有在 Pod 就绪时,Service 才会将流量分发给该 Pod。适用于启动后无法立即对外提供服务的应用。

  • Liveness Probe(存活探针):用于判断 Pod 是否存活。如果 Pod 处于非存活状态,Kubelet 会杀掉该容器,并根据重启策略(例如配置为 always)重新拉起 Pod。适用于支持重新拉起的应用。

探测方式和使用

Liveness 和 Readiness 探针支持三种不同的探测方式:

  • httpGet:通过发送 HTTP GET 请求进行判断。当返回码在 200-399 之间时,表明应用是健康的。可能遇到鉴权问题,返回 401。

    十一、可观测性——你的应用健康吗

  • Exec:通过在容器中执行命令来判断服务是否正常。当命令返回 0 时,表明容器是健康的。

    十一、可观测性——你的应用健康吗

  • tcpSocket:通过探测容器的 IP 和 Port 进行 TCP 健康检查。如果 TCP 连接能够正常建立,表明容器是健康的。适用于 Web 应用。

    十一、可观测性——你的应用健康吗

相关 Global 参数

  • initialDelaySeconds:Pod 启动后延迟多久才开始进行检查。
  • periodSeconds:检测的时间间隔,默认是 10 秒。
  • timeoutSeconds:检测的超时时间,超时即视为失败状态。
  • successThreshold:从探测失败到成功所需的阈值次数,默认是 1 次。
  • failureThreshold:探测失败的重试次数,默认是 3 次,连续 3 次失败则认为 Pod 处于失败状态。

探测结果

探测结果主要分为三种:

  • success:通过健康检查。
  • Failure:未通过健康检查,Readiness 会将 Pod 从 Service 中移除,Liveness 会重新拉起或删除 Pod。
  • Unknown:探测机制未完整执行,可能由于超时或脚本未及时返回,探针不会采取任何操作,等待下次检查。

应用故障排查

K8S 的状态机制通过 YAML 文件定义期望状态,执行过程中由各种 Controller 负责状态转换。不同状态的转换会在 K8s 对象上留下 Status 或 Conditions 字段。

十一、可观测性——你的应用健康吗

Lyrics Generator
Lyrics Generator

免费人工智能歌词生成器和人工智能歌曲作家

下载

状态转换会产生事件,分为 Normal 和 Warning 两种。

十一、可观测性——你的应用健康吗

常见应用异常

  • Pod 停留在 Pending:表示调度器未介入。通过 kubectl describe pod 查看事件,可能是由于资源不足、端口占用或 Node Selector 导致 Pod 无法调度。

  • Pod 停留在 Waiting:通常表示镜像未正常拉取,可能是私有镜像未配置 Secret、镜像地址不存在或公网镜像拉取失败。

  • Pod 不断被拉起且看到 Crashing:表示 Pod 已调度但启动失败,此时应关注应用自身状态,并查看 Pod 日志。

  • Pod 处于 Running 但未正常工作:可能由于配置错误,导致 YAML 下发后部分未生效。可以通过 kubectl apply -f pod.yaml --validate 验证 YAML,并检查端口和探针配置。

  • Service 无法正常工作:通常是使用问题。Service 与 Pod 通过 Selector 匹配,若 Label 配置错误,Service 无法找到 Endpoint,导致无法提供服务。检查 Service 是否有 Endpoint 以及 Endpoint 是否正常工作。

应用远程调试

  • Service 远程调试:使用开源组件 Telepresence,将本地应用代理到远程集群的 Service 上。

  • 暴露集群服务:通过 kubectl port-forward 将远程应用映射到本地端口,访问本地端口即可访问远程服务。

    kubectl port-forward svc/app -n app-namespace
  • 开源调试工具 - kubectl-debug:依赖 Linux namespace 的方式,附加到 Pod 的 namespace 中执行调试操作,查看 hostname、进程、netstat 等信息。

问题解答

  • 重启策略为 always 的场景:应用处于 failed 状态时,再拉起一次可能仍会失败,但应用通常不会立即失败,在特定情况下才会挂,重新拉起可以撑一阵,保留日志供后续排查。

  • K8S 的弹性扩展:详细了解和使用 Kubernetes 中 Pod 的弹性伸缩机制。

通过以上策略和工具,可以有效地保障在 K8S 环境中应用的健康与稳定性。

相关专题

更多
Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务
Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务

Golang云原生微服务Kubernetes (K8s) 是指 使用 Go 语言(Golang)编写的云原生微服务,并利用 Kubernetes 平台进行容器化部署、自动化管理、弹性伸缩和高效编排的一整套现代应用架构方案。

24

2025.12.22

Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务
Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务

Golang云原生微服务Kubernetes (K8s) 是指 使用 Go 语言(Golang)编写的云原生微服务,并利用 Kubernetes 平台进行容器化部署、自动化管理、弹性伸缩和高效编排的一整套现代应用架构方案。

24

2025.12.22

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

357

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

410

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

1866

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1986

2024.08.16

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1349

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

702

2023.06.29

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

68

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 8.8万人学习

【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2万人学习

Node.js-前端工程化必学
Node.js-前端工程化必学

共19课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号