k8s探针检测php,Kubernetes-7:Pod健康检查原理-探针(就绪检测、存活检测)

搜索热词

探针-就绪探测、存活探测

探针是由kubelet对容器执行的定期诊断,要执行诊断,kubelet调用由容器实现的Handler,有三种类型的处理程序:

ExecActive:在容器内执行指定命令,若命令退出时返回码为0,则认为诊断成功

TCPSockeAction:对指定端口上的容器的ip地址进行tcp检查,如果端口打开,则诊断为成功

HTTPGetAction:对指定端口和路径上的容器ip地址执行HTTP Get请求,如果相应的状态码>200且<400,则诊断是成功的

每次探测都将获得以下三种结果之一:

成功:容器通过了诊断

失败:容器未通过诊断

未知:诊断失败,不会采取任何行动

两种探测方式:

livenessProbe(存活检测):指示容器是否正在运行,如果存活检测失败,则kubelet会杀死容器,并且容器将受到其重启策略的影响。如果容器不提供存活探针,则默认状态为Success

readinessProbe(就绪探测):指示容器是否准备好服务请求。如果就绪探测失败,端点控制器将从与Pod匹配的所有的service的端点中删除该Pod的IP地址,初始延迟之前的就绪状态默认为Failure。如果容器不提供就绪探针,则默认状态为Success

测试

## 就绪探测

## 创建yaml文件

vim readinessProbe-httpget.yaml

...

apiVersion: v1

kind: Pod

Metadata:

name: readiness-httpget-pod

namespace: default

spec:

containers:- name: readiness-httpget-container

image: hub.vfancloud.com/test/myapp:v1

imagePullPolicy: IfNotPresent

readinessProbe:

httpGet:

port:80path:/index1.html

initialDelaySeconds:1#Pod开启后,延迟1s再进行检测

periodSeconds:3#检测间隔时长

...

## 查看Pod状态,状态为运行,却没ready

[root@Centos8 k8sYaml]# kubectl get pod

NAME READY STATUS RESTARTS AGE

readiness-httpget-pod 0/1 Running 014s

## 查看描述,报错404

[root@Centos8 k8sYaml]# kubectl describe pod readiness-httpget-pod

Warning Unhealthy 0s (x2 over 2s) kubelet,testcentos7 Readiness probe Failed: HTTP probe Failed with statuscode:## 添加index1.html即可ready

[root@Centos8 k8sYaml]# kubectl exec-it readiness-httpget-pod -- touch /usr/share/Nginx/html/index1.html

[root@Centos8 k8sYaml]# kubectl get pod

NAME READY STATUS RESTARTS AGE

readiness-httpget-pod 1/0 5m5s

存活检测

## 存活检测,只要存活检测失败,就会重启Pod

## 创建exec yaml文件

vim livenessProbe-exec.yaml

...

apiVersion: v1

kind: Pod

Metadata:

name: liveness-exec-pod

namespace: default

spec:

containers:- name: liveness-exec-container

image: busyBox:v1

imagePullPolicy: IfNotPresent

command: ['sh',-ctouch /tmp/live ;sleep 60; rm -f /tmp/live; sleep 3600']

livenessProbe:

exec:

command: [test-e/tmp/live'] #检测有无/tmp/live文件

initialDelaySeconds:#检测间隔时长

...

## 前60s Pod是正常运行状态

[root@Centos8 k8sYaml]# kubectl get pod

NAME READY STATUS RESTARTS AGE

liveness-exec-pod 5s

readiness-httpget-pod 39m

## 60s后,Pod已经出错重启一次

[root@Centos8 k8sYaml]# kubectl get pod

NAME READY STATUS RESTARTS AGE

liveness-exec-pod 118s

readiness-httpget-pod 41m

## 创建httpGet yaml文件

vim livenessProbe-httpget.yaml

...

apiVersion: v1

kind: Pod

Metadata:

name: liveness-httpget-pod

namespace: default

spec:

containers:- name: liveness-httpget-myapp:v1

imagePullPolicy: IfNotPresent

ports:-name: http

containerPort:livenessProbe:

httpGet:

port:index.html #请求此文件内容

initialDelaySeconds:periodSeconds:timeoutSeconds:10#最大请求时长

...

## 查看pod

[root@Centos8 k8sYaml]# kubectl get pod

NAME READY STATUS RESTARTS AGE

liveness-httpget-pod 3s

## 测试删除index.html文件,Pod已经开始重启

[root@Centos8 k8sYaml]# kubectl exec-it liveness-httpget-pod -- rm -f /usr/share/Nginx/html/index.html

[root@Centos8 k8sYaml]# kubectl get pod

NAME READY STATUS RESTARTS AGE

liveness-httpget-pod 84s

## 创建tcp yaml文件

vim livenessProbe-tcp.yaml

...

apiVersion: v1

kind: Pod

Metadata:

name: liveness-httpget-pod

namespace: default

spec:

containers:-name: Nginx

image: hub.vfancloud.com/test/myapp:v1

imagePullPolicy: IfNotPresent

livenessProbe:

tcpSocket: #检测8080是否存在

port:8080initialDelaySeconds:...

## 因为镜像内没开启8080,所以Pod会一直重启

[root@Centos8 k8sYaml]# kubectl get pod

NAME READY STATUS RESTARTS AGE

liveness-httpget-pod 1 18s

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值