在 Kubernetes 中部署基于 Ballerina 的微服务时,指标端点不起作用

Metrics endpoint not working when deploying a Ballerina based micro service in Kubernetes

我在 Ballerina 中实现了一个微服务。每当我使用以下命令部署服务时,在我的 本地计算机 ballerina run --observe [name_of_the_file].bal 中,我都会将 metrics endpoint 映射到端口 9797。即 curl localhost:9797/metrics 给出服务器指标作为响应。

即使我在 Docker 环境 中部署上述服务,我也得到了相同的结果。但是当我将它部署在 Kubernetes(在 GoogleCloudPlatform 上)时,我没有得到映射到端口 9797.

的指标

kubectl logs [pod_name] 给出以下输出。

Initiating service(s) in 'ballerina-prime.balx'
[ballerina/http] started HTTP/WS endpoint 0.0.0.0:8688

有人可以帮我获取映射到端口 9797 的指标吗?

Docker文件

FROM ballerina/ballerina:0.991.0
COPY ballerina-prime.balx /home/ballerina
EXPOSE 8688 
EXPOSE 9797
CMD ballerina run --observe ballerina-prime.balx

芭蕾舞女演员-prime.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ballerina-prime
  labels:
    app: ballerina-prime
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ballerina-prime
  template:
    metadata:
      labels:
        app: ballerina-prime
    spec:
      containers:
      - name: ballerina-prime
        image: anushiya/ballerina-prime:v3
        resources:
            limits:
                cpu: "100m"
            requests:
                cpu: "100m"
        ports:
        - containerPort: 8688
          name: echo-service
        - containerPort: 9797
          name: metrics

作为测试,我 运行 Kubernetes 节点内的 curl 请求。首先,使用以下命令找到 podIP:

kubectl get pods -l app=ballerina-prime -o yaml | grep podIP 

app=[nameOfThePod]。您可以使用 Cloud shell 获取 Pod IP。

-后续步骤:

由于您在 Google Cloud Platform 上使用 GKE (Kubernetes),请导航至 Compute Engine 并通过 SSH 连接到其中一个 GKE 节点。进入后,运行 使用 podIP IP 的 curl 请求 @gke-deploymentbuild-default-pool-f3c9c9aa-fkx5 ~ $ curl -i http://10.60.2.10:9797/metrics

HTTP/1.1 200 OK
content-type: text/plain
content-length: 1060
server: ballerina/0.991.0
date: Thu, 24 Oct 2019 18:19:29 GMT

-外部:

显然,您不想从 GKE 节点访问它,这就是负载均衡器发挥作用的地方。

导航到 GKE,在工作负载中,select 芭蕾舞演员工作负载。进入菜单后,select“操作”和“公开”。在这里你可以设置端口号和select“负载均衡器”作为服务类型:

Menu>Kubernetes Engine>Workloads>”ballerina”>Actions>Expose>Service type: Load balancer.

转到服务和入口,负载均衡器创建完成后,您将看到使用您选择的端口号(在本例中为 9797)公开的端点。带有 /metrics 端点的 IP 应该可以工作。

查看链接:1 3

您在纯 docker 环境中的容器将 运行 在 kubernetes 中相同。事实上,GKE 运行 在 docker 之上。如果您执行到 pod,您应该能够在同一端口上访问指标:

kubectl exec [pod_name] -- curl localhost:9797/metrics

考虑到您使用的是相同的图像并且您的 pod.spec 暴露了端口 9797,我不明白为什么您应该有 avril 问题,尽管丢失显示端口 8688 绑定