Kubernetes 中的 Containerprobe

KubernetesKubernetesIntermediate
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在 Kubernetes 中,探针(probe)是一种诊断工具,用于确定容器是否存活并准备好接收流量。探针有两种类型:存活探针(liveness probe)和就绪探针(readiness probe)。在本实验中,我们将重点介绍 ContainerProbe,这是一种用于检测容器何时准备好接收流量的工具。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("`Kubernetes`")) -.-> kubernetes/BasicsGroup(["`Basics`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/BasicCommandsGroup(["`Basic Commands`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/AdvancedCommandsGroup(["`Advanced Commands`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["`Troubleshooting and Debugging Commands`"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("`Initialization`") kubernetes/BasicCommandsGroup -.-> kubernetes/get("`Get`") kubernetes/BasicCommandsGroup -.-> kubernetes/create("`Create`") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("`Apply`") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("`Describe`") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("`Exec`") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/logs("`Logs`") subgraph Lab Skills kubernetes/initialization -.-> lab-12263{{"`Kubernetes 中的 Containerprobe`"}} kubernetes/get -.-> lab-12263{{"`Kubernetes 中的 Containerprobe`"}} kubernetes/create -.-> lab-12263{{"`Kubernetes 中的 Containerprobe`"}} kubernetes/apply -.-> lab-12263{{"`Kubernetes 中的 Containerprobe`"}} kubernetes/describe -.-> lab-12263{{"`Kubernetes 中的 Containerprobe`"}} kubernetes/exec -.-> lab-12263{{"`Kubernetes 中的 Containerprobe`"}} kubernetes/logs -.-> lab-12263{{"`Kubernetes 中的 Containerprobe`"}} end

启动 Minikube 集群

在创建资源之前,你需要一个正在运行的 Kubernetes 集群。Minikube 是一个轻量级的 Kubernetes 环境,可以在你的本地机器上运行。

  1. 导航到工作目录

    打开终端并导航到默认的项目文件夹:

    cd /home/labex/project
  2. 启动 Minikube

    启动 Minikube 以初始化一个 Kubernetes 集群:

    minikube start
    • 此命令将在你的本地机器上设置一个单节点的 Kubernetes 集群。
    • 根据系统性能,Minikube 可能需要几分钟才能启动。
  3. 验证 Minikube 是否正在运行

    检查 Minikube 集群的状态:

    minikube status
    • 查找 kubeletapiserver 等组件是否显示为 Running
    • 如果集群未运行,请重新运行 minikube start

如果启动 Minikube 时遇到问题,可以使用 minikube delete 来重置环境(如有需要)。

创建 Deployment

第一步是在 Kubernetes 中创建一个 Deployment。我们将使用这个 Deployment 来测试 ContainerProbe。

  1. /home/labex/project 目录下创建一个名为 deployment.yaml 的新文件。
  2. 将以下代码复制并粘贴到文件中:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: containerprobe-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: containerprobe
  template:
    metadata:
      labels:
        app: containerprobe
    spec:
      containers:
        - name: containerprobe
          image: nginx
          ports:
            - containerPort: 80

此代码创建了一个具有一个副本的 Deployment,一个带有标签 app: containerprobe 的选择器,以及一个运行 nginx 镜像的容器。

  1. 将 Deployment 应用到你的集群中:
kubectl apply -f deployment.yaml

添加存活探针(Liveness Probe)

下一步是为 nginx 容器添加一个存活探针(liveness probe)。存活探针用于确定容器是否存活。如果探针失败,Kubernetes 将重启容器。

  1. 使用以下内容更新 /home/labex/project 目录中的 deployment.yaml 文件:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: containerprobe-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: containerprobe
  template:
    metadata:
      labels:
        app: containerprobe
    spec:
      containers:
        - name: containerprobe
          image: nginx
          ports:
            - containerPort: 80
          livenessProbe:
            httpGet:
              path: /
              port: 80

此代码指定存活探针应向端口 80 的根路径发送 HTTP GET 请求。

  1. 更新 Deployment:
kubectl apply -f deployment.yaml

测试存活探针(Liveness Probe)

现在我们已经添加了存活探针,可以测试它是否正常工作。

  1. 获取 Pod 名称:
kubectl get pods -l app=containerprobe -o jsonpath='{.items[0].metadata.name}'

此命令获取由 Deployment 创建的 Pod 的名称。

  1. 获取存活探针的状态:
kubectl describe pod <pod-name>

<pod-name> 替换为上一步中获取的 Pod 名称。

你应该会看到包含以下内容的输出:

Liveness: http-get http://:80/ delay=0s timeout=1s period=10s #success=1 #failure=3

这表明存活探针已正确配置。

添加就绪探针(Readiness Probe)

下一步是为 nginx 容器添加一个就绪探针(readiness probe)。就绪探针用于确定容器是否准备好接收流量。如果探针失败,Kubernetes 将不会向容器发送流量。

  1. deployment.yaml 文件的容器定义中添加以下代码:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: containerprobe-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: containerprobe
  template:
    metadata:
      labels:
        app: containerprobe
    spec:
      containers:
        - name: containerprobe
          image: nginx
          ports:
            - containerPort: 80
          livenessProbe:
            httpGet:
              path: /
              port: 80
          readinessProbe:
            httpGet:
              path: /
              port: 80

此代码指定就绪探针应向端口 80 的根路径发送 HTTP GET 请求。

  1. 更新 Deployment:
kubectl apply -f deployment.yaml

测试就绪探针(Readiness Probe)

现在我们已经添加了就绪探针,可以测试它是否正常工作。

  1. 获取 Pod 名称:
kubectl get pods -l app=containerprobe -o jsonpath='{.items[0].metadata.name}'

此命令获取由 Deployment 创建的 Pod 的名称。

  1. 获取就绪探针的状态:
kubectl describe pod <pod-name>

<pod-name> 替换为上一步中获取的 Pod 名称。

你应该会看到包含以下内容的输出:

Readiness: http-get http://:80/ delay=0s timeout=1s period=10s #success=1 #failure=3

这表明就绪探针已正确配置。

总结

在本实验中,我们学习了如何在 Kubernetes 中使用 ContainerProbe。我们创建了一个 Deployment,添加了存活探针(liveness probe),测试了存活探针,添加了就绪探针(readiness probe),并测试了就绪探针。通过使用 ContainerProbe,我们可以确保容器已准备好接收流量并正常运行。

您可能感兴趣的其他 Kubernetes 教程