购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.8.2 就绪探针

就绪探针用于周期性监控应用程序是否准备好接收流量,尤其适用于Pod通过Service对外暴露的场景。Service代理Pod如图3-6所示。

图3-6 Service代理Pod

当用户访问Service时,该Service会将流量转发到后端Pod。思考一个问题:Service在什么情况下才会将流量转发给Pod?

答案是Pod为准备就绪状态时,即当“READY”值两侧相等时。

如果Pod准备就绪,但应用程序出现异常,那么用户将访问失败。为了避免这样的问题,可以为容器配置就绪探针,根据“探针结果”来决定Pod是否准备就绪,而不是单纯地根据“容器状态”来决定。

就绪探针配置如下:

在上述配置中,“readinessProbe”部分定义了就绪探针。kubelet组件将在容器启动10 s后发送第一个探针,该探针向地址“http://<Pod IP>:80/index.html”发送HTTP请求。如果响应的HTTP状态码不是200~400,则kubelet组件判定探针失败,并将该Pod标记为“未准备就绪”,这样Service就会自动从后端移除该Pod,而无须为其转发流量。随后,每间隔20 s执行一次就绪探针。

创建Pod资源:

     [root@k8s-master ~]# kubectl apply -f pod-readiness.yaml

为该Pod创建一个Service:

    [root@k8s-master ~]# kubectl expose pod pod-readiness --port=80 --target-
  port=80

查看Service IP地址:

集群中任意节点都可以通过IP地址“10.110.172.152”访问后端Pod。

查看Endpoints对象,确认Service后端关联的Pod:

Endpoints对象由Kubernetes自动创建,负责动态收集和管理与Service相关联的Pod IP和端口,以确保后端Pod的信息始终保持最新。

我们尝试模拟应用程序故障,删除“index.html”文件:

    [root@k8s-master ~]# kubectl exec -it pod-readiness -- rm -f /usr/share/
  nginx/html/index.html

随后,kubelet组件执行探针失败,该Pod被标记为“未准备就绪”。同时,Endpoints对象将移除该Pod。再次查看Endpoints对象,你可以看到“ENDPOINTS”列的值为空:

此时,Service将停止为该Pod转发流量。一旦探针成功,Endpoints对象就会自动添加该Pod,Service将重新开始为该Pod转发流量。 URwtyBJWGiy4k+Td2cbuPJEyn1yhMFGoSPTVOodZCe2gbNKvPpUgnFDFbewkpvA8

点击中间区域
呼出菜单
上一章
目录
下一章
×