首页 > 运维 > linux运维 > 正文

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

雪夜
发布: 2025-07-19 10:18:04
原创
299人浏览过

在将应用迁移到 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 字段。

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

AppMall应用商店
AppMall应用商店

AI应用商店,提供即时交付、按需付费的人工智能应用服务

AppMall应用商店 56
查看详情 AppMall应用商店

状态转换会产生事件,分为 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 将远程应用映射到本地端口,访问本地端口即可访问远程服务。

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

问题解答

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

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

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

以上就是十一、可观测性——你的应用健康吗的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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