有时候,应用因为无限循环或死锁而停止响应,为确保应用在这种情况下可以重新启动,需要有一种机制检查应用程序的运行状况,而不是依赖应用程序内部的检测。
K8s 主要提供了三种探针来针对这种机制:
-
存活探针:用于检查容器是否正在运行。如果存活探针失败,则 K8s 认为该容器已死亡,并且将尝试重新启动容器。
-
就绪探针:用于检查容器是否已准备好接收流量。如果容器没有准备好,K8s 将不会将流量路由到该容器。
-
启动探针:用于检查容器是否已启动。与存活探针不同,启动探针在容器启动时运行一次,而不是在容器运行时持续运行。
探针的检查方法
-
exec:通过在容器内执行指定命令,来判断命令退出时返回的状态码,返回状态码是0表示正常。
-
httpGet:通过对容器的 IP 地址、端口和 URL 路径来发送 GET 请求;如果响应的状态码在 200 ~ 399 间,表示正常。
-
tcpSocket:通过对容器的 IP 地址和指定端口,进行 TCP 检查,如果端口打开,发起 TCP Socket 建立成功,表示正常。
配置项
-
initialDelaySeconds:等待我们定义的时间 结束后便开始探针检查
-
periodSeconds:探针的间隔时间
-
timeoutSeconds:探针的超时时间,当超过我们定义的时间后,便会被视为失败
-
successThreshold:探针的最小连续成功数量
-
failureThreshold:探针的最小连续失败数量
启动探针
apiVersion: v1 # 必选 API的版本号kind: Pod # 必选 类型Podmetadata: # 必选 元数据name: nginx # 必选 符合RFC 1035规范的Pod名称#namespace: default # 可选 Pod所在的命名空间 不指定默认为default 可以使用-n指定namespacelabels: # 可选 标签选择器 一般用于过滤和区分Podapp: nginx-readyspec: # 必选 用于定义容器的详细信息containers: # 必选 容器列表- name: nginx # 必选 符合RFC 1035规范的容器名称image: nginx:latest # 必选 容器所用的镜像的地址imagePullPolicy: Always # 可选 镜像拉取策略 IfNotPresent:如果宿主机有这个镜像,就不用拉取了 Always:总是拉取 Never:不管存在不存在,都不拉取ports: # 可选 容器需要暴露的端口号列表- name: http # 端口名称containerPort: 80 # 端口号protocol: TCP # 端口协议 默认TCPstartupProbe: # 可选 检测容器内进程是否完成启动 注意三种检查方式同时只能使用一种failureThreshold: 3 # 失败三次算探针失败exec:command: ['/bin/sh','-c','echo Hello World']initialDelaySeconds: 3 # 容器启动完成后首次探测的时间,单位为秒timeoutSeconds: 2 # 对容器健康检查探测等待响应的超时时间,单位秒,默认1秒periodSeconds: 1 # 对容器监控检查的定期探测时间设置,单位秒,默认10秒一次successThreshold: 1 # 成功1次算探针OKfailureThreshold: 3 # 失败三次算探针失败restartPolicy: Always # 可选 默认Always 容器故障或者没有启动成功 自动重启该容器 Onfailure: 容器以不为0的状态码终止 自动重启该容器 Never:无论何种状态 都不会重启
# kubectl apply -f pod.yamlpod/nginx created# kubectl get podNAME READY STATUS RESTARTS AGEnginx 0/1 ContainerCreating 0 4s# kubectl describe pod nginx

文章介绍了Kubernetes(K8s)中的三种探针——存活探针、就绪探针和启动探针,用于检查容器的运行状态和健康状况。存活探针确保容器运行,就绪探针确认容器可接收流量,启动探针检查容器启动过程。探针可通过exec、httpGet和tcpSocket方式检查,配置包括initialDelaySeconds、timeoutSeconds等参数。当探针失败,根据restartPolicy,容器可能被重启。此外,RC、ReplicaSet、Deployment和Service等K8s组件也保证了容器的可用性和服务的稳定性。
最低0.47元/天 解锁文章
5856

被折叠的 条评论
为什么被折叠?



