kubectl explain pods.spec.containers.livenessProbe
通过 指令方式 检查容器是否健康
通过 http请求 检查容器是否健康
通过 tcp请求 检查容器是否健康
表示探测失败次数,默认是3,探测3次失败,才认为是真失败了;
表示探测成功次数,默认是1,探测1次成功,才认为是真成功了;
默认是容器一启动就开始探测,但是此时容器可能还没启动完,此时探测肯定是失败的,
所以initialDelaySeconds表示容器启动多长时间后才开始探测.
在容器内部执行一个命令,如果返回码为0,则表示健康
vim /root/test/livd_pod.yaml
内容
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
namespace: default
labels:
nginx: test
spec:
containers:
- name: nginx1
image: nginx
imagePullPolicy: IfNotPresent
# 容器启动的时候,创建healthy.txt文件,休眠30秒后,删除healthy.txt文件,再休眠3600秒
command: ["/bin/sh","-c","touch /tmp/healthy.txt; sleep 30; rm -f /tmp/healthy.txt; sleep 3600"]
# 健康检查
livenessProbe:
exec:
# 如果healthy.txt文件存在,表示健康
command: ["test","-e","/tmp/healthy.txt"]
initialDelaySeconds: 15
timeoutSeconds: 1
kubectl apply -f /root/test/livd_pod.yaml
kubectl get pods

kubectl describe pods nginx-pod

发送一个http Get请求,如果返回状态吗在200-400之间则表示健康
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
namespace: default
labels:
nginx: test
spec:
containers:
- name: nginx1
image: nginx
imagePullPolicy: IfNotPresent
ports:
- name: http-port
containerPort: 80
# 健康检查
livenessProbe:
httpGet:
# 请求不存在路径
path: 127.0.0.1/index2.html
port: http-port
initialDelaySeconds: 15
timeoutSeconds: 1

通过IP 和port ,如果能够和容器建立连接则表示容器健康
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
namespace: default
labels:
nginx: test
spec:
containers:
- name: nginx1
image: nginx
imagePullPolicy: IfNotPresent
livenessProbe:
tcpSocket:
host: 127.0.0.1
port: 80
initialDelaySeconds: 15
timeoutSeconds: 1

# readinessProbe定义
kubectl explain pods.spec.containers.readinessProbe
参考1.3
参考1.4
# postStart定义
kubectl explain pods.spec.containers.lifecycle.postStart
# preStop定义
kubectl explain pods.spec.containers.lifecycle.preStop
通过 指令方式 来执行钩子
vim /root/test/lifecycle_pod.yaml
内容
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
namespace: default
labels:
nginx: test
spec:
containers:
- name: nginx1
image: nginx
imagePullPolicy: IfNotPresent
ports:
- name: http-port
containerPort: 80
# 钩子
lifecycle:
postStart:
exec:
# 启动后创建一个healthy.txt文件
command: ["/bin/sh","-c","touch /tmp/healthy.txt"]
kubectl apply -f /root/test/lifecycle_pod.yaml
kubectl describe pods nginx-pod
kubectl get pods

# 进入容器
kubectl exec -it nginx-pod -c nginx1 -- /bin/sh

通过 http请求 来执行钩子
参考:1.4.2
通过 tcp请求 来执行钩子
参考:1.4.3