在 Kubernetes 中使用 Liveness 和 Readiness 探针的方法

在 Kubernetes 中,探针(probe)是用于判断容器是否处于健康状态的工具。其中 Liveness 探针用于判断容器是否处于可用状态,而 Readiness 探针则用于判断容器是否处于准备就绪的状态。使用 Liveness 和 Readiness 探针可以帮助我们在保证容器可用性的同时,还能够确保整个应用程序的稳定性。

本文将详细介绍在 Kubernetes 中使用 Liveness 和 Readiness 探针的方法、必要性以及如何编写示例代码。我们希望通过本文的学习,可以掌握如何使用探针来提高 Kubernetes 集群的稳定性。

Liveness 探针

Liveness 探针用于检测容器是否处于可用状态。当容器在运行过程中出现问题时,Liveness 探针可以自动检测并重启容器,以保证应用程序的可用性。

在 Kubernetes 中,我们可以通过 Liveness 探针来判断容器是否处于可用状态。Liveness 探针可以有三种状态,分别是:Success、Failure 和 Unknown。

  • Success:表示容器处于可用状态。
  • Failure:表示容器未能正确地处理 Liveness 探针,即容器出现问题。
  • Unknown:表示 Kubernetes 并没有收到关于容器状态的信息,通常是由于网络等原因引起的。

当容器的 Liveness 探针失败时,Kubernetes 会根据失效的超时时间进行重启。例如,在下面的示例代码中,我们设置了 Liveness 探针的失效时间为 5 秒钟,当容器连续三次 Liveness 探针失败后,Kubernetes 就会认为该容器无法正常运行,需要进行重启。

apiVersion: v1
kind: Pod
metadata:
  name: app-pod
spec:
  containers:
  - name: app-container
    image: app:v1
    livenessProbe:
      httpGet:
        path: /healthcheck
        port: 8080
      initialDelaySeconds: 30
      periodSeconds: 10
      timeoutSeconds: 5
      failureThreshold: 3

在上面的示例代码中,我们使用 httpGet 指定了 Liveness 探针的请求地址和端口号。initialDelaySeconds 参数表示容器启动后,等待多少秒之后开始进行 Liveness 探针检测;periodSeconds 表示 Liveness 探针的检测间隔,即每 10 秒进行一次 Liveness 探针检测;timeoutSeconds 表示 Liveness 探针的超时时间,即如果在 5 秒钟内没有收到响应,则认为 Liveness 探针失败;failureThreshold 表示容器连续 Liveness 探针失败的次数上限,即超过 3 次 Liveness 探针失败,Kubernetes 就会重启该容器。

Readiness 探针

Readiness 探针用于检测容器是否处于准备就绪状态。当容器处于准备就绪状态时,Kubernetes 就会将请求负载均衡到该容器上,保证请求能够成功响应。

在 Kubernetes 中,我们可以通过 Readiness 探针来判断容器是否处于准备就绪状态。Readiness 探针可以有三种状态,分别是:Success、Failure 和 Unknown。

  • Success:表示容器处于准备就绪状态。
  • Failure:表示容器未能正确处理 Readiness 探针,即容器不处于准备就绪状态。
  • Unknown:表示 Kubernetes 并没有收到关于容器状态的信息,通常是由于网络等原因引起的。

当容器的 Readiness 探针失败时,Kubernetes 将自动将容器从服务负载均衡器中删除,并将请求转发到其他容器上。

apiVersion: v1
kind: Pod
metadata:
  name: app-pod
spec:
  containers:
  - name: app-container
    image: app:v1
    readinessProbe:
      httpGet:
        path: /healthcheck
        port: 8080
      initialDelaySeconds: 30
      periodSeconds: 10
      timeoutSeconds: 5
      failureThreshold: 3

在上述示例代码中,我们同样使用了 httpGet 指定 Readiness 探针的请求地址和端口号。initialDelaySeconds 参数表示容器启动后,等待多少秒之后开始进行 Readiness 探针检测;periodSeconds 表示 Readiness 探针的检测间隔,即每 10 秒进行一次 Readiness 探针检测;timeoutSeconds 表示 Readiness 探针的超时时间,即如果在 5 秒钟内没有收到响应,则认为 Readiness 探针失败;failureThreshold 表示容器连续 Readiness 探针失败的次数上限,即超过 3 次 Readiness 探针失败,Kubernetes 就将该容器从服务负载均衡器中删除。

技术应用

在实际开发中,我们需要根据应用程序的需求来合理地使用 Liveness 和 Readiness 探针。需要注意的是,我们可以为一个 Pod 中的多个容器分别设置 Liveness 和 Readiness 探针,以确保每个容器的可用性和准备就绪状态。

当容器出现崩溃或不响应时,Liveness 探针可以自动检测并重启容器,提高应用程序的可用性。Readiness 探针则可以确保负载均衡器只分配请求到处于准备就绪状态的容器上,保证整个应用程序的稳定性。

示例代码

在示例代码中,我们将展示如何使用探针来判断容器是否处于可用状态和准备就绪状态。我们使用了一个简单的 Web 应用,通过访问 /healthcheck 接口来检测该应用是否处于可用状态。

apiVersion: v1
kind: Pod
metadata:
  name: app-pod
spec:
  containers:
  - name: app-container
    image: app:v1
    livenessProbe:
      httpGet:
        path: /healthcheck
        port: 8080
      initialDelaySeconds: 30
      periodSeconds: 10
      timeoutSeconds: 5
      failureThreshold: 3
    readinessProbe:
      httpGet:
        path: /healthcheck
        port: 8080
      initialDelaySeconds: 30
      periodSeconds: 10
      timeoutSeconds: 5
      failureThreshold: 3

在上述示例代码中,我们为 app-container 容器设置了 Liveness 和 Readiness 探针,并将探针请求发送到 /healthcheck 接口上。我们设置了 30 秒的初始延迟时间,通过 httpGet 发送请求,并设置了 10 秒的检测间隔和 5 秒的超时时间。如果连续三次 Liveness 或 Readiness 探针检测失败,Kubernetes 将自动重启容器或者将容器排除在服务负载均衡器之外。

总结

本文详细介绍了在 Kubernetes 中使用 Liveness 和 Readiness 探针的方法、必要性以及示例代码。通过学习本文,我们可以理解探针的重要性,并了解如何编写代码来检测容器的可用性和准备就绪状态。希望本文能够对大家理解 Kubernetes 中的探针有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65916293eb4cecbf2d68d8b0


纠错反馈