探针
Kubernetes提供的探针机制,可以用来检测目标是否存活或是否可用。
其提供了两类探针:
存活探针(liveness probe)
就绪探针(readiness probe)
存活探针(liveness probe)
存活探针是用来检查容器是否在运行,可以为Pod中的每个容器单独指定存活探针,若探测失败,则会定期执行探针并重启容器。
存活探针有三种探测机制:
HTTP GET针对设定的URL执行请求,根据响应状态码判断容器状态(2xx或3xx为成功,其他或不响应为失败);
TCP套接字:与指定端口建立TCP连接,建立失败则探测失败;
Exec:在容器内执行任意命令,根据命令返回的状态码判断容器状态(0为成功,其他为失败);
创建探针
在下面这个例子中,将展示如何使用这三种探测机制:
apiVersion: v1
kind: Pod
metadata:
name: liveness
labels:
test: liveness
spec:
restartPolicy: OnFailure
containers:
- name: liveness
image: busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
livenessProbe: # 定义执行liveness检测的方法(用来确定何时通过重启容器实现自愈)
exec: # exec探测机制
command: # 用于检测使用的命令,以下命令返回0,表示正确,返回1,则不正确,需要做出操作,若连续执行3次探测均失败,则会杀掉该Pod,并重启
- cat
- /tmp/healthy
httpGet: # HTTP GET探针,对容器的IP地址执行HTTP GET请求,若响应状态码不代表错误。则被认为探测成功
path: / # http请求的路径
port: 8080 # 探针连接的网络端口
tcpSocket: # TCP套接字探针,尝试与容器指定端口建立TCP连接,如果建立成功则探测成功,否则失败
port: 8081
initialDelaySeconds: 10 # 容器创建后10s再开始检测
periodSeconds: 5 # 每5秒执行一次liveness检测
就绪探针(readiness probe)
就绪探针是用来检查容器是否准备就绪,是否可以加入Service接收客户端请求,可以为Pod中的每个容器单独指定就绪探针,若探测失败,则Pod状态不会变成Ready。
就绪探针同样有三种探测机制,与存活探针一样:
HTTP GET针对设定的URL执行请求,根据响应状态码判断容器状态(2xx或3xx为成功,其他或不响应为失败);
TCP套接字:与指定端口建立TCP连接,建立失败则探测失败;
Exec:在容器内执行任意命令,根据命令返回的状态码判断容器状态(0为成功,其他为失败);
创建探针
apiVersion: v1
kind: Pod
metadata:
name: readiness
labels:
test: readiness
spec:
restartPolicy: OnFailure
containers:
- name: readiness
image: busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
readinessProbe: # 定义执行readiness检测的方法(用来确定何时将容器加入Service的Endpoint列表中,向外界提供服务)
exec: # exec探测机制
command: # 用于检测使用的命令,以下命令返回0,表示正确,返回1,则不正确,需要做出操作,若连续执行3次探测均失败,则会将READY置为0,即不可用
- cat
- /tmp/healthy
httpGet: # HTTP GET探针,对容器的IP地址执行HTTP GET请求,若响应状态码不代表错误。则被认为探测成功
path: / # http请求的路径
port: 8080 # 探针连接的网络端口
tcpSocket: # TCP套接字探针,尝试与容器指定端口建立TCP连接,如果建立成功则探测成功,否则失败
port: 8081
initialDelaySeconds: 10 # 容器创建后10s再开始检测
periodSeconds: 5 # 每5秒执行一次readiness检测
Last updated
Was this helpful?