`
lykops
  • 浏览: 86206 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

kubernetes--应用程序健康检查

 
阅读更多

本文基于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。


分享到:
评论

相关推荐

    K8S安装包之kubernetes-clinet-linux-amd64

    Kubernetes,简称K8s,是Google开源的一种容器编排系统,用于自动化容器化的应用程序部署、扩展和管理。这个“K8S安装包之kubernetes-client-linux-amd64”是针对Linux AMD64架构的Kubernetes客户端工具,它使得用户...

    kubernetes-client-linux-amd64.tar.gz

    1. **创建和管理部署**: 用户可以通过`kubectl create`命令部署应用程序,定义服务、部署、配置卷等资源对象。 2. **查询资源**: 使用`kubectl get`可以查看集群中的各种资源,如Pods、Services、Deployments、...

    kubernetes-node-1.18.3-linux-amd64.tar.gz 二进制安装包下载

    Kubernetes是当今最流行的容器编排系统,用于管理分布式应用程序和服务。在这个"Kubernetes-node-1.18.3-linux-amd64.tar.gz"压缩包中,包含了在Linux平台上安装Kubernetes节点所需的关键组件,主要面向AMD64架构。...

    kubernetes-zh中文指南.pdf

    3. **部署配置**:这一章节将详细阐述如何在Kubernetes上部署应用程序,包括使用YAML文件定义资源对象、应用滚动更新、水平自动扩缩(Horizontal Pod Autoscaler, HPA)以及自定义资源定义(Custom Resource ...

    kubernetes-node-linux-amd64.tar.gz

    Kubernetes,简称k8s,是目前全球最流行的容器编排系统,用于自动化容器化的应用程序部署、扩展和管理。"kubernetes-node-linux-amd64.tar.gz" 文件是专为在基于Linux的AMD64(x86_64)架构上运行的Kubernetes节点...

    kubernetes-learning.zip

    - **健康检查**:通过 liveness 和 readiness 探针监测 Pod 的健康状态。 3. **Kubernetes 应用部署** - **yaml 文件配置**:通过编写 yaml 文件定义应用的配置,包括容器镜像、资源限制、环境变量等。 - **滚动...

    spring-cloud-kubernetes-1.1.2.RELEASE.tar.gz

    3. **健康检查与熔断**:SCK能够利用Kubernetes的Pod健康检查,将这些检查结果暴露给Spring Boot的健康检查端点,同时支持与Spring Cloud的Hystrix熔断器集成,增强系统的容错性。 4. **负载均衡与熔断**:SCK可以...

    Kubernetes-Best-Practices

    Kubernetes(简称K8s)是一种强大的容器编排系统,它使得在云环境中管理和部署应用程序变得更加高效和灵活。本指南将深入探讨Kubernetes的最佳实践,帮助用户更好地理解和优化其Kubernetes集群的运行。 一、设计高...

    kubernetes-rabbitmq-cluster:适用于kubernetes的可部署的Rabbitmq集群

    4. **健康检查和探针**:通过定义Liveness和Readiness Probe,Kubernetes可以监测RabbitMQ节点的健康状态,并在必要时重启不健康的Pod。 5. **扩展性**:如果需要增加集群规模,只需修改StatefulSet的副本数量,...

    Springboot整合Spring Cloud Kubernetes读取ConfigMap支持自动刷新配置的教程

    Spring Cloud Kubernetes是一个强大的工具,它允许我们在Kubernetes环境中轻松管理和利用其服务发现、配置、健康检查等功能。 首先,我们需要在Spring Boot项目中添加必要的依赖。引入`spring-boot-starter-web`是...

    kubernetes-observer:验证Kubernetes集群中的最佳实践

    Kubernetes是当今最流行的容器编排系统,用于管理分布式应用程序。`kubernetes-observer` 工具专注于帮助用户验证Kubernetes集群是否遵循了最佳实践,从而确保集群的安全性、高效性和稳定性。下面,我们将深入探讨...

    kubernetes-node:在Kubernetes中使用节点应用程序的简单练习

    "kubernetes-node:在Kubernetes中使用节点应用程序的简单练习"是一个主题,旨在帮助用户理解如何在Kubernetes节点上部署和管理应用程序。这个练习可能涵盖了从创建Pod到监控其运行状态等一系列操作。 首先,了解...

    Kubernetes集群的基本健康检查-Shell-下载

    健康检查分为两部分:节点健康检查和应用程序健康检查。 1. 节点健康检查: - `kubectl get nodes`:列出所有节点及其状态,检查是否有NotReady或Unschedulable的节点。 - `kubectl describe node &lt;node_name&gt;`:...

    kubernetes-cassandra-seed-provider

    1. **Kubernetes 客户端库**:Java 应用程序会使用 Kubernetes 官方的 Java SDK 来与 API 服务器通信,获取 Pod 状态和配置信息。 2. **配置管理**:配置文件会定义哪些命名空间、服务或标签选择器应该被监控,以及...

    kubernetes-tools-and-scripts

    在IT行业中,Kubernetes(通常称为K8s)是一个强大的容器编排系统,它使得部署、管理和扩展容器化应用程序变得更加简单。"kubernetes-tools-and-scripts"这个资源集合很可能包含了用于辅助Kubernetes操作的各种实用...

    kubernetes-node

    7. **节点健康检查** Kubernetes通过心跳检测和liveness/readiness probes监控节点健康。心跳检测确保节点与API服务器的连接正常,而探测则检查Pods是否正常运行。 8. **存储和持久卷** 节点上还可以挂载持久卷...

    Go-满足要求Kubernetes的应用程序模板Golang

    描述中的“满足要求Kubernetes的应用程序模板(Golang)”暗示了该模板遵循Kubernetes的最佳实践,包含了必要的组件和配置,如部署配置、服务发现、健康检查等,以便于应用在Kubernetes环境中高效运行。Golang作为...

    java-akka-kafka-kubernetes-samples:AKKA,Kafka和kubernetes样本

    - 如何利用Kubernetes的健康检查和自愈特性确保服务的高可用性。 通过深入研究这些示例,开发者不仅可以掌握Java编程,还能了解如何在分布式系统中有效地利用Akka的并行处理能力,以及如何构建可靠的数据流处理系统...

    kubernetes-apache-camel-sample

    5. **Health Checks**:理解如何为Camel应用添加健康检查端点,以便Kubernetes可以监控应用的状态并根据需要自动重启或扩展。 6. **持续集成/持续部署(CI/CD)**:可能涉及Jenkins、GitOps或其他CI/CD工具,这些工具...

    kubernetes-in-action:来自 Kubernetes in Action 一书中的代码

    6. **故障排查与监控**:书中可能包含一些关于日志聚合、指标收集和健康检查的示例,这些都是 Kubernetes 集群监控和故障排查的关键。 7. **安全性**:Kubernetes 提供了多种安全特性,如 Secrets 和 ConfigMaps ...

Global site tag (gtag.js) - Google Analytics