免费注册!6月19-20日,「亚马逊云科技中国峰会」重磅来袭! 了解详情
写点什么

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:051337

评论

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

一文详解Kafka API

华为云开发者联盟

kafka API 拦截器 Consumer API Producer API

Springboot中,如何读取配置文件中的属性

华为云开发者联盟

数据库 springboot 映射 配置文件

上市商业银行推进智慧银行建设,全方位赋能零售业务数字化转型

易观分析

商业银行 智慧银行

Web Components系列(四) —— 认识 Shadow DOM

编程三昧

前端 组件化 HTML5, CSS3 2月月更

一文让你彻底搞懂Python中__str__和__repr__

宇宙之一粟

Python 2月月更

巧用这几种文本检索工具,节省80%的时间!

优麒麟

Linux 操作系统 grep 检索 优麒麟

总结 XSS 与 CSRF 两种跨站攻击

喀拉峻

网络安全

在阿里,我们如何管理测试环境

阿里云云效

阿里云 DevOps 云原生 敏捷开发 研发提效

Linux中Shell重定向

入门小站

Linux

加入科学计算SIG,挑战最前沿的AI+Science研发与创新

百度大脑

PingCode Wiki 权限设计之ACL

阿杰

权限系统 权限控制 acl 权限设计

设计模式【14】-- 从智能音箱中学习命令模式

秦怀杂货店

Java 设计模式

Hango Rider:网易数帆开源 Envoy 企业级自定义扩展框架

网易数帆

开源 云原生 envoy Hango Rider

netty系列之:channel,ServerChannel和netty中的实现

程序那些事

Java Netty nio 程序那些事 2月月更

做好云管理一定要云管平台吗?云管理平台应具备什么功能?

行云管家

云服务 云管平台 云资源 云管理

聚焦业务价值:分众传媒在 Serverless 上的探索和实践

Serverless Devs

阿里云 Serverless 运维管理 分众传媒 2月月更

基于RestTemplate的在线武器库

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

redis 面试总结

yuexin_tech

redis 面试

阿里云服务器搭建halo博客从0到1

乌龟哥哥

阿里云 2月月更 halo博客

在线脑图思维导图生成工具

入门小站

工具

等保级别最高为几级?市面上常见吗?

行云管家

网络安全 等保 等级保护 过等保

Client-go源码分析之SharedInformer及实战| 社区征文

雪雷

Kubernetes Informer 新春征文

欧拉的奇异之旅·风暴来临与欧拉初诞

白洞计划

征文投稿丨使用云服务器ECS快速搭建halo博客

阿里云弹性计算

征文投稿 玩转ECS halo博客

美景本天成,妙笔偶得之——“妙笔”是怎样炼成的?

百度大脑

开源最佳实践

LinuxSuRen

开源 最佳实践

[JAVA冷知识]什么是逆变(contravariant)与协变(covariant)?数组支持协变&逆变吗?泛型呢?

山河已无恙

Java 2月月更

SENSORO基于TDengine助力基层政府打造数字化应用标杆

TDengine

数据库 tdengine 开源 物联网

语义级代码克隆检测数据集的评估与改进

华为云开发者联盟

软件工程 代码克隆检测 代码克隆 语义代码克隆 BigCloneBench

百度智能云开物再收“一个奖状”

百度大脑

大数据培训:Hadoop HDFS 实现原理

@零度

hadoop 大数据开发

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