如果探测失败,pod的状态是notready,启动探针会重启容器
启动探针没有成功之前,后续的探针都不会执行。启动探针成功之后,在pod的后续生命周期不会用启动探针
正确示范
apiVersion: v1
kind: Pod
metadata:
labels:
run: tomcat3
name: tomcat3
spec:
containers:
- image: tomcat:8.0.52
name: tomcat3
startupProbe:
exec:
command: ["/usr/bin/test","-e","/etc/passwd"]
initialDelaySeconds: 4
periodSeconds: 2
故障模拟
正确示范
apiVersion: v1
kind: Pod
metadata:
labels:
run: tomcat3
name: tomcat3
spec:
containers:
- image: tomcat:8.0.52
name: tomcat3
startupProbe:
httpGet:
port: 8080
path: /index.jsp
initialDelaySeconds: 4
periodSeconds: 2
错误示范
apiVersion: v1
kind: Pod
metadata:
labels:
run: tomcat3
name: tomcat3
spec:
containers:
- image: tomcat:8.0.52
name: tomcat3
startupProbe:
httpGet:
port: 8080
path: /index.html
initialDelaySeconds: 4
periodSeconds: 2
正确示范
apiVersion: v1
kind: Pod
metadata:
labels:
run: tomcat3
name: tomcat3
spec:
containers:
- image: tomcat:8.0.52
name: tomcat3
startupProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 4
periodSeconds: 2
故障示范
apiVersion: v1
kind: Pod
metadata:
labels:
run: tomcat3
name: tomcat3
spec:
containers:
- image: tomcat:8.0.52
name: tomcat3
startupProbe:
tcpSocket:
port: 8081
initialDelaySeconds: 4
periodSeconds: 2
探测失败,杀死容器重启。
正确示范
apiVersion: v1
kind: Pod
metadata:
labels:
run: tomcat3
name: tomcat3
spec:
containers:
- image: tomcat:8.0.52
name: tomcat3
livenessProbe:
exec:
command: ["/usr/bin/test","-e","/etx/passwd"]
initialDelaySeconds: 4
periodSeconds: 2
故障示范
将检测的文件/etc/passwd删除,容器进程kill 掉,容器退出,触发pod重启策略,整个pod都会被重启。
正确示范
apiVersion: v1
kind: Pod
metadata:
labels:
run: tomcat3
name: tomcat3
spec:
containers:
- image: tomcat:8.0.52
name: tomcat3
livenessProbe:
httpGet:
port: 8080
path: /index.html
initialDelaySeconds: 4
periodSeconds: 2
故障示范
apiVersion: v1
kind: Pod
metadata:
labels:
run: tomcat3
name: tomcat3
spec:
containers:
- image: tomcat:8.0.52
name: tomcat3
livenessProbe:
httpGet:
port: 8080
path: /index.html
initialDelaySeconds: 4
periodSeconds: 2
正常示范
apiVersion: v1
kind: Pod
metadata:
labels:
run: tomcat3
name: tomcat3
spec:
containers:
- image: tomcat:8.0.52
name: tomcat3
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 4
periodSeconds: 2
故障模拟
apiVersion: v1
kind: Pod
metadata:
labels:
run: tomcat3
name: tomcat3
spec:
containers:
- image: tomcat:8.0.52
name: tomcat3
livenessProbe:
tcpSocket:
port: 8081
initialDelaySeconds: 4
periodSeconds: 2
pod的状态是running ready状态是notready,容器不可以提供正常的务访问,就绪探针不会重启容器。
tcpSocket只是监听容器上的业务端口能否正常通信。Tomcat 8081没有,8080还在,也就是正常的端口还是可以访问。
为什么要指定端口检测??????更改了服务端口,探测需要指定端口检测。
注意点:
存活探针和就绪探针会伴随整个pod的生命周期。
就绪探针不重启容器
正确示范
apiVersion: v1
kind: Pod
metadata:
labels:
run: tomcat3
name: tomcat3
spec:
containers:
- image: tomcat:8.0.52
name: tomcat3
readinessProbe:
exec:
command: ["/usr/bin/test","-e","/etc/passwd"]
initialDelaySeconds: 4
periodSeconds: 2
故障示范
kubectl exec -it tomcat3 -- rm -rf /etc/passwd
正确示范
apiVersion: v1
kind: Pod
metadata:
labels:
run: tomcat3
name: tomcat3
spec:
containers:
- image: tomcat:8.0.52
name: tomcat3
readinessProbe:
httpGet:
port: 8080
path: /index.jsp
initialDelaySeconds: 4
periodSeconds: 2
故障示范
apiVersion: v1
kind: Pod
metadata:
labels:
run: tomcat3
name: tomcat3
spec:
containers:
- image: tomcat:8.0.52
name: tomcat3
readinessProbe:
httpGet:
port: 8080
path: /index.html
initialDelaySeconds: 4
periodSeconds: 2
正确示范
apiVersion: v1
kind: Pod
metadata:
labels:
run: tomcat3
name: tomcat3
spec:
containers:
- image: tomcat:8.0.52
name: tomcat3
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 4
periodSeconds: 2
故障示范
apiVersion: v1
kind: Pod
metadata:
labels:
run: tomcat3
name: tomcat3
spec:
containers:
- image: tomcat:8.0.52
name: tomcat3
readinessProbe:
tcpSocket:
port: 8081
initialDelaySeconds: 4
periodSeconds: 2
postStart:容器启动的钩子,容器启动之后触发的条件
preStop: 容器退出的钩子,容器退出之后触发的条件
1、在一个yaml文件当中可以有多个探针,启动 存活 就绪都针对一个容器。
2、启动探针优先级最高,只有启动探针"成功",后续的探针才会执行
3、启动探针成功之后,后续除非重启pod,否则不会再触发启动探针。
4、在生命周期中,一直存在的探针只有:存活探针和就绪探针。
5、在pod的生命周期当中,后续的条件是满足哪个探针的条件,触发哪个探针的条件。
6、就绪探针如果不影响容器运行,状态是running,此时不会重启。容器退出的话,就绪探针也会重启。
容器内部挂载
volumeMounts:
- name: test1
mountPath: /opt
readOnly: false
声明容器内部的挂载目录
要给这个挂载卷取名,不同挂在卷的名字不能重复
readOnly: false 可读写
节点上挂载
volumes:
- name: test1
hostPath:
path: /opt/test
type: DirectoryOrCreate
声明的是node节点上和容器内的/opt的挂载目录
挂载卷的名称和要挂载的容器内挂载卷名称要一一对应
hostPath:指定和容器的挂载目录
type: DirectoryOrCreate: 如果节点上的目录不存在,自动创建该目录。
pod会经常被重启,销毁,一旦容器和node节点做了挂载卷,数据不会丢失。
启动和退出的作用:
1、启动可以自定义配置容器的内的环境变量
2、通知机制,告诉用户容器启动完毕
3、退出时,可以执行自定义命令,删除或者生成一些必要的程序,自定义销毁方式以及自定义资源回收的方式以及容器退出的等待时间。
apiVersion: v1
kind: Pod
metadata:
name: nginx2
spec:
containers:
- name: nginx2
image: centos:7
command: ["/bin/bash","-c","sleep 3600"]
#容器内挂载卷
volumeMounts:
- name: test1
mountPath: /opt
readOnly: false
lifecycle:
#poststart
postStart:
exec:
command: ["/bin/bash","-c","echo lyw from start >> /opt/123.txt ; sleep 10"]
#prestop
preStop:
exec:
command: ["/bin/bash","-c","echo hello from stop >> /opt/123.txt"]
#node节点挂在卷
volumes:
- name: test1
hostPath:
path: /opt/test
type: DirectoryOrCreate
在这个pod的生命周期事件当中,把启动探针,存活探针和就绪探针加入到yaml文件当中。