K8S服务健康检测(探针)

1.业务探针 readinessProbe 1.1 为什么自动扩容导致请求失败? 一个新Pod创建后,Service就能立即选择到它,并会把请求转发给Pod,那问题就来了,通常一个Pod启动是需要时间的,如果Pod还没准备好(可能需要时间来加载配置或数据,或者可能需要执行 一个预热程序之类),这时把请求转给Pod的话,Pod也无法处理,造成请求失败。 1.2 如何解决? 加入业务探针,可以理解为类似ws的心跳检测机制. Kubernetes中解决这个问题的方法就是给Pod加一个业务就绪探针Readiness Probe,当检测到Pod就绪后才允许Service请求转给Pod。 Readiness Probe周期性检测Pod,然后根据响应来判断Pod是否就绪,Service根据就绪状态分发流量。 1.3 配置详解 1.3.1 EXEC(shell)检测 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 apiVersion:apps/v1kind:Deploymentmetadata:name:nginxspec:replicas:3selector:matchLabels:app:nginxtemplate:metadata:labels:app:nginxspec:containers:- image:nginx:latestname:container-0resources:limits:cpu:500mmemory:1024Mirequests:cpu:500mmemory:1024Mi// 重点内容// 声明一个 业务探针 去检测 当前服务是否准备完毕readinessProbe:# Readiness Probeexec:// 在容器中先后执行 ls,/ready 命令,如果命令完整执行完毕,则标志POD为就绪状态,可以从Service接收流量command:- ls- /readyimagePullSecrets:- name:imagepull-secret 1.3.2 HTTP 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 apiVersion:apps/v1kind:Deploymentmetadata:name:nginxspec:replicas:3selector:matchLabels:app:nginxtemplate:metadata:labels:app:nginxspec:containers:- image:nginx:latestname:container-0resources:limits:cpu:500mmemory:1024Mirequests:cpu:500mmemory:1024Mi// 这里是重点// 声明一个业务 探针,向本POD发起 /read请求,根据响应码判断POD是否准备就绪readinessProbe:httpGet:path:/readport:80imagePullSecrets:- name:imagepull-secret 1....

December 5, 2021 · 3 min · cui