每天5分钟玩转Kubernetes | 默认的健康检查

书籍来源:cloudman《每天5分钟玩转Kubernetes》

一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!


我们首先学习Kubernetes默认的健康检查机制:每个容器启动时都会执行一个进程,此进程由Dockerfile的CMD或ENTRYPOINT指定。如果进程退出时返回码非零,则认为容器发生故障,Kubernetes就会根据restartPolicy重启容器。

下面我们模拟一个容器发生故障的场景,Pod配置文件如下示。

[root@k8s-master ~]# cat healthycheck.yml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: healthcheck
  name: healthcheck
spec:
  restartPolicy: OnFailure
  containers:
  - name: healthcheck
    image: busybox
    args:
    - /bin/sh
    - -c
    - sleep 10; exit 1
[root@k8s-master ~]# 

Pod的restartPolicy设置为OnFailure,默认为Always。

sleep 10; exit 1模拟容器启动10秒后发生故障。

执行kubectl apply创建Pod,命名为healthcheck,如图所示。

过几分钟查看Pod的状态,如图所示。

可看到容器当前已经重启了3次。

在上面的例子中,容器进程返回值非零,Kubernetes则认为容器发生故障,需要重启。有不少情况是发生了故障,但进程并不会退出。比如访问Web服务器时显示500内部错误,可能是系统超载,也可能是资源死锁,此时httpd进程并没有异常退出,在这种情况下重启容器可能是最直接、最有效的解决方案,那我们如何利用Health Check机制来处理这类场景呢?

答案就是Liveness探测。

你可能感兴趣的:(读书笔记,kubernetes,docker,容器)