[kubernetes]服务健康检查

打印 上一主题 下一主题

主题 578|帖子 578|积分 1734

前言

进程在运行,但是不代表应用是正常的,对此pod提供的探针可用来检测容器内的应用是否正常。k8s对pod的健康状态可以通过三类探针来检查:LivenessProbe、ReadinessProbe和StartupProbe。
健康检查探针

LivenessProbe

用于判断容器是否存活(Running状态),如果LivenessProbe探针检测到容器不健康,则kubelet“杀掉”容器,并根据容器的重启策略做相应的处理。如果一个容器不包含LivenessProbe探针,那么kubelet认为该容器的livenessprobe探针返回的值永远是success。
ReadinessProbe

用于判断容器服务是否可用(Ready状态),达到Ready状态的Pod才可以接收请求。对于被Service管理的Pod,Service与Pod EndPoint 的关联关系也将基于Pod是否Ready进行设置。如果在运行过程中Ready状态变为False,则系统自动将其从Service的后端EndPoint列表中隔离出去,后续再把恢复到Ready状态的Pod加到后端EndPoint列表。这样能保证客户端在访问service时不会被转发到服务不可用的Pod实例上。
StartupProbe

某些应用会遇到启动比较慢的情况,这种有且仅有一次的超长延时,使用StartupProbe更加适合。
实现方式

三种探针均可配置三种实现方式。
ExecAction

在容器内运行一个命令,如果该命令的返回码为0,则表明容器健康。
以下示例中,通过运行cat /tmp/health 判断一个容器运行是否正常。在Pod运行后,将在创建文件后的10秒删除文件。LivenessProbe的初次探测时间(initialDelaySeconds)为15秒,探测结果为Fail,将导致kubelet杀掉该容器并重启。
  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4.   labels:
  5.     test: liveness
  6.   name: liveness-exec
  7. spec:
  8.   containers:
  9.   - name: liveness
  10.     image: busybox
  11.     args:
  12.     - /bin/sh
  13.     - -c
  14.     - echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 600
  15.     livenessProbe:
  16.       exec:
  17.         command:
  18.         - cat
  19.         - /tmp/health
  20.       initialDelaySeconds: 15
  21.       timeoutSeconds: 1
复制代码
TCPSocketAction

通过容器的IP地址和端口号执行TCP检查,如果能够建立TCP连接,则表明容器健康。
示例:
  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4.   name: pod-with-healthcheck
  5. spec:
  6.   containers:
  7.   - name: nginx
  8.     image: nginx
  9.     ports:
  10.     - containerPort: 80
  11.     livenessProbe:
  12.       tcpSocket:
  13.         port: 80
  14.       initialDelaySeconds: 30
  15.       timeoutSeconds: 1
复制代码
HTTPGetAction

通过容器的IP地址、端口号及路径调用HTTP Get方法,如果响应的状态码大于等于200且小于400,则认为容器健康。
以下例子中,kubelet定时发送HTTP请求到 localhost:80/_status/healthz来进行容器应用的健康检查。
  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4.   name: pod-with-healthcheck
  5. spec:
  6.   containers:
  7.   - name: nginx
  8.     image: nginx
  9.     ports:
  10.     - containerPort: 80
  11.     livenessProbe:
  12.       httpGet:
  13.         path: /_status/healthz
  14.         port: 80
  15.       initialDelaySeconds: 30
  16.       timeoutSeconds: 1
复制代码
主要参数


  • initialDelaySeconds:健康检查探针的初次探测时间,单位为秒。例如设置为30的话,容器启动30秒后才会进行健康检测。
  • periodSeconds:检测频率,单位为秒,默认值为10。最小值为1秒
  • timeoutSeconds:探针检测的超时时间,默认为1秒。
  • failureThreshold:最小连续探测失败次数,默认为3。如果连续3次探测失败,则将容器视为不健康。
  • successThreshold:最小连续探测成功次数,默认为1。如果1次探测正常,则将容器视为健康。
参考


  • kubernetes权威指南-第五版

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表