发布于 2026-01-06 1 阅读
0

配置 Kubernetes 就绪性和存活性探测 - 教程

配置 Kubernetes 就绪性和存活性探测 - 教程

Kubernetes是一个开源的容器编排平台,用于在云环境中管理和部署应用程序。它用于自动化容器化应用程序的部署、扩展和管理。Kubernetes 探针是管理应用程序健康状况的有效方法。本文将探讨 Kubernetes 探针、可用的不同类型以及如何在 Kubernetes 环境中实现它们。

什么是 Kubernetes 探测?

Kubernetes 健康检查

Kubernetes 探针是用于监控 Kubernetes 集群中应用程序和服务健康状况的健康检查机制。Kubernetes 探针通常使用 Kubernetes API 实现,该 API 允许它们查询应用程序或服务以获取信息。这些信息可用于确定应用程序或服务的健康状况。Kubernetes 探针还可以用于检测应用程序或服务的变化,并将通知发送到 Kubernetes 控制平面,以便其采取纠正措施。Kubernetes 探针是 Kubernetes 平台的重要组成部分,因为它们有助于确保应用程序和服务平稳运行。它们可用于在潜在问题变得严重之前检测到它们,从而使您能够快速采取纠正措施。

就绪探测成功表示容器已准备好接收流量。如果就绪探测成功,则容器被视为已准备就绪,可以开始接收来自其他容器、服务或外部客户端的请求。

存活探测成功表示容器仍在运行且功能正常。如果存活探测成功,则容器被视为存活且健康。如果存活探测失败,则容器被视为处于故障状态,Kubernetes 将尝试重启容器以恢复其功能。就绪探测和存活探测都会返回 HTTP 响应代码为 200-399 或 TCP 套接字连接成功的消息。如果探测失败,则会返回非 2xx 的 HTTP 响应代码或 TCP 连接失败,表明容器未就绪或未存活。

总而言之,Kubernetes 探测成功消息表明容器已准备好接收流量,或者仍在运行且功能正常,具体取决于探测类型。

Kubernetes 探针的类型

探针有三种类型:启动探针、就绪探针和存活探针。

启动准备就绪探测器

启动探测:启动探测用于确定容器是否已成功启动。这种类型的探测通常用于启动时间较长的应用程序,或者用于在准备好接收流量之前执行初始化任务的容器。启动探测仅在容器创建后运行一次,并且会延迟就绪探测和存活探测的启动,直到启动探测成功为止。如果启动探测失败,则认为容器启动失败,Kubernetes 将尝试重启容器。

就绪探测:就绪探测用于确定容器是否已准备好接收流量。这种探测用于确保容器完全启动并运行,并且在添加到服务负载均衡器之前可以接受传入连接。就绪探测可用于检查应用程序依赖项的可用性,或执行任何其他表明容器已准备好处理流量的检查。如果就绪探测失败,则容器将从服务负载均衡器中移除,直到探测再次成功为止。

存活探测:存活探测用于确定容器是否仍在运行且功能正常。这种类型的探测用于检测容器崩溃或挂起并从中恢复。存活探测可用于检查应用程序的响应能力,或执行任何其他表明容器仍然存活且健康的检查。如果存活探测失败,Kubernetes 将尝试重启容器以恢复其功能。

每种类型的探测器都有其自身的配置选项,例如要检查的端点、探测间隔以及成功和失败阈值。通过使用这些探测器,Kubernetes 可以确保容器正在运行且运行状况良好,并在容器无响应时采取相应的措施。

如何实现 Kubernetes 探针

Kubernetes 探针可以通过几种不同的方式实现。第一种方式是使用 Kubernetes API 查询应用程序或服务的信息。这些信息可用于判断应用程序或服务的运行状况。第二种方式是使用 HTTP 协议向应用程序或服务发送请求。该请求可用于检测应用程序或服务是否响应迅速,或者响应时间是否过长。第三种方式是使用自定义探针来检测应用程序或服务中的特定情况。自定义探针可用于检测资源使用情况、响应缓慢或应用程序或服务发生的变化等。

确定要使用的探测器类型后,即可使用 Kubernetes API 配置探测器。您可以指定探测器的频率、类型和参数。配置完成后,即可将其部署到 Kubernetes 集群。

今天,我将展示如何为部署在 Kubernetes 上使用 HTTP 协议的应用程序配置健康检查,以检查应用程序是否已准备就绪、正在运行并按我们的要求启动。

先决条件

教程

Fork 示例应用程序 - https://github.com/pavanbelagatti/Kubernetes-Probes-Tutorial

使用以下命令进入主应用程序文件夹

cd Kubernetes-Probes-Tutorial
Enter fullscreen mode Exit fullscreen mode

使用以下命令安装依赖项

npm install
Enter fullscreen mode Exit fullscreen mode

使用以下命令在本地运行应用程序。

node app.js
Enter fullscreen mode Exit fullscreen mode

你应该能看到应用程序在 3000 端口上运行。

在应用程序文件夹中,您应该会看到包含以下代码内容的 Dockerfile。

# Use an existing node image as base image
FROM node:14-alpine

# Set the working directory in the container
WORKDIR /app

# Copy package.json and package-lock.json to the container
COPY package*.json ./

# Install required packages
RUN npm install

# Copy all files to the container
COPY . .

# Expose port 3000
EXPOSE 3000

# Start the application
CMD [ "npm", "start" ]
Enter fullscreen mode Exit fullscreen mode

此 Dockerfile 用于创建我们应用程序的容器镜像并将其推送到 DockerHub。

接下来,使用以下命令构建镜像并将其推送到 Docker Hub。

docker buildx build --platform=linux/arm64 --platform=linux/amd64  -t docker.io/Docker Hub username/image name:tag --push  -f ./Dockerfile .
Enter fullscreen mode Exit fullscreen mode

您可以在 Docker Hub 帐户的存储库中看到已推送的镜像。
Dockerhub镜像

接下来,部署清单文件。在应用程序文件夹中,您会看到一个 deployment.yaml 文件,其中包含健康检查/探测,例如就绪探测和存活探测。

请注意,我们在 yaml 文件中使用了推送镜像的名称。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: notes-app-deployment
  labels:
    app: note-sample-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: note-sample-app
  template:
    metadata:
      labels:
        app: note-sample-app
    spec:
      containers:
      - name: note-sample-app-container
        image: pavansa/note-sample-app
        resources:
          requests:
            cpu: "100m"
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3000
        readinessProbe:
          httpGet:
            path: /
            port: 3000
        livenessProbe:
          httpGet:
            path: /
            port: 3000
          initialDelaySeconds: 30
          periodSeconds: 10
          timeoutSeconds: 5
Enter fullscreen mode Exit fullscreen mode

您可以在上面的 yaml 文件中看到所使用的镜像和配置的健康检查。

配置了健康检查

我们的 YAML 文件已经准备就绪。假设您已经搭建好一个正在运行的集群,让我们使用以下命令部署上述清单文件。

kubectl apply -f deployment.yaml
Enter fullscreen mode Exit fullscreen mode

你应该能看到文件部署成功的信息。

已创建 deployment.apps/notes-app-deployment

让我们使用以下命令检查 pod 状态,以确保 pod 正在运行。

kubectl get pods
Enter fullscreen mode Exit fullscreen mode

Kubernetes 运行 pod

让我们使用以下命令来描述一个 pod。

kubectl describe pod notes-app-deployment-7fb6f5d74b-hw5fn
Enter fullscreen mode Exit fullscreen mode

您应该看到以下结果
探针组

在描述 pod 时,您可以在上图中看到存活状态和就绪状态。

所有探测器都在执行

我们来看看活动部分
探测事件部分

您可以查看各种事件,例如已安排、已拉取、已创建和已启动。所有 pod 事件均已成功完成。

结论

Kubernetes 探针是 Kubernetes 平台的重要组成部分,它们有助于确保应用程序和服务平稳运行。探针可用于在潜在问题变得严重之前检测到它们,从而让您能够快速采取纠正措施。Kubernetes 探针分为两种类型:存活探针和就绪探针,此外还有自定义探针,可用于检测应用程序或服务中的特定条件。使用 Kubernetes API 即可轻松实现 Kubernetes 探针。

如果您正在寻找确保应用程序和服务健康运行的方法,Kubernetes 探针是理想之选。因此,请务必立即在您的 Kubernetes 环境中部署 Kubernetes 探针!

顺便说一句,如果你还没看过我关于在 Kubernetes 上部署应用程序的另一个教程,请查看一下。

另外,我还写了一篇关于 Kubernetes 部署策略的教程,请查看。

请查看Harness 持续交付模块,它适用于所有与 Kubernetes 相关的应用程序部署。

文章来源:https://dev.to/pavanbelagatti/configure-kubernetes-readiness-and-liveness-probes-tutorial-478p