在Kubernetes中,探针(Probe)是一种用于检查容器是否正常运行的机制。探针分为两种类型:Liveness探针和Readiness探针。Liveness探针用于检查容器是否仍在运行,而Readiness探针用于检查容器是否准备好接收流量。
探针可以使用以下三种方式之一定义在Pod中:
HTTP GET
使用HTTP GET探测器时,Kubernetes会向Pod的容器发送HTTP GET请求,并等待容器返回200状态码。如果容器返回200状态码,则Kubernetes认为容器正在运行,并继续向容器发送流量。如果容器未返回200状态码,则Kubernetes认为容器已停止,并开始重启容器。
下面是一个使用HTTP GET探测器的示例yaml文件:
代码语言:javascript复制apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
spec:
containers:
- name: myapp-container
image: myapp-image
ports:
- containerPort: 80
readinessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 3
在上面的示例中,Readiness探针被定义为一个HTTP GET请求,发送到容器的端口80上。如果容器返回200状态码,则Kubernetes认为容器已准备好接收流量。探针的初始化延迟为5秒,间隔为10秒,失败阈值为3。
TCP
使用TCP探针时,Kubernetes会尝试连接Pod的容器的指定端口,并等待成功的连接。如果连接成功,则Kubernetes认为容器正在运行,并继续向容器发送流量。如果连接失败,则Kubernetes认为容器已停止,并开始重启容器。
下面是一个使用TCP探针的示例yaml文件:
代码语言:javascript复制apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
spec:
containers:
- name: myapp-container
image: myapp-image
ports:
- containerPort: 80
readinessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 3
在上面的示例中,Readiness探针被定义为一个TCP连接,连接到容器的端口80。如果连接成功,则Kubernetes认为容器已准备好接收流量。探针的初始化延迟为5秒,间隔为10秒,失败阈值为3。
Exec
使用Exec探针时,Kubernetes会在Pod的容器中执行指定的命令,并等待命令成功执行。如果命令成功执行,则Kubernetes认为容器正在运行,并继续向容器发送流量。如果命令未成功执行,则Kubernetes认为容器已停止,并开始重启容器。
下面是一个使用Exec探针的示例yaml文件:
代码语言:javascript复制apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
spec:
containers:
- name: myapp-container
image: myapp-image
ports:
- containerPort: 80
readinessProbe:
exec:
command:
- /bin/sh
- -c
- ps aux | grep myapp
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 3
在上面的示例中,Readiness探针被定义为一个执行命令,检查容器中是否存在名为"myapp"的进程。如果命令成功执行,则Kubernetes认为容器已准备好接收流量。探针的初始化延迟为5秒,间隔为10秒,失败阈值为3。
需要注意的是,Exec探针需要在容器中安装支持执行命令的工具,例如bash或sh。
除了Readiness探针,Liveness探针也可以使用上述三种方式之一进行定义。唯一的区别是Liveness探针用于检测容器是否仍在运行,而不是检测容器是否准备好接收流量。例如,以下是一个使用Exec探针的Liveness探针示例yaml文件:
代码语言:javascript复制apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
spec:
containers:
- name: myapp-container
image: myapp-image
ports:
- containerPort: 80
livenessProbe:
exec:
command:
- /bin/sh
- -c
- ps aux | grep myapp
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 3
在上面的示例中,Liveness探针被定义为一个执行命令,检查容器中是否存在名为"myapp"的进程。如果命令成功执行,则Kubernetes认为容器正在运行。探针的初始化延迟为5秒,间隔为10秒,失败阈值为3。