ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Kubernetes 集群内网络延迟 SLI/SLO 深度解读:基于 prober 探针与 null service 的端到端度量方案

Kubernetes 集群内网络延迟 SLI/SLO 深度解读:基于 prober 探针与 null service 的端到端度量方案 Kubernetes 集群内网络延迟 SLI/SLO 深度解读基于 prober 探针与 null service 的端到端度量方案【免费下载链接】communityKubernetes Community Documentation项目地址: https://gitcode.com/GitHub_Trending/com/community集群内网络延迟是影响微服务架构下应用响应速度的核心指标之一。本文以 Kubernetes SIG Scalability 在 network_latency.md 中定义的集群内网络延迟 SLI/SLO 为骨架结合 SLI/SLO 总纲、network programming latency、dns latency 等姊妹文档系统讲解这套度量方案的指标口径、SLO 承诺边界、探针prober架构设计以及落地前提。读完本文你将理解 Kubernetes 官方社区如何定义集群内网络到底快不快、为什么采用单探针 Pod 每秒 ping null service这一看似简单的度量方式以及在实际集群中复现该指标需要满足哪些前置条件。背景为什么需要集群内网络延迟的正式度量Kubernetes 社区在 slos.md 中明确了一个基本立场作为 Kubernetes 用户或集群运维者大家理所当然地期待系统在可扩展性和性能方面有明确承诺。SIG Scalability 的职责之一就是把这些承诺组织成精确、可度量的SLI服务等级指标Service Level Indicator与SLO服务等级目标Service Level Objective。要理解网络延迟 SLI 的定位需要先把握该框架的四个硬性要求精确且定义清晰用户与实现方对我们承诺什么必须有完全一致的理解彼此自洽所有 SLI/SLO 使用相同的术语与概念体系面向用户SLO 必须是用户真正关心的东西且不依赖对系统内部机制的晦涩认知可测试理想情况下 SLI/SLO 能在所有运行中的集群里被度量。围绕这些要求社区采用你承诺我承诺you promise, we promise的框架只要用户承诺正确配置集群、合理使用扩展特性、将集群负载控制在 scalability thresholds 规定的推荐范围内社区就承诺所有 SLO 得到满足。集群内网络延迟 SLI 正是这套承诺体系中面向网络快不快的关键一环。SLI/SLO 定义一行表格背后的完整口径network_latency.md 用一张表格给出了指标的核心定义当前状态标记为WIP进行中状态SLISLOWIP从单个 prober 探针 Pod 出发的集群内网络延迟度量为该 Pod 每秒向 null service 发起 ping 的延迟取最近 5 分钟的 99 百分位在默认 Kubernetes 安装且节点间 RTT往返时延 Y 的前提下所有 prober 探针 Pod 的 99 百分位再聚合后每集群日per cluster-day的 99 百分位 X对该定义逐项拆解可以提炼出五个关键口径度量主体是单个 prober PodSLI 层面只度量探针 Pod 自己的视角用户关心的全部 Pod 聚合只在 SLO 层面完成触发方式是每秒一次 ping以固定每秒 1 次的频率向目标发起网络探测天然形成高密度时间序列探测目标是 null service一个不承载真实业务流量的占位 Service作用是提供稳定、无应用干扰的连通性端点统计口径是最近 5 分钟的 99 百分位先按 5 分钟滑动窗口压缩原始采样SLO 聚合路径是先每 Pod 取 99 百分位再跨全部 Pod 取 99 百分位最终以每集群日为单位判定是否达标。值得注意的是SLO 中的阈值X 与 Y 目前仍是占位符Y 是节点间底层 RTT 的上限要求X 是最终延迟目标。由于该 SLI 仍处于 WIP 状态两个数值尚未定稿这是阅读本定义时必须明确的现状——文档承诺的是度量方法论已经成型而具体数值仍在论证中。用户故事指标存在的意义文档给出了该 SLI 要回应的真实诉求作为原生vanillaKubernetes 的用户我希望对我的 HTTP 请求到达某个 Kubernetes Service 端点有多快有一个可预期的保证。这句用户故事揭示了该指标的定位它不度量 API Server、不度量调度器而是度量从 Pod 视角看集群内一次网络请求到达 Service 后端的端到端耗时。这正是微服务世界里每个请求都要穿越的路径。设计动机为什么是ping null service而非其他方案在 network_latency.md 的 Other notes 一节社区详细说明了选择该 SLI 形态的三个理由这些理由本身就是一套可复用的度量方案设计方法论理由一代表用户视角的端到端流程该 SLI 并不仅仅度量物理网络的 RTT它天然覆盖了集群内网络编程机制例如 kube-proxy 对 iptables 的编程所带来的额外延迟。一个请求从 Pod 发出、经过 Service VIP、命中后端 Endpoints 的全过程恰好就是用户请求的真实路径。文档同时记录了一个重要的 TODO社区曾考虑把DNS 解析延迟也并入该指标但最终决定不混在一起度量以避免多个变量互相干扰不过从长期看DNS 环节与网络路径最终应该被联合评估。这一拆分思路与 dns_latency.md 中独立定义集群内 DNS 解析延迟 SLI的做法完全一致。理由二在所有运行中的集群里都易于度量这是方案最务实的一点。要度量集群中所有 Pod 的请求延迟需要给每个 Pod 注入 sidecar 之类的额外仪器这种开销在很多场景下不可接受而部署一组独立的 prober 探针 Pod 成本极低、侵入性为零可以运行在任何允许部署 Pod 的集群上。度量成本直接决定了 SLI 的可测试性——这正是总纲中 SLI 必须可测试这一要求的落地。理由三与应用无关该指标不依赖任何特定应用的行为特征因此它描述的是集群网络基础设施本身的性能而不是某个工作负载的性能。这也保证了后续为它设置统一的 SLO 在语义上是自洽的。边界与注意点Caveats承诺的免责条款文档用一节 Caveats 明确划定了该指标的承诺边界这些边界对实际部署和理解 SLO 都至关重要探针视角与全 Pod 视角的等价性SLI 定义在单个 prober Pod上而用户真正关心的是全部 Pod 的聚合表现——文档承认这两者存在差异但认为在 SLO 层面对所有 prober 的 99 百分位再聚合后能提供非常接近的保证同时把测量成本降到最低。这是一种以点带面的工程取舍。跨拓扑的 RTT 差异如果节点分布在不同的拓扑域例如 GCP 的不同 zone节点间的 RTT 可能差异显著。而 Kubernetes 当时尚未原生支持拓扑感知的服务路由topology-aware service routing因此文档明确承认当集群节点横跨多个拓扑域时ping 不同端点得到的结果可能有明显差异。这意味着 SLO 中的RTT Y前提本质上要求集群满足一定的网络同质性。为什么需要一组专用探针 Pod探针本身的报告逻辑非常简单、资源开销可忽略但问题在于集群里没有任何现成组件可以挂载这项功能——例如 kube-proxy 运行在宿主机网络命名空间host network中并不适合作为集群内网络延迟的测量载体。因此社区决定创建一组专用的 prober 探针 Pod其数量与集群规模成比例集群越大、探针越多。这一设计与 dns_latency.md 中的探针方案完全同构两个 SLI 共享同一套探针基础设施。null service需要管理员自建默认集群中并不存在所谓的 null service——为了让 SLI 在真实集群中可度量集群管理员需要自行部署一个而在自动化测试中社区的做法是直接在 prober 探针 Pod 之上创建一个 Service让探针 Pod 兼任 Service 后端。这意味着该指标的两大基础设施探针 null service都是测试专用的与业务负载完全隔离。与姊妹指标的协同完整的集群内网络性能视图集群内网络延迟并不是孤立指标。在 slos.md 的稳态 SLI/SLO 总表中与网络相关的指标共同构成了对集群内数据面的分层覆盖指标度量对象关联文档In-cluster network latency从 prober Pod 到 null service 的端到端网络延迟含网络编程机制开销network_latency.mdNetwork programming latency从 Service spec / Ready Pod 列表变化到反映到负载均衡机制如 iptables的编程延迟network_programming_latency.mdIn-cluster dns latency从 prober Pod 发起的 DNS 解析延迟针对 null servicedns_latency.mdFirst packet latency从客户端发出 SYN 到收到服务端首个数据包通常为 SYN-ACK的毫秒级延迟first_packet_latency.md对照可见network latency 是最终用户体验视角的汇总指标而 network programming latency 是控制面编程视角的归因指标。两者的关系可以这样理解如果 network latency 出现劣化排查者可以进一步查看 network_programming_latency.md 中定义的 iptables 编程延迟判断瓶颈究竟在数据面转发还是控制面编程。而 dns_latency.md 则通过两次独立的 DNS 查询一次到 /etc/resolv.conf 中的 nameserver IP一次到 kube-system/kube-dns Service IP单独度量名字解析环节为将来评估 node-local DNS 缓存的效果预留了对比基线。在真实集群中落地该指标的实操要点虽然 network_latency.md 的测试场景一节仍标注为 TODO: Describe test scenario.尚未完成但结合文档中已明确的 Caveats 与姊妹文档可以归纳出在真实集群中让该 SLI 可度量所需的完整前置条件确认集群符合 SLO 适用前提必须是默认defaultKubernetes 安装且节点间底层 RTT 满足 Y的上限Y 待定稿。这一前提直接继承了 slos.md 中环境集群配置一节的要求正确配置的集群、合理的扩展特性使用方式、以及对象数量满足 thresholds.md 规定的阈值部署 null service在集群中创建一个不承载业务流量的占位 Service作为所有探针的统一 ping 目标保证测量对象的一致性部署一组 prober 探针 Pod数量与集群规模成比例。探针每秒向 null service 发起一次 ping将延迟采样上报按统计口径聚合每个探针的采样先取最近 5 分钟的 99 百分位再对所有探针的 99 百分位取一次 99 百分位最终以每集群日为单位判定是否满足 X。其中第 1 点的意义值得强调社区在 Other notes 中反复申明——在一般情况下管理员可以随意配置集群不可能给出任何网络延迟保证所以 SLI 被刻意定义得足够通用与集群如何搭建无关而 SLO 只针对默认安装 低 RTT 前提提供。这是SLI 通用、SLO 受限这一总纲原则在延迟指标上的具体体现。当前状态与演进方向综合来看该 SLI 的方法论已经完整成形但存在三处明确的待办SLO 阈值 X 与节点 RTT 上限 Y 均为占位符需待默认集群基准测试数据确定测试场景尚未描述TODO: Describe test scenario社区曾考虑将 DNS 解析纳入端到端链路短期内保持拆分长期考虑合并详见文档 Other notes 中的 TODO。从 SIG Scalability README 可以看到这类指标归属于 Kubernetes scalability definition 子项目由 SIG Scalability 负责定义与审批确保所有 SLI/SLO 面向用户体验且彼此自洽。对于希望在自己的集群中复现该测量思路的工程团队本文梳理的探针 Pod null service 5 分钟 99 百分位 跨探针聚合四件套本身就是一个低侵入、应用无关、可推广的集群内网络质量度量模板——即便在 Kubernetes 原生拓扑感知路由逐步成熟、节点跨域场景得到更好处理的今天这套端到端、可测量、有明确边界的指标设计思路依然具有直接的参考价值。【免费下载链接】communityKubernetes Community Documentation项目地址: https://gitcode.com/GitHub_Trending/com/community创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表