kubernetes Pod的生命周期(准备和活性和startupProbe)
容器探针
为什么要使用准备和活性?
因为k8中采用大量的异步机制,以及多种对象关系设计上的解耦,当应用实例数<代码>增加/删除> 代码,或者应用版本发生变化触发滚动升级时,系统并不能保证应用相关的服务,进入配置总是及时能完成刷新。在一些情况下,往往只是新的豆荚完成自身初始化,系统尚未完成<代码>端点> 代码,负载均衡器等外部可达的访问信息刷新,老得豆荚就立即被删除,最终造成服务短暂的额不可用,这对于生产来说是不可接受的,所以这个时候存活探针(准备)就登场了
启动探针(启动调查)
有时候,服务启动之后并不一定能够立马使用,我们以前常做的就是使用就绪探针设置<代码> initialDelay> 代码(容器启动后多少年代开始探测)值,来判断服务是否存活,大概设置如下
<代码类=" language-yaml "> livenessProbe: httpGet: 路径:/测试 防:80 failureThreshold: 1 initialDelay: 10 periodSeconds: 10 代码>
但是这个时候会出现这么一个情况,如果我们的服务一个启动需要60年代,如果采用上面探针的会,这个吊舱就陷入死循环了,因为启动之后经过10年代探测发现不正常就会更具重启策略进行重启,一直进入死循环。那聪明的你肯定能猜到我们调整下<代码> initialDelay> 代码的值不就好了吗?但是你能保证每个服务你都知道启动需要多少年代能好吗?
聪明的您肯定又想到了哪我们可以调整下<代码> failureThreshold> 代码的值就好了,但是应该调整为多大呢?如果我们设置成
<代码类=" language-yaml "> livenessProbe: httpGet: 路径:/测试 防:80 failureThreshold: 5 initialDelay: 10 periodSeconds: 10 代码>
如果设置成这样,第一次豆荚是能正常启动了,但是我们到后面探测的话需要(5 * 10=50年代)我们才能发现我们的服务不可用。这在生产中是不允许发生的,所以我们采用<代码> startupProbe> 代码使用和<代码> livenessProbe 代码>一样的探针来判断服务是否启动成功了
<代码类=" language-yaml "> livenessProbe: httpGet: 路径:/测试 防:80 failureThreshold: 1 initialDelay: 10 periodSeconds: 10 startupProbe: httpGet: 路径:/测试 防:80 failureThreshold: 10 initialDelay: 10 periodSeconds: 10 代码>
我们这只成这样的话,只要服务在10 10=100年代内任何时候启动来都行,探针探测成功后就交给livenessProbe进行继续探测了,当我们发现问题的时候1 10=10在10秒内就能发现问题,并及时作出响应。
服务探针(准备调查)
检测容器中的程序是否启动就绪,只有当检测容器中的程序启动成功之后,才会变成运行状态,否则就是容器启动成功,他还是失败的信号(因为他里面的服务没有探测成功)
存活探针(活性探针)(是否运行)
检测容器是否在运行,只是单纯的检测容器是否存活,并不会检测里面的服务是否正常。如果探针检测到失败,他将启动他的重启策略。
三种类型的处理程序:
-
<李> 1,ExecAction:通过自定义命令来进行探测,当返回值是0的时候说明存活,当返回值非零的时候表示不存活。李>
<李> 2,TCPSocketAction:对容器上的端口进行tcp检查,如果端口是打开的,则说明存活李>
<李> 3,HTTPGetAction:对指定端口和url地址执行HTTP Get请求,如果响应的状态码大于等于200年且小于400年,则认为存活李>
每次探测都只能只能是下面三种结果:
-
<李> 1,成功:容器通过了测试李>
<李> 2,失败:容器未通过测试李>
<李> 3,未知:测试失败,因此不会采取任何动作李>
探针示例:
ExecAction
<代码类=" language-yaml "> #猫nginx.yaml apiVersion: v1 :豆荚 元数据: 名称:nginx 规范: restartPolicy:> kubectl创建- f nginx.yaml 代码>
我们进入到nginx容器里面把指数这个文件删除了,看看详细信息
<代码类=" language-bash "> # kubectl描述pod nginx … 事件: 年龄从消息类型原因 - - - - - - - - - - - - - - - - - - - - - - - - - 正常预定4 m24s default-scheduler成功分配默认/nginx 192.168.1.124 正常拉4 m23 kubelet, 192.168.1.124形象”nginx: 1.14.1” 正常拉4 m1 kubelet, 192.168.1.124成功地把“nginx: 1.14.1”形象 警告不健康57 s kubelet 192.168.1.124准备探测失败:HTTP探针与statuscode失败:404 警告不健康的50年代60年代(x3) kubelet 192.168.1.124活性探测失败: 正常死亡50年代kubelet 192.168.1.124杀死集装箱码头工人与id://nginx:容器失败活性探针。并重新创建容器将被杀死。 正常了50年代kubelet, 192.168.1.124容器形象“nginx: 1.14.1”已经出现在机器 正常创建49 s (x2/4米)kubelet 192.168.1.124创建容器 正常开始49 s (x2/4米)kubelet 192.168.1.124开始容器kubernetes准备和活性和startupProbe