强大的自愈能力是Kubernetes这类容器编排引擎的一个重要特性。自愈的默认实现方式是自动重启发生故障的容器。除此之外,用户还可以利用<代码>活性代码>和<代码> 代码>准备探测机制设置更精细的健康检查,进而实现如下需求:
-
<李>零停机部署。李>
<李>避免部署无效的镜像。李>
<李>更加安全的滚动升级。李>
一、活性探测
活性探测让用户可以自定义判断容器是否健康的条件。如果探测失败,Kubernetes就会重启容器。
我们创建一个圆荚体的配置文件<代码>活性。yaml> 代码,可以使用命令<代码> kubectl解释pod.spec.containers.livenessProbe> 代码查看其使用方法。
<代码> apiVersion: v1 :豆荚 元数据: 名称:活性 标签: 测试:活性 规范: restartPolicy: OnFailure 容器: ——名称:活性 busybox映像: 参数: ——/bin/sh - - - - - - - c ——联系/tmp/健康;睡眠30;rm射频/tmp/健康;睡600年 livenessProbe: 执行: 命令: ——猫 ——/tmp/健康 initialDelaySeconds: 10 periodSeconds: 5 代码>
启动进程首先创建文件/tmp/健康,30秒后删除,在我们的设定中,如果/tmp/健康的文件存在,则认为容器处于正常状态,反正则发生故障。
<代码> livenessProbe> 代码部分定义如何执行活性探测:
-
<李>探测的方法是:通过<代码> 代码>猫命令检查/tmp/健康的文件是否存在。如果命令执行成功,返回值为零,Kubernetes则认为本次活性探测成功,如果命令返回值非零,本次活性探测失败。李>
<李> <代码> initialDelaySeconds: 10> 代码指定容器启动10之后开始执行活性探测,我们一般会根据应用启动的准备时间来设置。比如某个应用正常启动要花30秒,那么<代码> initialDelaySeconds> 代码的值就应该大于30。李>
<李> <代码> periodSeconds: 5> 代码指定每5秒执行一次活性探测.Kubernetes如果连续执行3次活性探测均失败,则会杀掉并重启容器。李>
下面创建Pod活性:
<代码> [root@master ~] # - f liveness.yaml kubectl适用 豆荚/活性创建代码>
从配置文件可知,最开始的30秒,<代码>/tmp/健康> 代码存在,猫命令返回0,活性探测成功,这段时间<代码> kubectl描述pod活性> 代码的活动部分会显示正常的日志。
<代码> [root@master ~] # kubectl描述pod活性 事件: 年龄从消息类型原因 - - - - - - - - - - - - - - - - - - - - - - - - - 正常拉25 s kubelet node02拉形象“busybox” 正常拉24 s kubelet node02成功地把“busybox”形象 正常创建24 s kubelet node02创建容器 正常开始23 s kubelet node02开始容器 正常预定23 s default-scheduler成功分配默认/活性node02 代码>
35秒之后,日志会显示<代码>/tmp/健康> 代码已经不存在,活性探测失败。再过几十秒,几次探测都失败后,容器会被重启。
<代码> [root@master ~] # kubectl描述pod活性 事件: 年龄从消息类型原因 - - - - - - - - - - - - - - - - - - - - - - - - - 正常预定6 m9 default-scheduler成功分配默认/活性node02 正常拉3 m41s (x3 6 m10) kubelet node02成功地把“busybox”形象 正常创建3 m41s (x3 6 m10) kubelet node02创建容器 正常开始3 m40s (x3 6 m9) kubelet node02开始容器 警告不健康2 m57s (x9/5 m37) kubelet node02活性探测失败:猫:打不开“/tmp/健康”:没有这样的文件或目录 正常拉2 m27s (x4 6 m11公路)kubelet node02拉形象“busybox” 正常死亡60年代(x4/4 m57s) kubelet node02杀死集装箱码头工人与id://活性:容器失败活性探针。代码并重新创建容器将被杀死。>
然后我们查看容器,已经重启了一次。
<代码> [root@master ~] # kubectl吊舱 重启名字就绪状态的年龄 活性1/1运行3 5 m13 代码>
二,准备探测
用户通过活性探测可以告诉Kubernetes什么时候通过重启容器实现自愈,准备探测则是告诉Kubernetes什么时候可以将容器加入到服务负载均衡池中,对外提供服务。
准备探测的配置语法与活性探测完全一样,我们创建配置文件<代码> readiness.yaml> 代码。
<代码> apiVersion: v1 :豆荚 元数据: 名称:准备 标签: 测试:准备 规范: restartPolicy: OnFailure 容器: ——名称:准备 busybox映像: 参数: ——/bin/sh - - - - - - - c ——联系/tmp/健康;睡眠30;rm射频/tmp/健康;睡600年 readinessProbe: 执行: 命令: ——猫 ——/tmp/健康 initialDelaySeconds: 10 periodSeconds: 5Kubernetes健康状态检查(九)