在 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 应该可以工作。
您在纯 docker 环境中的容器将 运行 在 kubernetes 中相同。事实上,GKE 运行 在 docker 之上。如果您执行到 pod,您应该能够在同一端口上访问指标:
kubectl exec [pod_name] -- curl localhost:9797/metrics
考虑到您使用的是相同的图像并且您的 pod.spec 暴露了端口 9797,我不明白为什么您应该有 avril 问题,尽管丢失显示端口 8688 绑定
我在 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 应该可以工作。
您在纯 docker 环境中的容器将 运行 在 kubernetes 中相同。事实上,GKE 运行 在 docker 之上。如果您执行到 pod,您应该能够在同一端口上访问指标:
kubectl exec [pod_name] -- curl localhost:9797/metrics
考虑到您使用的是相同的图像并且您的 pod.spec 暴露了端口 9797,我不明白为什么您应该有 avril 问题,尽管丢失显示端口 8688 绑定