本文基于kubernetes 1.5.2版本编写
K8S的应用程序健康检查分为livenessProbe和readinessProbe,两者相似,但两者存在着一些区别。
livenessProbe在服务运行过程中检查应用程序是否运行正常,不正常将杀掉进程;而readness Probe是用于检测应用程序启动完成后是否准备好对外提供服务,不正常继续检测,直到返回成功为止。
livenessProbe
许多应用程序经过长时间运行,最终过渡到无法运行的状态,除了重启,无法恢复。通常情况下,K8S会发现应用程序已经终止,然后重启应用程序/pod。
有时应用程序可能因为某些原因(后端服务故障等)导致暂时无法对外提供服务,但应用软件没有终止,导致K8S无法隔离有故障的pod,调用者可能会访问到有故障的pod,导致业务不稳定。K8S提供livenessProbe来检测应用程序是否正常运行,并且对相应状况进行相应的补救措施。
readinessProbe
在没有配置readinessProbe的资源对象中,pod中的容器启动完成后,就认为pod中的应用程序可以对外提供服务,该pod就会加入相对应的service,对外提供服务。但有时一些应用程序启动后,需要较长时间的加载才能对外服务,如果这时对外提供服务,执行结果必然无法达到预期效果,影响用于体验。
比如使用tomcat的应用程序来说,并不是简单地说tomcat启动成功就可以对外提供服务的,还需要等待spring容器初始化,数据库连接没连上等等。对于spring boot应用,默认的actuator带有/health接口,可以用来进行启动成功的判断。
检测方式
exec-命令
在用户容器内执行一次命令,如果命令执行的退出码为0,则认为应用程序正常运行,其他任务应用程序运行不正常。
……
livenessProbe:
exec:
command:
- cat
- /home/laizy/test/hostpath/healthy
……
TCPSocket
将会尝试打开一个用户容器的Socket连接(就是IP地址:端口)。如果能够建立这条连接,则认为应用程序正常运行,否则认为应用程序运行不正常。
……
livenessProbe:
tcpSocket:
port: 8080
……
HTTPGet
调用容器内Web应用的web hook,如果返回的HTTP状态码在200和399之间,则认为应用程序正常运行,否则认为应用程序运行不正常。每进行一次HTTP健康检查都会访问一次指定的URL。
……
httpGet: #通过httpget检查健康,返回200-399之间,则认为容器正常
path: / #URI地址
port: 80 #端口号
#host: 127.0.0.1 #主机地址
scheme: HTTP #支持的协议,http或者https
httpHeaders:’’ #自定义请求的header
……
部署例子
cat << EOF > inessprobe.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: inessprobe
labels:
project: lykops
app: inessprobe
version: v1
spec:
replicas: 6
selector:
project: lykops
app: inessprobe
version: v1
name: inessprobe
template:
metadata:
labels:
project: lykops
app: inessprobe
version: v1
name: inessprobe
spec:
restartPolicy: Always
containers:
- name: inessprobe
image: web:apache
imagePullPolicy: Never
command: ['sh',"/etc/run.sh" ]
ports:
- containerPort: 80
name: httpd
protocol: TCP
readinessProbe:
httpGet:
path: /
port: 80
scheme: HTTP
initialDelaySeconds: 120
periodSeconds: 15
timeoutSeconds: 5
livenessProbe:
httpGet:
path: /
port: 80
scheme: HTTP
initialDelaySeconds: 180
timeoutSeconds: 5
periodSeconds: 15
EOF
cat << EOF > inessprobe-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: inessprobe
labels:
project: lykops
app: inessprobe
version: v1
spec:
selector:
project: lykops
app: inessprobe
version: v1
ports:
- name: http
port: 80
protocol: TCP
EOF
kubectl create -f inessprobe-svc.yaml
kubectl create -f inessprobe.yaml
参数说明
initialDelaySeconds:容器启动后第一次执行探测是需要等待多少秒。
periodSeconds:执行探测的频率。默认是10秒,最小1秒。
timeoutSeconds:探测超时时间。默认1秒,最小1秒。
successThreshold:探测失败后,最少连续探测成功多少次才被认定为成功。默认是1。对于liveness必须是1。最小值是1。
failureThreshold:探测成功后,最少连续探测失败多少次才被认定为失败。默认是3。最小值是1。
分享到:
相关推荐
Kubernetes,简称K8s,是Google开源的一种容器编排系统,用于自动化容器化的应用程序部署、扩展和管理。这个“K8S安装包之kubernetes-client-linux-amd64”是针对Linux AMD64架构的Kubernetes客户端工具,它使得用户...
1. **创建和管理部署**: 用户可以通过`kubectl create`命令部署应用程序,定义服务、部署、配置卷等资源对象。 2. **查询资源**: 使用`kubectl get`可以查看集群中的各种资源,如Pods、Services、Deployments、...
Kubernetes是当今最流行的容器编排系统,用于管理分布式应用程序和服务。在这个"Kubernetes-node-1.18.3-linux-amd64.tar.gz"压缩包中,包含了在Linux平台上安装Kubernetes节点所需的关键组件,主要面向AMD64架构。...
3. **部署配置**:这一章节将详细阐述如何在Kubernetes上部署应用程序,包括使用YAML文件定义资源对象、应用滚动更新、水平自动扩缩(Horizontal Pod Autoscaler, HPA)以及自定义资源定义(Custom Resource ...
Kubernetes,简称k8s,是目前全球最流行的容器编排系统,用于自动化容器化的应用程序部署、扩展和管理。"kubernetes-node-linux-amd64.tar.gz" 文件是专为在基于Linux的AMD64(x86_64)架构上运行的Kubernetes节点...
- **健康检查**:通过 liveness 和 readiness 探针监测 Pod 的健康状态。 3. **Kubernetes 应用部署** - **yaml 文件配置**:通过编写 yaml 文件定义应用的配置,包括容器镜像、资源限制、环境变量等。 - **滚动...
3. **健康检查与熔断**:SCK能够利用Kubernetes的Pod健康检查,将这些检查结果暴露给Spring Boot的健康检查端点,同时支持与Spring Cloud的Hystrix熔断器集成,增强系统的容错性。 4. **负载均衡与熔断**:SCK可以...
Kubernetes(简称K8s)是一种强大的容器编排系统,它使得在云环境中管理和部署应用程序变得更加高效和灵活。本指南将深入探讨Kubernetes的最佳实践,帮助用户更好地理解和优化其Kubernetes集群的运行。 一、设计高...
4. **健康检查和探针**:通过定义Liveness和Readiness Probe,Kubernetes可以监测RabbitMQ节点的健康状态,并在必要时重启不健康的Pod。 5. **扩展性**:如果需要增加集群规模,只需修改StatefulSet的副本数量,...
Spring Cloud Kubernetes是一个强大的工具,它允许我们在Kubernetes环境中轻松管理和利用其服务发现、配置、健康检查等功能。 首先,我们需要在Spring Boot项目中添加必要的依赖。引入`spring-boot-starter-web`是...
Kubernetes是当今最流行的容器编排系统,用于管理分布式应用程序。`kubernetes-observer` 工具专注于帮助用户验证Kubernetes集群是否遵循了最佳实践,从而确保集群的安全性、高效性和稳定性。下面,我们将深入探讨...
"kubernetes-node:在Kubernetes中使用节点应用程序的简单练习"是一个主题,旨在帮助用户理解如何在Kubernetes节点上部署和管理应用程序。这个练习可能涵盖了从创建Pod到监控其运行状态等一系列操作。 首先,了解...
健康检查分为两部分:节点健康检查和应用程序健康检查。 1. 节点健康检查: - `kubectl get nodes`:列出所有节点及其状态,检查是否有NotReady或Unschedulable的节点。 - `kubectl describe node <node_name>`:...
1. **Kubernetes 客户端库**:Java 应用程序会使用 Kubernetes 官方的 Java SDK 来与 API 服务器通信,获取 Pod 状态和配置信息。 2. **配置管理**:配置文件会定义哪些命名空间、服务或标签选择器应该被监控,以及...
在IT行业中,Kubernetes(通常称为K8s)是一个强大的容器编排系统,它使得部署、管理和扩展容器化应用程序变得更加简单。"kubernetes-tools-and-scripts"这个资源集合很可能包含了用于辅助Kubernetes操作的各种实用...
7. **节点健康检查** Kubernetes通过心跳检测和liveness/readiness probes监控节点健康。心跳检测确保节点与API服务器的连接正常,而探测则检查Pods是否正常运行。 8. **存储和持久卷** 节点上还可以挂载持久卷...
描述中的“满足要求Kubernetes的应用程序模板(Golang)”暗示了该模板遵循Kubernetes的最佳实践,包含了必要的组件和配置,如部署配置、服务发现、健康检查等,以便于应用在Kubernetes环境中高效运行。Golang作为...
- 如何利用Kubernetes的健康检查和自愈特性确保服务的高可用性。 通过深入研究这些示例,开发者不仅可以掌握Java编程,还能了解如何在分布式系统中有效地利用Akka的并行处理能力,以及如何构建可靠的数据流处理系统...
5. **Health Checks**:理解如何为Camel应用添加健康检查端点,以便Kubernetes可以监控应用的状态并根据需要自动重启或扩展。 6. **持续集成/持续部署(CI/CD)**:可能涉及Jenkins、GitOps或其他CI/CD工具,这些工具...
6. **故障排查与监控**:书中可能包含一些关于日志聚合、指标收集和健康检查的示例,这些都是 Kubernetes 集群监控和故障排查的关键。 7. **安全性**:Kubernetes 提供了多种安全特性,如 Secrets 和 ConfigMaps ...