如何使用Kubernetes的Readiness Probes检测应用的准备状态?

Kubernetes的Readiness Probes是用于检测应用程序是否准备就绪的一个特性,它允许您精确的控制服务是否该可用于负载均衡,否则负载均衡器可能会将流量发送到未准备就绪的应用程序或容器。

Kubernetes可以创建基于HTTP(S)请求的Readiness Probes。当需要检测容器的时候,每隔一段时间,Kubernetes会向容器内的特定端口发起一个HTTP或HTTPS请求,如果请求的响应状态码在200-399范围内,那么就可以判断容器已就绪;否则容器仍未就绪,Kubernetes仍然继续发送请求,直到Readiness Probe处于容器就绪的状态,并将来自负载均衡器的数据发送给它。

Kubernetes还可以在容器内发起TCP Socket请求,如果套接字建立成功,则表明容器已经就绪,可以处理负载均衡器发送的数据;否则,Kubernetes将继续发起请求,直到容器处于就绪状态。

Kubernetes也支持直接通过检测容器可以执行的命令来检测容器的Readiness。只要Kubernetes在容器内该命令的执行结果能返回0,即表明容器已经就绪,负载均衡器可以通过负载均衡器发送数据到该容器。

可以通过在Kubernetes Deployment配置文件中添加相应的参数来使用Readiness Probes,由于Kubernetes的Deployment分为两个阶段,分别为Pod启动阶段和应用准备就绪阶段,因此可以分别为Pod启动阶段和应用准备就绪阶段配置不同的Readiness Probes,以下是Kubernetes Deployment配置文件的示例:


apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello
spec:
  selector:
    matchLabels:
      app: hello
  replicas: 10
  template:
    metadata:
      labels:
        app: hello
    spec:
      containers:
      - name: hello
        image: nginx
        imagePullPolicy: Always
      readinessProbe:
        failureThreshold: 5
        httpGet:
          path: /readiness
          port: 80
        periodSeconds: 5
        successThreshold: 1
        timeoutSeconds: 1
      livenessProbe:
        failureThreshold: 2
        httpGet:
          path: /liveness
          port: 80
        periodSeconds: 10
        successThreshold: 1
        timeoutSeconds: 1

通过上面示例,Kubernetes在Pod启动阶段会发起一个HTTP GET请求,访问/liveness接口,HTTP请求的超时时间为1秒,重试间隔为10秒,失败次数为2次;在应用准备就绪阶段会发起另外一个HTTP请求,访问/readiness接口,HTTP请求的超时时间为1秒,重试间隔为5秒,失败次数为5次,只有满足全部请求的要求,才能将Pod标记为就绪状态,完成其任务。

随机文章