调试集群

1 - 流控

API 优先级和公平性控制着 Kubernetes API 服务器在负载过高的情况下的行为。你可以在 API 优先级和公平性文档中找到更多信息。

问题诊断

对于启用了 APF 的 API 服务器,每个 HTTP 响应都有两个额外的 HTTP 头: X-Kubernetes-PF-FlowSchema-UIDX-Kubernetes-PF-PriorityLevel-UID, 给出与请求匹配的 FlowSchema 和已分配的优先级级别。 如果请求用户没有查看这些对象的权限,则这些 HTTP 头中将不包含 API 对象的名称, 因此在调试时,你可以使用类似如下的命令:

kubectl get flowschemas -o custom-columns="uid:{metadata.uid},name:{metadata.name}"
kubectl get prioritylevelconfigurations -o custom-columns="uid:{metadata.uid},name:{metadata.name}"

来获取 UID 与 FlowSchema 的名称和 PriorityLevelConfiguration 的名称之间的对应关系。

调试端点

启用 APF 特性后,kube-apiserver 会在其 HTTP/HTTPS 端口额外提供以下路径:

你需要确保自己具有访问这些端点的权限。如果你使用管理员身份,则无需进行任何操作。 必要时可以通过设置 nonResourceURLs 来访问 /debug/api_priority_and_fairness/ 参照 RBAC 文档授予权限。

调试日志生成行为

-v=3 或更详细的情况下,API 服务器会为在 API 服务日志中为每个请求输出一行 httplog, 其中包括以下属性:

在更高级别的精细度下,将有日志行揭示 APF 如何处理请求的详细信息,主要用于调试目的。

响应头

APF 将以下两个头添加到每个 HTTP 响应消息中。 这些信息不会出现在审计日志中,但可以从客户端查看。 对于使用 klog 的客户端,使用 -v=8 或更高的详细级别可以查看这些头。

接下来

有关 API 优先级和公平性的设计细节的背景信息, 请参阅增强提案