我们只需4/30即可调整Futureestack注册。条款和条件适用。 现在注册

Kubernetes基本面,第2部分:如何使用健康检查

6分钟阅读

这是五部分系列的第二部分Kubernetes基本面。在接下来的几周内检查新零件。

Kubernetes.是用于集装箱应用程序的领先的角色平台。为了有效管理容器,Kubernetes需要一种检查他们的健康状况,看看它们是否正常工作并接收流量。Kubernetes使用健康检查 - 也称为探针-确定你的应用程序的实例是否正在运行和响应

在本文中,我们将讨论不同的探针类型和使用它们的各种方式。

为什么探测很重要

分布式系统可能很难管理。由于单独的组件独立工作,因此即使在其他组件失败后,每个部分也会继续运行。在某些时候,申请可能会崩溃。或者应用程序可能仍处于初始化阶段,尚未准备好接收和处理请求。

如果所有的组件都在工作,您只能断言系统的健康。使用探针,您可以确定容器是否已死亡或活动,并确定Kubernetes是否应暂时防止其他容器访问它。Kubernetes验证了个体容器的健康,以确定整体豆荚健康。

探针类型

在部署和操作分布式应用程序时,容器会被创建、启动、运行和终止。为了检查容器在其生命周期的不同阶段的健康状况,Kubernetes使用了不同类型的探测。

  • 情绪探针允许Kubernetes检查你的应用程序是否活着。的kubelet在每个节点上运行的代理使用Liventive Probes来确保容器按预期运行。如果容器应用程序不再提供请求,则Kubelet将介入并重新启动容器。例如,如果应用程序没有响应并且由于死锁而无法进行进展,则灵活探针检测到它有故障。然后kubelet终止并重新启动容器。即使应用程序带有导致进一步死锁的缺陷,重启也会增加容器的可用性。它还为您的开发人员提供了时间来识别缺陷并以后解决它们。
  • 准备调查在容器的整个生命周期中运行。Kubernetes使用此探针知道容器准备好开始接受流量。如果探测器失败,Kubernetes将停止将流量路由到POD,直到探测器再次传递。例如,容器可能需要执行初始化任务,包括解压缩和索引文件和填充数据库表。在启动过程完成之前,容器将无法接收或服务流量。在此期间,准备探测将失败,因此Kubernetes将对其他容器路由请求。当所有容器准备就绪时,请准备好。这有助于Kubernetes控件哪些POD用作服务后端。如果未准备好,请从服务负载均衡器中删除POD。
  • 启动探针用于确定容器应用程序何时已成功初始化。如果启动探测失败,pod将重新启动。当吊舱容器需要太长时间才能准备就绪时,准备就绪的探测器可能会反复失败。在这种情况下,容器在启动和运行之前就有被kubelet终止的风险。这就是对创业公司进行调查的时候了。的startup probe forces liveness and readiness checks to wait until it succeeds, so that the application startup is not compromised. That is especially beneficial for slow-starting legacy applications.

创建探测

要创建运行状况检查探测,必须对容器发出请求。有三种方式来实现Kubernetes的活力、准备和启动探针:

  1. 发送HTTP请求
  2. 运行命令
  3. 打开TCP插座

HTTP请求

HTTP请求是创建活跃探测的常见机制。要公开HTTP端点,您可以在容器中实现任何轻量级HTTP服务器。

Kubernetes探测将针对容器IP上的端点执行一个HTTP GET请求,以验证服务是否处于活动状态。如果端点返回成功代码,则kubelet将认为容器是活的,并且运行良好。否则,kubelet将终止并重新启动容器。

假设您有一个基于名为K8S.GCR.IO/LIVES的图像的容器。在这种情况下,如果定义使用HTTP GET请求的Liventive探测,则您的YAML配置文件将类似于此代码段:

apiersion:V1种类:Pod元数据:标签:测试:LIVES-HTTP规范:容器: - 名称:活力图片:K8S.GCR.IO/liventive args: -  / Server LiventiveProbe:httpGet:path:/ healthz端口:8080 HttPheaders: - 名称:自定义标题值:Awesome InitialDelayseConds:3个句号:3

该配置定义了具有initialDelayseConds的单个容器Pod,以及告诉Kubelet每3秒执行Liventive探测器并在执行第一个探测之前等待3秒。Kubelet将通过向港口上的/ Healthz路径发送请求来检查容器是否存在活力和健康8080.并期待一个成功的结果代码。

命令

当HTTP请求不合适时,可以使用命令探测。

配置命令探测器后,kubelet执行猫/ tmp /健康命令。如果命令成功,Kubelet认为您的容器是正常的。否则,Kubernetes将终止并重启容器。

这就是您的YAML配置如何查找基于K8S.GCR.IO/BUSYBOX映像运行容器的新POD:

apiVersion: v1 kind: Pod metadata: labels: test: live name: live -exec spec: containers: - name: live image: k8s.gcr。io / busybox args: - /bin/sh - - c -触摸/ tmp /健康;睡眠30;rm射频/ tmp /健康;sleep 600 livessprobe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5

上面的配置定义了一个包含的单个容器套件initialdelayseconds.并且阶段键键告诉Kubelet每5秒钟执行灵活探针并在第一个探头完成之前等待5秒。

Kubelet将运行猫/ tmp /健康命令在容器中执行探测。

TCP连接

定义了TCP套接字探头时,Kubernetes会尝试在容器指定端口上打开TCP连接。如果Kubernetes成功,容器被认为是健康的。当HTTP或命令探针不充分时,TCP探针很有帮助。容器可以从TCP探测中受益的情况包括GRPC和FTP服务,其中TCP协议基础架构已存在。

通过以下配置,Kubelet将尝试在指定端口上打开套接字到容器。

apiersion:V1种类:Pod元数据:名称:Goproxy标签:Goproxy规范:容器: - 名称:Goproxy图片:K8S.GCR.IO/Goproxy:0.1端口: -  ContainerPort:8080 ReadinessProbe:TCPSocket:8080 InitialDelerseConds:5个阶段:10 LiventiveProbe:TCPSocket:端口:8080 initialDelayseConds:15个赛季秒:20

上面的配置与HTTP检查类似。它定义了准备就绪和活跃度探测器。当容器启动时,kubelet将等待5秒发送第一个准备就绪的探测器。之后,kubelet将每10秒检查一次集装箱的准备情况。

监测Kubernetes健康

探测会告诉Kubernetes您的容器是否健康,但它们不会告诉您任何东西。

当您在跨部署在许多节点的kubernetes窗口中运行许多服务时,健康和错误监视可能很困难。

作为使用Kubernetes平台的开发人员或DevOps专家,您可能会发现New Relic是检查Kubernetes运行状况、收集见解和排除容器问题的优秀工具。


Kubernetes仪表板显示整体POD状态

通过开放的仪器、连接的数据和可编程性New Relic的平台提供Kubernetes集群的完全可观察性通过度量、事件、日志和跟踪在其中运行的服务。

结束

通过探针进行的运行状况检查对于确保容器是集群中的良好公民至关重要。Kubernetes使用活跃度、准备度和启动探针来决定何时需要重新启动容器,或者何时需要从服务中删除pod。这有助于您保持分布式系统服务的可靠性和可用性。

正如我们所看到的那样,探针太难设置和使用 - 现在你知道如何做到这一点。

准备好深入研究Kubernetes监控了吗?查看使用New Relic监控Kubernetes的完整介绍

新遗物是今年的骄傲白金赞助商Kubecon + CloudNativeCon虚拟会议11月17日至20日。在白金赞助商大厅的虚拟展台上停下,与我们的开发专家交谈。