关注分享主机优惠活动
国内外VPS云服务器

k8s 和健康检查 --grpc 服务健康检查最佳实践(k8s pod 健康检查)

摘要:本文介绍了一种对应用程序进行本地健康检查的方法。 标准健康检查工具,轻松查询健康协议。 选择二进制版本并将其下载到 .xml 文件中指定的容器中。 服务器健康检查的代码实现。 完整代码的主要部分是: 请检查我们的仓库。

简介

GRPC 正在成为云原生微服务之间通信的全球语言。 如果您当前正在将 gRPC 应用程序部署到 Kubernetes,您可能想知道配置运行状况检查的最佳方法是什么。 本文介绍 grpc-health-probe,一种用于检查 gRPC 应用程序运行状况的 Kubernetes 原生方法。

对于那些不熟悉的人来说,Kubernetes 健康检查(活跃度和就绪性探测)可以让您的应用程序在睡眠时保持可用。 检测无响应的 Pod,将其标记为不正常,然后重新启动或重新安排它们。

Kubernetes 本身不支持 gRPC 健康检查。 这使得 gRPC 开发人员在部署到 Kubernetes 时可以使用三种方法:

httpGet 探针:gRPC 本身不可用。 您将需要重构您的应用程序以服务 gRPC 和 HTTP/1.1 协议(具有不同的端口号)。

tcpSocket 探针:打开 gRPC 服务器的套接字是没有意义的,因为无法读取响应正文。

execprobe:定期调用容器生态系统中的程序。 对于 gRPC,这意味着自己实现合理的 RPC,编写客户端工具,并将客户端工具打包到容器中。

grpc-health- 探针解决方案

为了标准化上面的“执行探针”方法,您将需要:

标准运行状况检查 一种易于在任何 gRPC 服务器上实现的“协议”。

健康状况标准查看“工具”以轻松搜索健康协议。

值得庆幸的是,gRPC 有一个标准的健康检查协议。 任何语言都易于使用。 几乎所有 gRPC 语言实现都提供了用于设置健康状态的生成代码和实用程序。

如果您的 gRPC 应用程序中实现了此健康检查协议,您可以使用标准/通用工具调用此 Check() 方法来确定服务器状态。

接下来我们需要的是“标准工具”grpc-health-probe。

此工具允许您对所有 gRPC 应用程序使用相同的运行状况检查配置。 这种方法要求您:

选择您的首选语言。 找到 gRPC“健康”模块并开始使用它(例如 Go 库)。

将 grpc_health_probe 二进制文件放入容器中。

配置 Kubernetes“exec”探针以调用容器内的“grpc_health_probe”工具。

示例

您可以将静态编译的 grpc_health_probe 添加到容器映像中。 选择二进制版本并将其下载到您的 Dockerfile。

RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc[ k4]health-probe/releases/download /${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && chmod +x /bin/grpc_health_probe

在 Kubernetes pod 清单中指定容器的 livenes。sProbe 和/或 readinessProbe。

规范:容器:- 名称:服务器映像:“[YOUR-DOCKER-IMAGE]”端口:- 容器端口:5000 readinessProbe:exec:命令:[“/ bin /grpc_health_probe", "-addr=:5000"]initialDelaySeconds:5 livenessProbe:exec:command:["/bin/grpc_health_probe", "-addr=:5000"]initialDelaySeconds:10 

服务器健康检查的代码实现,主要部分为:

 hsrv := health.NewServer() hsrv.SetServingStatus("", healthpb.HealthCheckResponse_SERVING) healthpb.RegisterHealthServer(s, hsrv) 

完整代码请查看git仓库。

未经允许不得转载:主机频道 » k8s 和健康检查 --grpc 服务健康检查最佳实践(k8s pod 健康检查)

评论 抢沙发

评论前必须登录!