探针类型
探针主要有两种:livenessProbe和readinessProbe。
容器探测无非就是我们在里面设置了一些探针,或传感器来获取相应的数据作为判定其存活与否的标准和就绪与否的标准。对于 livenessProbe和readinessProbe 这两种探针,可定义的具体探针有三种:
- ExecAction
- TCPSocketAction
- HTTPGetAction
每次定义三者之中的一个就可以了。
|
|
readiness探测所使用的字段和liveness字段是一样的。只是两者探测目的不一样。
livenessProbe探针示例
exec探测
|
|
|
|
过个30s,然后去查看下这个pod的状态:
httpGet探测
如果容器内是个web服务,可以使用TCP套接字探测,还可以使用HTTP探测。
host
默认往Pod IP发请求。httpHeaders <[]Object>
自定义首部。path
向哪个url发请求port
-required-
Name or number of the port to access on the container. Number must be in
the range 1 to 65535. Name must be an IANA_SVC_NAME.
如果我们在containers暴露定义了名称,这里port这个字段可以使用定义的名称。scheme
Scheme to use for connecting to the host. Defaults to HTTP.
|
|
|
|
下面手动进入Pod中的容器,删除这个index.html文件,然后看看探针是否探测失败:
在另一个终端 describe 这个pod:
readinessProbe探针示例
就绪性探测必要性
如果你不定义就绪,那么容器一启动,该容器状态就显示为1,就绪。
就绪性探测和service调度有着重要的关联性。service是个固定入口端点,为动态地、有生命周期的Pod资源提供一个固定的入口端口。客户端不是直接访问Pod,而是访问service。service使用标签选择器关联至各Pod资源。这里有个问题,比如现在又创建了一个新Pod出来,这个新Pod正好符合这个service标签选择器的选择条件,立即把这个Pod作为后端对象了。用户请求进来可能被调度到这个新Pod上了。但是这个新Pod一创建成功,就被service关联到后端去了,但是此时Pod里的服务很有可能还没就绪。这个时候有请求被调度上来,肯定是访问不到服务的。因此要做就绪性探测,否则Pod一创建就被立即关联到service上了。所以以后使用Pod必须要做readinessProbe。
readinessProbe和livenessProbe支持的探针都是一样的,但是两者目的不一样。
httpGet探测
|
|
|
|
已经显示为就绪状态。然后我们进入这个Pod中的容器,删除index.html文件
Pod生命周期中的另外一种行为lifecycle:启动后钩子和终止前钩子
在主容器刚刚启动之后,用户可以手动嵌入做一些操作,可以做一个 post start,比如执行完一个命令就退出。
如果主容器要退出,在结束之前,也可以做一些事情,pre stop。类似于awk的BEGIN和END。
|
|
|
|
【示例】: