配置 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 协议的应用程序配置健康检查,以检查应用程序是否已准备就绪、正在运行并按我们的要求启动。
先决条件
- 可以使用任何云提供商的 Kubernetes 集群。甚至可以使用Minikube或Kind创建单节点集群。
- Docker Desktop - 用于将应用程序容器化
- 使用 Docker Hub帐户将容器镜像推送到 Docker 镜像仓库。
- 我们已安装Node.js,因为我们将使用一个Node.js示例应用程序。
教程
Fork 示例应用程序 - https://github.com/pavanbelagatti/Kubernetes-Probes-Tutorial
使用以下命令进入主应用程序文件夹
cd Kubernetes-Probes-Tutorial
使用以下命令安装依赖项
npm install
使用以下命令在本地运行应用程序。
node app.js
你应该能看到应用程序在 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" ]
此 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 .
您可以在 Docker Hub 帐户的存储库中看到已推送的镜像。
接下来,部署清单文件。在应用程序文件夹中,您会看到一个 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
您可以在上面的 yaml 文件中看到所使用的镜像和配置的健康检查。
我们的 YAML 文件已经准备就绪。假设您已经搭建好一个正在运行的集群,让我们使用以下命令部署上述清单文件。
kubectl apply -f deployment.yaml
你应该能看到文件部署成功的信息。
已创建 deployment.apps/notes-app-deployment
让我们使用以下命令检查 pod 状态,以确保 pod 正在运行。
kubectl get pods
让我们使用以下命令来描述一个 pod。
kubectl describe pod notes-app-deployment-7fb6f5d74b-hw5fn
在描述 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






