资讯专栏INFORMATION COLUMN

k8s与健康检查--grpc服务健康检查最佳实践

maochunguang / 2890人阅读

摘要:在本文中,我们将讨论,一种本地健康检查应用程序的方法。标准的健康检查工具,可以轻松查询健康协议。选择二进制版本并将其下载到中在你的中指定容器的。服务器健康检查的代码实现,主要部分如下完整代码,请查看仓库。

前言

GRPC正在成为云原生微服务之间通信的通用语言。如果您今天要将gRPC应用程序部署到Kubernetes,您可能想知道配置运行状况检查的最佳方法。在本文中,我们将讨论grpc-health-probe,一种Kubernetes本地健康检查gRPC应用程序的方法。

果您不熟悉,Kubernetes健康检查(liveness and readiness probes)就是让您的应用程序在您睡觉时保持可用的原因。他们检测到没有响应的pod,将它们标记为不健康,并导致这些pod重新启动或重新调度。

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

httpGet probe: 不能与gRPC原生使用。您需要重构您的应用程序以同时提供gRPC和HTTP / 1.1协议(在不同的端口号上)。

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

exec probe: 这会定期调用容器生态系统中的程序。对于gRPC,这意味着您自己实现健康RPC,然后使用编写客户端工具,并将客户端工具与容器打包到一起。

grpc-health-probe 解决方案

为了标准化上面提到的“exec探针”方法,我们需要:

标准的健康检查“协议”,可以轻松地在任何gRPC服务器中实现。

标准的健康检查“工具”,可以轻松查询健康协议。

得庆幸的是,gRPC有一个标准的健康检查协议。它可以从任何语言轻松使用。生成的代码和用于设置运行状况的实用程序几乎都在gRPC的所有语言实现中提供。

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

下来你需要的是“标准工具”,它是grpc-health-probe。

使用此工具,您可以在所有gRPC应用程序中使用相同的运行状况检查配置。这种方法需要你:

选择您喜欢的语言找到gRPC“health”模块并开始使用它(例如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-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && 
    chmod +x /bin/grpc_health_probe

在你的 Kubernetes Pod manifest中,指定容器的 livenessProbe and/or readinessProbe 。

spec:
  containers:
  - name: server
    image: "[YOUR-DOCKER-IMAGE]"
    ports:
    - containerPort: 5000
    readinessProbe:
      exec:
        command: ["/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仓库。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/33135.html

相关文章

  • k8s健康检查--grpc服务健康检查最佳实践

    摘要:在本文中,我们将讨论,一种本地健康检查应用程序的方法。标准的健康检查工具,可以轻松查询健康协议。选择二进制版本并将其下载到中在你的中指定容器的。服务器健康检查的代码实现,主要部分如下完整代码,请查看仓库。 前言 GRPC正在成为云原生微服务之间通信的通用语言。如果您今天要将gRPC应用程序部署到Kubernetes,您可能想知道配置运行状况检查的最佳方法。在本文中,我们将讨论grpc-...

    Maxiye 评论0 收藏0
  • k8s健康检查--grpc服务健康检查最佳实践

    摘要:在本文中,我们将讨论,一种本地健康检查应用程序的方法。标准的健康检查工具,可以轻松查询健康协议。选择二进制版本并将其下载到中在你的中指定容器的。服务器健康检查的代码实现,主要部分如下完整代码,请查看仓库。 前言 GRPC正在成为云原生微服务之间通信的通用语言。如果您今天要将gRPC应用程序部署到Kubernetes,您可能想知道配置运行状况检查的最佳方法。在本文中,我们将讨论grpc-...

    Tangpj 评论0 收藏0
  • Etcd超全解:原理阐释及部署设置的最佳实践

    摘要:谷歌思科华为等等均是的贡献成员。其中谷歌云平台和等大型云提供商成功在生产环境中使用了。它为良好稳定的生产部署提供了一个良好的起点。预先准备在继续之前,我们需要准备一个谷歌云平台的账号免费的应该足够了。我们将为部署配置。 本文将带你充分了解Etcd的工作原理,演示如何用Kubernetes建立并运行etcd集群,如何与Etcd交互,如何在Etcd中设置和检索值,如何配置高可用等等。 sh...

    yhaolpz 评论0 收藏0
  • k8s的扩展资源设计和device-plugin

    摘要:如果上的资源耗尽,这类将无法成功调度。将这个资源及其对应的设备个数记录到更新到。 extended-resources extended-resources在k8s1.9中是一个stable的特性。可以用一句话来概括这个特性: 通过向apiserver发送一个patch node 的请求,为这个node增加一个自定义的资源类型,用于以该资源的配额统计和相应的QoS的配置。 patch ...

    shiweifu 评论0 收藏0
  • 服务架构下 Service Mesh 会是闪亮的明天吗?

    摘要:以下内容根据魏巍分享整编,希望对大家了解有所帮助。数据平面由一组智能代理组成,代理部署为,其控制微服务之间所有的网络通信。 7月7日,时速云企业级容器 PaaS 技术沙龙第 10 期在上海成功举办,时速云容器架构负责人魏巍为大家详细讲解了 Service Mesh 中代表性的实践方案、并以 Istio 为例详细讲解了 Service Mesh 中的技术关键点,包括 Istio 控制平面...

    hlcfan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<