Docker&KubernetesK8K8s

K8S-重启策略+健康检查(应用自修复)

2021-06-10  本文已影响0人  阿当运维

重启策略:

• Always:当容器终止退出后,总是重启容器,默认策略。
• OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
• Never:当容器终止退出,从不重启容器。

健康检查有以下两种类型:

• livenessProbe(存活检查):如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。(失败就重启pod)

• readinessProbe(就绪检查):如果检查失败,Kubernetes会把Pod从service endpoints中剔除。
(service相当于负载均衡,剔除掉不正常pod,使service往后端转发的时候就转不到那个不正常pod上了)

• startupProbe(启动检查)

支持以下三种检查方法:

• httpGet:发送HTTP请求,返回200-400范围状态码为成功。
• exec:执行Shell命令返回状态码是0为成功。
• tcpSocket:发起TCP Socket建立成功

例子:

livenessProbe(存活检查)为例

采用livenessProbe存活检测,启动容器后,检测/tmp/healthy是否存在,不存在代表挂掉。默认自动重启容器。这儿是exec命令 方式检测。

1.exec方式
image.png
配置:
livenessProbe:
    exec:
      command:
       - cat
       - /tmp/healthy
    initialDelaySeconds: 50 #启动容器后多少秒健康检查
    periodSeconds: 20 #以后间隔多少秒检查一次
测试:

pod状态(第一个是刚创建的):

[root@k8s-master pod_yml]# kubectl get pod
NAME             READY   STATUS    RESTARTS   AGE
pod-check-test   1/1     Running   0          12m
pod-data-test    2/2     Running   0          70m
pod-net-test     2/2     Running   0          89m

进入pod删除掉tmp/healthy,等一分钟看效果


image.png
2.httpget方式
image.png
配置:
 livenessProbe:
    httpGet:
      path: /index.html
      port: web
    initialDelaySeconds: 50 #启动容器后多少秒健康检查
    periodSeconds: 20 #以后间隔多少秒检查一次
测试: 进入容器删除/默认页/usr/share/nginx/html/index.html,一分钟后看效果
image.png
3.tcpSocket(端口探测)
livenessProbe:
  tcpSocket:
    port: 80
  initialDelaySeconds: 30 #启动容器后多少秒健康检查
  periodSeconds: 10 #以后间隔多少秒检查一次

livenessProbe与readinessProbe配置一样。他俩区别只在于检查后处理方式不同,liveness 是将挂掉的重启,readiness是将挂掉的在service(负载均衡)后端列表中剔掉。

上一篇下一篇

猜你喜欢

热点阅读