在Knative中,探针主要用于监测和管理服务的健康状况和可用性。通过配置存活探针(Liveness Probe)和就绪探针(Readiness Probe),您可以确保应用程序处于健康状态且准备好接收流量。本文介绍如何在Knative中配置自定义监听端口。
工作原理
您可以通过配置存活探针(Liveness Probe)和就绪探针(Readiness Probe)监测Knative服务的健康状态和可用性。相较于Kubernetes社区的探针策略,Knative采用更频繁的积极探测,以最大限度减少冷启动时间,加速Pod从启动到运行的过程。
Liveness Probe:存活探针用于监视容器的健康状况。如果容器处于失败状态或在容器运行中服务未成功启动,存活探针将重新启动容器。
Readiness Probe:配置就绪探针可以有效管理应用的自动扩缩容过程,确保只有准备好的实例可以接收流量,从而提升系统的可靠性和响应效率。
下图介绍Knative探针的工作流程。
在Knative Service CR中定义Readiness Probe或Liveness Probe。
kubelet针对指定的容器执行Liveness Probe。
Knative重写并由queue-proxy容器执行Readiness Probe。从Activator组件或queue-proxy容器等特定地方开始进行探测,以确保整个网络链路已配置并准备就绪。
说明未定义探针时,Knative将为主容器(Primary Container)定义默认的就绪探针。它将检查Knative服务流量端口上的TCP Socket。
Knative为queue-proxy容器本身定义了一个Readiness Probe。queue-proxy的运行状况聚合了所有容器(主容器和Sidecar)重写Readiness Probe的所有结果。当queue-proxy容器探针返回成功响应并且Knative网络层配置完成,Knative将认为Pod健康并准备好提供流量。
前提条件
已在集群中部署Knative。具体操作,请参见在ACK集群中部署Knative。
配置自定义监听端口
配置方式
您可以在Knative Service中配置readinessProbe
、livenessProbe
字段定义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
支持的探测类型
探测类型 | 说明 |
| 通过HTTP GET请求检查服务健康和存活状况,并依据响应状态码确定成功与否。 |
| 通过尝试打开一个TCP连接来检查服务健康和存活状况。 |
| 在容器内执行指定命令,并依据命令的退出码确定探测是否成功。 |
| 通过调用gRPC Health Checking Protocol定义的方法判断服务的健康和存活状况。 |
由于当前Knative内置了PreStop用于处理流量优雅下线,因此不支持自定义PreStop探测类型。