【问题标题】:Identify which GKE Node is serving a client request确定哪个 GKE 节点正在处理客户端请求
【发布时间】:2020-04-14 19:13:21
【问题描述】:

我在 Google Kubernetes Engine 上部署了一个应用程序。我想确定哪个客户端请求正在由 GKE 中的哪个节点/pod 提供服务。有没有办法将客户端请求映射到它所服务的 pod/节点?

【问题讨论】:

    标签: kubernetes google-cloud-platform google-kubernetes-engine


    【解决方案1】:

    您的问题的答案很大程度上取决于您可以使用的监控和仪器数量。
    最常见的方法是将 prometheus 客户端添加到运行在您的 pod 上的代码中,并使用它来编写包含标签的指标,这些标签可以识别您感兴趣的客户端请求。

    一旦 Prometheus 抓取了您的指标,它们就会被发出它们的节点/pod 丰富,并且您可以获得所需的数据。

    【讨论】:

      【解决方案2】:

      我认为Downward API 是您所需要的。它允许您将Podnode 信息暴露给正在运行的container。您的应用程序可以简单地在echo 的某些env variables 的内容中包含您需要的信息。 这样您就可以看到哪个Pod 并安排在哪个节点上处理特定请求。

      kubernetes 文档中的几句话:

      有两种方法可以将 Pod 和 Container 字段暴露给正在运行的 容器:

      这两种暴露 Pod 和 Container 字段的方式是 称为Downward API

      我建议您仔细查看Exposing Pod Information to Containers Through Environment Variables。以下示例 Podcontainer 公开其名称以及节点名称:

      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的列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-10
        • 2019-06-03
        • 2011-01-01
        • 2013-11-17
        相关资源
        最近更新 更多