K8S健康检查
K8S健康检查
1.存活检查(livenessprobe,存活探针)
判断容器是否正在运行。如果探测失败,则 kubelet 会杀死容器,并且容器将根据 restartPolicy
来设置 Pod 状态,如果容器不提供存活探针,则默认状态为 Success。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: app
name: app
namespace: prod
spec:
replicas: 2
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
spec:
terminationGracePeriodSeconds: 60
schedulerName: trimaran
containers:
- image: xxxxx
name: app
env:
- name: PODS_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: jvm_parameter
value: -Xmx1024m -Dspring.profiles.active=prod -Dserver.port=8080 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=logs/java_heapdump.hprof -javaagent:/data/agent/skywalking-agent.jar -Dskywalking.agent.service_name=app
ports:
- containerPort: 8080
resources:
requests:
cpu: "50m"
memory: "256Mi"
limits:
cpu: "3000m"
memory: "2048Mi"
livenessProbe:
httpGet:
path: /actuator/health
port: 8080
timeoutSeconds: 5
periodSeconds: 10
readinessProbe:
httpGet:
path: /actuator/health
port: 8080
timeoutSeconds: 5
periodSeconds: 10
startupProbe:
httpGet:
path: /actuator/health
port: 8080
failureThreshold: 18
periodSeconds: 10
envFrom:
- configMapRef:
name: env-configmap
volumeMounts:
- mountPath: /data/agent
name: skywalking-agent
- mountPath: /data/logs/
subPathExpr: $(PODS_NAME)
name: app-log
volumes:
- name: skywalking-agent
hostPath:
# directory location on host
path: /poit/agent
- name: app-log
hostPath:
path: /var/lib/container/app-log/prod/app
type: DirectoryOrCreate
imagePullSecrets:
- name: harbor-login
nodeSelector:
type: biz
2.就绪检查(readinessprobe,就绪探针,业务探针)
判断容器是否准备好接受请求。如果探测失败,端点控制器将从与 Pod 匹配的所有 service endpoints 中剔除删除该 Pod 的 IP 地址,这样失败的 Pod 就无法提供服务了。初始延迟之前的就绪状态默认为 Failure。如果容器不提供就绪探针,则默认状态为 Success。
3.启动检查(startupprobe,启动探针,1.17 版本新增)
判断容器内的应用程序是否已启动,主要针对于不能确定具体启动时间的应用。如果匹配了 startupProbe 探测,则在 startupProbe 状态为 Success 之前,其他所有探针都处于无效状态,直到它成功后其他探针才起作用。如果 startupProbe 失败,kubelet 将杀死容器,容器将根据 restartPolicy 来重启。如果容器没有配置 startupProbe,则默认状态为 Success。
如果以上三种规则同时定义。在 readinessProbe 检测成功之前,Pod 的运行状态是不会变成 ready 状态的。
4.Probe 支持的三种检测方法
4.1exec
在容器内执行指定的 shell 命令,如果命令返回 0,说明容器运行状态正常;如果命名返回非 0 值,说明容器运行状态异常。
4.2tcpSocket
使用 TCP Socket 连接容器中的指定端口,如果能够建立连接,kubelet 会认为容器处于健康状态;如果无法建立连接,kubelet 认为容器处于异常状态。
4.3httpGet
使用 HTTP GET 请求指定的 URI,如果返回了成功状态码(2xx 或 3xx),kubelet 会认为容器处于健康状态;如果返回了失败的状态码(除 2xx 和 3xx 外的状态码),则 kubelet 会认为容器处于异常状态。
每次探测都将获得以下三种结果之一:
● 成功:容器通过了诊断
● 失败:容器未通过诊断
● 未知:诊断失败,因此不会采取任何行动
4.4可选参数
行为属性名称 | 默认值 | 最小值 | 备注 |
---|---|---|---|
initialDelaySeconds | 0 秒 | 0 秒 | 探测延迟时长,容器启动后多久开始进行第一次探测工作。 |
timeoutSeconds | 1 秒 | 1 秒 | 探测的超时时长。 |
periodSeconds | 10 秒 | 1 秒 | 探测频度,频率过高会对 pod 带来较大的额外开销,频率过低则无法及时反映容器产生的错误。 |
failureThreshold | 3 | 1 | 处于成功状态时,探测连续失败几次可被认为失败。 |
successThreshold | 1 | 1 | 处于失败状态时,探测连续成功几次,被认为成功。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律