【发布时间】:2020-04-14 19:13:21
【问题描述】:
我在 Google Kubernetes Engine 上部署了一个应用程序。我想确定哪个客户端请求正在由 GKE 中的哪个节点/pod 提供服务。有没有办法将客户端请求映射到它所服务的 pod/节点?
【问题讨论】:
标签: kubernetes google-cloud-platform google-kubernetes-engine
我在 Google Kubernetes Engine 上部署了一个应用程序。我想确定哪个客户端请求正在由 GKE 中的哪个节点/pod 提供服务。有没有办法将客户端请求映射到它所服务的 pod/节点?
【问题讨论】:
标签: kubernetes google-cloud-platform google-kubernetes-engine
您的问题的答案很大程度上取决于您可以使用的监控和仪器数量。
最常见的方法是将 prometheus 客户端添加到运行在您的 pod 上的代码中,并使用它来编写包含标签的指标,这些标签可以识别您感兴趣的客户端请求。
一旦 Prometheus 抓取了您的指标,它们就会被发出它们的节点/pod 丰富,并且您可以获得所需的数据。
【讨论】:
我认为Downward API 是您所需要的。它允许您将Pod 和node 信息暴露给正在运行的container。您的应用程序可以简单地在echo 的某些env variables 的内容中包含您需要的信息。 这样您就可以看到哪个Pod 并安排在哪个节点上处理特定请求。
kubernetes 文档中的几句话:
有两种方法可以将 Pod 和 Container 字段暴露给正在运行的 容器:
这两种暴露 Pod 和 Container 字段的方式是 称为Downward API。
我建议您仔细查看Exposing Pod Information to Containers Through Environment Variables。以下示例 Pod 向 container 公开其名称以及节点名称:
apiVersion: v1
kind: Pod
metadata:
name: dapi-envars-fieldref
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: [ "sh", "-c"]
args:
- while true; do
echo -en '\n';
printenv MY_NODE_NAME MY_POD_NAME;
sleep 10;
done;
env:
- name: MY_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
restartPolicy: Never
这只是一个示例,我希望能满足您的特定要求,但请记住,您可能会通过这种方式公开更多相关信息。快速查看Capabilities of the Downward API的列表。
【讨论】: