2025 年技术指引:让真实案例和经验为开发者开路 了解详情
写点什么

15 分钟快速了解如何在 Kubernetes 中配置健康检查

  • 2020-04-15
  • 本文字数:2437 字

    阅读完需:约 8 分钟

15分钟快速了解如何在Kubernetes中配置健康检查

若您的应用程序是面向用户的,那么确保持续可用性、尽力达到最短停机时间,是一项无比重要却也不易的挑战。因此,想要避免任何中断,良好地监控应用程序的运行状况,在此显得至关重要。

Rancher 1.6 中的健康检查

Rancher 1.6 中的编排引擎 Cattle,具有为部署好的服务添加 HTTP 或 TCP 健康检查的功能。Rancher 自己的健康检查微服务提供了健康检查支持。你可以在这此了解更多信息:


https://rancher.com/docs/rancher/v1.6/en/cattle/health-checks/


简单来说,Cattle 用户可以向服务添加 TCP 健康检查。Rancher 的健康检查容器会在不同的主机上启动,它们会测试 TCP 连接是否在服务容器的指定端口打开。请注意,对于最新版本(v1.6.20),健康检查容器也与服务容器安排在同一主机上。


在部署服务时,也可以添加 HTTP 健康检查。您可以要求 Rancher 在指定路径上发出 HTTP 请求,并指定预期的响应。


这些健康检查会定期完成,您可以自行配置检查的间隔周期,重试/超时也是可配置的。如果健康检查失败,您还可以指示 Rancher 是否以及何时重新创建容器。


例如,在 Cattle 上运行 Nginx 镜像的服务,并使用如下配置进行 HTTP 健康检查:



健康检查的参数显示在 rancher-compose.yml 文件中,而不是 docker-compose.yml,因为健康检查功能是由 Rancher 实现的。



下面让我们来看看我们是否可以在 Rancher 2.0 中配置相应的健康检查。

Rancher 2.0 中的健康检查

在 2.0 中,Rancher 使用的是原生的 Kubernetes 健康检查机制:livenessProbereadinessProbe


参考此文档的定义,探针(probe)是由 Kubelet 在容器上定期执行的诊断:链接。在 Rancher 2.0 中,与 Rancher 1.6 中的跨主机健康检查相比,健康检查由本地运行的 Kubelet 完成。

快速 Kubernetes 健康检查摘要

  • livenessProbe

  • livenessProbe是对容器执行的操作,用于检查容器是否正在运行。如果探针报告失败,Kubernetes 将终止 pod 容器,并根据规范中指定的重新启动策略重新启动它。

  • readinessProbe

  • readinessProbe用于检查容器是否已准备好接受请求及满足请求。当readinessProbe失败时,则不会通过公共端点公开 pod 容器,因此容器不会接收到任何请求。


如果您的工作负载在处理请求之前忙于执行某些启动例程,则最好为工作负载配置readinessProbe


可以为 Kubernetes 工作负载配置以下类型的livenessProbereadinessProbe


  • tcpSocket – Kubelet 会检查是否可以针对指定端口上的容器 IP 地址打开 TCP 连接。

  • httpGet -在指定路径上发出 HTTP / HTTPS GET 请求,如果它返回 200 和 400 之间的 HTTP 响应代码,则报告为成功。

  • exec - Kubelet 在容器内执行指定的命令,并检查命令是否以状态 0 退出。


您可在此查看上述探针的更多配置详细信息:


https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes

在 Rancher 2.0 中配置健康检查

通过 Rancher UI,用户可以向 Kubernetes 工作负载添加 TCP 或 HTTP 健康检查。默认情况下,Rancher 会要求您为工作负载配置readinessProbe,并使用相同的配置应用livenessProbe。您也可以选择定义单独的livenessProbe


如果健康检查失败,则容器会根据工作负载规范中定义的restartPolicy重新启动。这相当于以前的 rancher-compose.yml文件中的 strategy 参数,那时这一参数是用于使用 Cattle 中的健康检查的 1.6 服务的。

TCP 健康检查

在 Rancher 2.0 中部署工作负载时,用户可以配置 TCP 健康检查,以检查是否可以在特定端口打开 TCP 连接。



以下是 Kubernetes YAML 规范,也就是为上文说的 Nginx 工作负载所配置的 TCP readinessProbe。Rancher 还使用相同的配置为您的工作负载添加了livenessProbe



从 1.6 到 2.0,健康检查参数的变化:


  • port 变成 tcpSocket.port

  • response_timeout 变成 timeoutSeconds

  • healthy_threshold 变成 failureThreshold

  • unhealthy_threshold 变成 successThreshold

  • interval 变成 periodSeconds

  • initializing_timeout 变成 initialDelaySeconds

  • strategy 变成 restartPolicy

HTTP 健康检查

您还可以指定 HTTP 健康检查,并在 pod 容器中提供 Kubelet 将发出 HTTP / HTTPS GET 请求的路径。但是,不同于 Rancher 1.6 中支持任何 HTTP 方法,Kubernetes 仅支持 HTTP / HTTPS GET 请求。



下面是 Kubernetes YAML 规范,显示了为上文所说的 Nginx 工作负载配置的 HTTP readinessProbe 和 livenessProbe。


健康检查在行动

现在让我们看看当 Kubernetes 中的健康检查失败时会发生什么,以及工作负载如何恢复。


假定在我们的 Nginx 工作负载上执行上述 HTTP 健康检查,在/index.html路径上执行 HTTP GET。为了刻意使健康检查失败,我使用 Rancher 中的Execute Shell UI 选项在 pod 容器中执行了一个 exec。



exec 容器后,我移动了健康检查执行 GET 的文件。



readinessProbelivenessProbe检查失败,并且工作负载状态已变为“不可用”。



Kubernetes 很快就杀死了原 pod 并重新创建了 pod,并且由于 restartPolicy 设置为了 Always,工作负载很快恢复了。


使用 Kubectl,您可以看到这些健康检查事件日志:




小提示:Rancher 2.0 UI 提供了从 Kubernetes Cluster 视图启动 Kubectl 的功能,您可以在该视图中在集群对象上运行原生的 Kubernetes 命令。

将健康检查从 Docker Compose 迁移到 Kubernetes Yaml?

Rancher 1.6 通过自己的微服务提供了健康检查,这就是为什么 Cattle 用户添加到服务中的健康检查参数会出现在rancher-compose.yml文件而不是docker-compose.yml配置文件中。


我们之前在文章《如何简洁优雅地实现Kubernetes服务暴露》中使用的 Kompose 工具适用于标准的docker-compose.yml参数,因此无法解析 Rancher 健康检查构造。目前,我们暂时无法使用此工具将 Rancher 健康检查从 compose 配置转换为 Kubernetes Yaml。

结论

如本文所述,可用于在 Rancher 2.0 中添加 TCP 或 HTTP 健康检查的配置参数与 Rancher 1.6 非常相似。Cattle 服务使用的健康检查配置可以完全转换为 2.0 而不会丢失任何功能。


2020-04-15 23:051253

评论

发布
暂无评论
发现更多内容

时代邻里携手华为云TaurusDB,打造智慧社区服务行业创新标杆

YG科技

干掉EasyExcel!FastExcel初体验

王磊

《计算机组成及汇编语言原理》阅读笔记:p48-p81

codists

计算机组成及汇编语言原理

CentOS系统中的日志文件位置和管理

百度搜索:蓝易云

【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页

YashanDB

数据库 yashandb

BOE(京东方)亮相世界显示产业创新发展大会 以创新科技全面引领行业风向标

爱极客侠

年底了,如何与领导谈绩效

老张

绩效考核 工作汇报

【YashanDB知识库】JDBC驱动的date类型字段结果集调用getString方法只返回日期,不返回时分秒

YashanDB

数据库 yashandb

=基于 Flexus 云服务器 X 实例体验大模型部署体验测评

轶天下事

基于Flexus云服务器X实例的数据库性能测试

轶天下事

【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页

YashanDB

数据库 yashandb

阿里领导给的Java八股文,包括15条技术线,已助1900人进入大厂!

Summer

Java 程序员 面试 架构师 大厂

为什么生成式AI的工作被称为“推理”而不是“预测”?

JustYan

人工智能 AI大模型 生成式AI

Easysearch Java SDK 2.0.x 使用指南(二)

极限实验室

sdk client easysearch

【教程】第十章:任务仪表盘(2) —— 各有千秋

NocoBase

开源 项目管理 低代码 任务管理 无代码

【YashanDB知识库】单机部署报错:prohibited operation, please check if the IP and username are correct

YashanDB

数据库 yashandb

这份4577页的Java面试PDF,让我成功斩获阿里、字节等大厂offer

Summer

Java 程序员 面试 架构师 大厂

终于拿到了阿里P8架构师分享的JCF和JUC源码分析与实现笔记java岗

程序员高级码农

Java 编程 程序员 java面试 Java面试题

Flexus X实例搭配华为云EulerOS,快速部署MySQL并执行读写性能测试

轶天下事

vba如何写本地html文件执行js

百度搜索:蓝易云

使用Matter-SDK快速搭建Matter环境 (Linux)

百度搜索:蓝易云

Arturia Augmented MALLETS for mac(槌击乐音源)v1.0.0激活版

小玖_苹果Mac软件

如何接入电竞体育直播API或者SDK

熊猫比分大卫

体育直播 体育直播网源码 体育动画直播 直播api接口

Nginx缓存机制与性能调优技巧

百度搜索:蓝易云

Linux Ext4文件系统可能引发数据丢失问题

百度搜索:蓝易云

Commander One for Mac(双窗口文件管理器)v3.12.0免激活版

小玖_苹果Mac软件

阿里P8架构师都要学习研究的java加强版23种设计模式神级PDF文档

程序员高级码农

Java 程序员 设计模式 java面试 Java面试题

Flexus X实例ultralytics模型yolov10深度学习AI部署与应用

轶天下事

OpenAI 推出嵌入式硬件 SDK,支持 ESP32 语音开发;INFP:音频驱动的双人对话头像生成,自动区分说话者和倾听者

声网

现阶段Java程序员该如何准备面试?

了不起的程序猿

后端 java程序员 java面试 java架构师 Java八股文

云起无垠荣获第八届“强网杯”高阶技术专项赛优秀奖

云起无垠

15分钟快速了解如何在Kubernetes中配置健康检查_文化 & 方法_Rancher_InfoQ精选文章