Kubernetes对Pod的健康状态可以通过三类探针来检查: LivenessProbe、ReadinessProbe和StartupProbe
LivenessProbe
用户判断容器是否存活,即是不是Running状态,如果LivenessProbe探针探测到容器不健康,则kubelet将杀掉该容器,并根据容器的重启策略做相应的处理。如果一个容器不包含LivenessProbe探针,那么kubelet认为该容器的LivenessProbe探针返回的值永远是Success。
ReadinessProbe探针:用于判断容器服务是否可用(Ready状态),达到Ready状态的Pod才可以接收请求。对于被Service管理的Pod,Service与PodEndpoint的关联关系也将基于Pod是否Ready进行设置。如果在运行过程中Ready状态变为False,则系统自动将其从Service的后端Endpoint列表中隔离出去,后续再把恢复到Ready状态的Pod加回后端Endpoint列表。这样就能保证客户端在访问Service时不会被转发到服务不可用的Pod实例上。
StartupProbe探针,某些应用启动比较慢,会造成容器启动缓慢此时ReadinessPprobe就不适用了,这种属于有且仅有一次的超长延时,可以通过StartupProbe探针解决
以上三种探针都可以配置三种实现方式
ExecAction
在容器内部运行一个命令,如果该命令发的返回码为9,则表示容器健康
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name: liveness
image: gcr.io/google_containers/busybox
args:
- /bin/sh
- -c
- echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/health
initialDelaySeconds: 15
timeoutSeconds: 1
复制代码
TCPSocketAction
通过容器ip地址和端口号执行TCP检查,如果能建立链接表示容器监控
apiVersion: v1
kind: Pod
metadata:
name: pod-with-healthcheck
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 30
timeoutSeconds: 1
复制代码
HTTPGetAction
通过容器的ip,端口以及调用http get方法,如果响应码200-400之间表示容器健康
apiVersion: v1
kind: Pod
metadata:
name: pod-with-healthcheck
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /_status/healthz
port: 80
initialDelaySeconds: 30
timeoutSeconds: 1
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END