检测探针 - 就绪检测:
apiVersion: v1
kind: Pod
metadata:
name: readiness-httpget-pod
namespace: default
spec:
containers:
- name: readiness-httpget-container
image: wangyanglinux/myapp:v1
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
port: 80
path: /index1.html
initialDelaySeconds: 1
periodSeconds: 3
readiness-httpget-container 方式去探测服务时候可用 。
使用http get方式去请求80端口的 index1.html文件,若没有此文件则服务始终无法Ready。
initialDelaySeconds 延迟1秒
periodSeconds 重试的循环时间为3秒
我们进入容器添加文件:
kubectl exec readiness-httpget-pod -it --/bin/sh
cd /usr/share/nginx/html
echo "123" >> index1.html
再次查看:
检测探针 - 存活检测
apiVersion : v1
kind : Pod
metadata :
name : liveness-exec-pod
namespace : default
spec :
containers :
- name : liveness-exec-container
image : busybox
imagePullPolicy: IfNotPresent
command : ["/bin/sh","-c","touch /tmp/live ; sleep 60; rm -rf /tmp/live; sleep 3600"]
livenessProbe :
exec :
command : ["test","-e","/tmp/live"]
initialDelaySeconds : 1
periodSeconds : 3
command : ["/bin/sh","-c","touch /tmp/live ; sleep 60; rm -rf /tmp/live; sleep 3600"]
创建tmp/live文件 休眠60秒后删除它
command : ["test","-e","/tmp/live"]‘
livenessProbe检查tmp/live是否可用
运行流程:启动 创建文件 休眠60秒 此时 pod为 ready状态 等待60秒后删除文件,检测到pod无法正常访问 重启pod
Tcp检测:
apiVersion: v1
kind: Pod
metadata:
name: probe-tcp
spec:
containers:
- name: nginx
image: hub.atguigu.com/library/myapp:v1
livenessProbe:
initialDelaySeconds: 5
timeoutSeconds: 1
tcpSocket:
port: 80
这里需要注意的是readiness检测不通过只是不将容器状态修改为ready,而liveness则是直接重启容器
Start 和Stop
apiVersion: v1
kind: Pod
metadata:
name: lifecycle-demo
spec:
containers:
- name: lifecycle-demo-container
image: nginx
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo Hello from the postStart handler >/usr/share/message"]
preStop:
exec:
command: ["/bin/sh", "-c", "echo Hello from the poststop handler >/usr/share/message"]
~
~
~
这里要注意echo的信息输出在容器的文件内:
echo Hello from the postStart handler >/usr/share/message
状态:
挂起(Pending):Pod已被Kubernetes系统接受,但有一个或多个容器镜像尚未创建。等待时间包括调度Pod的时间和通过网络下载镜像的时间,这可能需要花点时间。
运行中(Running):该Pod已经绑定到了一个节点上,Pod中所有的容器都已经呗创建。至少有一个容器正在运行,或者正处于启动或重启状态。
成功(Succeeded):Pod中的所有容器都被成功终止,并且不会再重启
失败(Failed):Pod中的所有容器都已终止了,并且至少有一个容器是因为失败终止的,也就是说,容器以非0状态退出或者被系统终止。
未知(Unknown):因为某些原因无法取得Pod的状态,通常是因为与Pod所在主机通信失败