文档

在Knative中配置端口探测

更新时间:

在Knative中,探针主要用于监测和管理服务的健康状况和可用性。通过配置存活探针(Liveness Probe)和就绪探针(Readiness Probe),您可以确保应用程序处于健康状态且准备好接收流量。本文介绍如何在Knative中配置自定义监听端口。

工作原理

您可以通过配置存活探针(Liveness Probe)和就绪探针(Readiness Probe)监测Knative服务的健康状态和可用性。相较于Kubernetes社区的探针策略,Knative采用更频繁的积极探测,以最大限度减少冷启动时间,加速Pod从启动到运行的过程。

  • Liveness Probe:存活探针用于监视容器的健康状况。如果容器处于失败状态或在容器运行中服务未成功启动,存活探针将重新启动容器。

  • Readiness Probe:配置就绪探针可以有效管理应用的自动扩缩容过程,确保只有准备好的实例可以接收流量,从而提升系统的可靠性和响应效率。

下图介绍Knative探针的工作流程。

image
  1. 在Knative Service CR中定义Readiness Probe或Liveness Probe。

  2. kubelet针对指定的容器执行Liveness Probe。

  3. Knative重写并由queue-proxy容器执行Readiness Probe。从Activator组件或queue-proxy容器等特定地方开始进行探测,以确保整个网络链路已配置并准备就绪。

    说明

    未定义探针时,Knative将为主容器(Primary Container)定义默认的就绪探针。它将检查Knative服务流量端口上的TCP Socket。

  4. Knative为queue-proxy容器本身定义了一个Readiness Probe。queue-proxy的运行状况聚合了所有容器(主容器和Sidecar)重写Readiness Probe的所有结果。当queue-proxy容器探针返回成功响应并且Knative网络层配置完成,Knative将认为Pod健康并准备好提供流量。

前提条件

配置自定义监听端口

配置方式

您可以在Knative Service中配置readinessProbelivenessProbe字段定义Readiness Probe和Liveness Probe。配置方式与Kubernetes中一致,请参见配置存活、就绪和启动探针

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: runtime
  namespace: default
spec:
  template:
    spec:
      containers:
      - name: first-container
        image: <YOUR-IMAGE>      # 请将<YOUR-IMAGE>替换为您的镜像名称。
        ports:
          - containerPort: 8080
        readinessProbe:       # 容器启动后用来确定容器何时就绪的健康检查。
          httpGet:            # 使用TCP Socket连接进行存活检查的端口。
            port: 8080        # 这里可以配置一个与containerPort不同的端口,用于服务的就绪探测。
            path: "/health"
        livenessProbe:            # 检查容器的存活状态。
          tcpSocket:
            port: 8080
      - name: second-container
        image: <YOUR-IMAGE>
        readinessProbe:             
          httpGet:
            port: 8089
            path: "/health"
        livenessProbe:              
          tcpSocket:
            port: 8089

支持的探测类型

探测类型

说明

httpGet

通过HTTP GET请求检查服务健康和存活状况,并依据响应状态码确定成功与否。

tcpSocket

通过尝试打开一个TCP连接来检查服务健康和存活状况。

exec

在容器内执行指定命令,并依据命令的退出码确定探测是否成功。

grpc

通过调用gRPC Health Checking Protocol定义的方法判断服务的健康和存活状况。

说明

由于当前Knative内置了PreStop用于处理流量优雅下线,因此不支持自定义PreStop探测类型。