今天我认真了解了在容器成功启动后运行的post start,和在运行时检查机制liveness probe,readiness probe和容器在被删除前运行的pre start。post start和pre start在生成环节用的必须少了解即可。
liveness probe & readiness probe两个字段作用 和写法:
liveness probe和readiness start这两个字段都是检查容器的运行情况,但他们用途有很大的不同;
他们的检查方式都是有三种:ExecAction,TCPsocketAution,HTTPGetAution。
liveness start字段:
他只要是检查容器是否正常运行,而不能检查服务是否正常接收请求。如nginx的端口是打开的而且主进程也是正常运行,但他的主页文件被删除了。在这种情况下就不在liveness probe字段检查范围。
readiness probe字段:
readiness probe字段检查的是容器在正常的运行时能否提供正常服务。
ExecAction&TCPSocketAution&HTTPGetAution:
ExecAction:检查方式主要是通过自己编写的检查命令检查。
TCPSocketAution:使用container的IP地址和指定的端口作为socket。如果端口处于打开状态视为成功。
HTTPGetAution:指定URL和端口,如果响应码200~300则成功。
ExecAution例子:
apiVersion: v1
kind: Pod
metadata:
name: liveness-exec
labels:
app: liveness
spec:
containers:
- name: liveness
image: busybox
command: #创建测试探针探测的文件
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
livenessProbe:
initialDelaySeconds: 10 #延迟检测时间
periodSeconds: 5 #检测时间间隔
exec:
command:
- cat
- /tmp/healthy
TCPSocketAution例子:
apiVersion: v1
kind: Pod
metadata:
name: liveness-tcp
labels:
app: liveness
spec:
containers:
- name: liveness
image: nginx
livenessProbe:
initialDelaySeconds: 15
periodSeconds: 20
tcpSocket:
port: 80
HTTPGetAution例子:
apiVersion: v1
kind: Pod
metadata:
name: liveness-http
labels:
test: liveness
spec:
containers:
- name: liveness
image: mydlqclub/springboot-helloworld:0.0.1
livenessProbe:
initialDelaySeconds: 20 #延迟加载时间
periodSeconds: 5 #重试时间间隔
timeoutSeconds: 10 #等待探针检查结果时间
httpGet:
scheme: HTTP #用于连接host的协议,默认为HTTP
port: 8081
path: /actuator/health #url
注:readiness probe和liveness probe的写法差不多参数也差不多;只是把 livenessProbe:改成 readinessProbe:即可
PostStart&PostStart:
Kubemetes支持两种类型的容器钩子,分别为PostStart和PostStart。
PostStart。该钩子在容器被创建后立刻触发,通知容器它已经被创建。该钩子不需要向其所对应的hook handler传人任何参数。如果该钩子对应的hook handler执行失败,则该容器会被杀死,并根据该容器的重启策略决定是否要重启该容器。
PreStop。该钩子在容器被删除前触发,其所对应的hook handler必须在删除该容器的请求发送给Docker daemon之前完成。在该钩子对应的hook handler完成后不论执行的结果如何,Docker daemon会发送一个SGTERN信号量给Docker daemon来删除该容器。同样地。该钩子也不需要传人任何参数
因为post start&pre statrt写法和liveness probe类似使用我用了截图:
注:pre start和post start的写法差不多参数也差不多;只是把 postStart:改成 preStart:即可