Ben Davis Asked: 2020-11-12 11:22:56 +0800 CST2020-11-12 11:22:56 +0800 CST 2020-11-12 11:22:56 +0800 CST 如何测量 Kubernetes 中的 pod 启动时间? 772 我想找到从分配 pod 到服务就绪之间的秒数。当我查看 pod 的事件日志时,没有任何事件表明服务就绪。这是我需要为其编写自定义脚本的东西,还是我可以在其他地方查看? kubernetes 1 个回答 Voted Best Answer acid_fuji 2020-11-13T00:48:56+08:002020-11-13T00:48:56+08:00 虽然 Kubernetes 中没有为此目的构建的确切机制,但提供了pod 条件: 一个 Pod 有一个 PodStatus,它有一个 PodConditions 数组, Pod 已经通过或没有通过: PodScheduled: Pod 已经被调度到一个节点上。 ContainersReady: Pod 中的所有容器都准备好了。 Initialized: 所有 初始化容器 都已成功启动。 Ready:Pod 能够服务请求,应该添加到所有匹配服务的负载平衡池中。 使用已经创建的 Pod,您可以使用以下方法获取此数据: kubectl get pod <pod_name> -oyaml 并观察这些条件: status: conditions: - lastProbeTime: null lastTransitionTime: "2020-11-06T09:33:30Z" status: "True" type: Initialized - lastProbeTime: null lastTransitionTime: "2020-11-06T09:33:33Z" status: "True" type: Ready - lastProbeTime: null lastTransitionTime: "2020-11-06T09:33:33Z" status: "True" type: ContainersReady - lastProbeTime: null lastTransitionTime: "2020-11-06T09:33:30Z" status: "True" type: PodScheduled 您也可以jq用于 yaml 解析。 我想到的另一个解决方案是Kube-state-metrics: kube-state-metrics 是一个简单的服务,它监听 Kubernetes API 服务器并生成有关对象状态的指标。(请参阅下面“指标”部分中的示例。)它不关注单个 Kubernetes 组件的健康状况,而是关注内部各种对象的健康状况,例如部署、节点和 Pod。 使用它,您可以导出对象创建时间 ( kube_pod_start_time) 和对象就绪状态 ( kube_pod_status_ready)。当然,这里还有更多可用于 pod 和其他 kubernetes 对象的指标。 请记住,如果您要测量您的数据 pod start time ,您会假设运行该 pod 所需的所有图像都已预先拉入机器上。否则,您的测量将不正确,因为它将包括影响 Kubernetes 性能的变量,例如网络或图像大小。
虽然 Kubernetes 中没有为此目的构建的确切机制,但提供了pod 条件:
PodScheduled
: Pod 已经被调度到一个节点上。ContainersReady
: Pod 中的所有容器都准备好了。Initialized
: 所有 初始化容器 都已成功启动。Ready
:Pod 能够服务请求,应该添加到所有匹配服务的负载平衡池中。使用已经创建的 Pod,您可以使用以下方法获取此数据:
并观察这些条件:
您也可以
jq
用于 yaml 解析。我想到的另一个解决方案是Kube-state-metrics:
使用它,您可以导出对象创建时间 (
kube_pod_start_time
) 和对象就绪状态 (kube_pod_status_ready
)。当然,这里还有更多可用于 pod 和其他 kubernetes 对象的指标。请记住,如果您要测量您的数据
pod start time
,您会假设运行该 pod 所需的所有图像都已预先拉入机器上。否则,您的测量将不正确,因为它将包括影响 Kubernetes 性能的变量,例如网络或图像大小。