首页 > 其他分享 >k8s集群可观测性

k8s集群可观测性

时间:2022-11-20 18:33:31浏览次数:52  
标签:Readiness probe 状态 Liveness 观测 探测 集群 pod k8s

k8s集群健康来源

当把应用迁移到 Kubernetes 之后,要如何去保障应用的健康与稳定呢?其实很简单,可以从两个方面来进行增强:

  • 首先是提高应用的可观测性;
  • 第二是提高应用的可恢复能力。

从可观测性上来讲,可以在三个方面来去做增强:

  • 首先是应用的健康状态上面,可以实时地进行观测;
  • 第二个是可以获取应用的资源使用情况;
  • 第三个是可以拿到应用的实时日志,进行问题的诊断与分析。

当出现了问题之后,首先要做的事情是要降低影响的范围,进行问题的调试与诊断。最后当出现问题的时候,理想的状况是:可以通过和 K8s 集成的自愈机制进行完整的恢复。

Liveness与Readiness

Readiness指针用来判断一个pod是否处于就绪状态,如果该pod处于就绪状态,应用层才会有流量介入进来,反之不然。如下图

    

 

Liveness 指针也是类似的,它是存活指针,用来判断一个 pod 是否处在存活状态。当一个 pod 处在不存活状态的时候,会出现什么事情呢?

 

 

 

 

 这个时候会由上层的判断机制来判断这个 pod 是否需要被重新拉起。那如果上层配置的重启策略是 restart always 的话,那么此时这个 pod 会直接被重新拉起。

 

Liveness与Readiness具体用法

探测方式

Liveness 指针和 Readiness 指针支持三种不同的探测方式:

  1. 第一种是 http Get。它是通过发送 http Get 请求来进行判断的,当返回码是 200-399 之间的状态码时,标识这个应用是健康的;
  2. 第二种探测方式是 Exec。它是通过执行容器中的一个命令来判断当前的服务是否是正常的,当命令行的返回结果是 0,则标识容器是健康的;
  3. 第三种探测方式是 tcpSocket。它是通过探测容器的 IP 和 Port 进行 TCP 健康检查,如果这个 TCP 的链接能够正常被建立,那么标识当前这个容器是健康的。

探测结果

从探测结果来讲主要分为三种:

  • 第一种是 success,当状态是 success 的时候,表示 container 通过了健康检查,也就是 Liveness probe 或 Readiness probe 是正常的一个状态;
  • 第二种是 Failure,Failure 表示的是这个 container 没有通过健康检查,如果没有通过健康检查的话,那么此时就会进行相应的一个处理,那在 Readiness 处理的一个方式就是通过 service。service 层将没有通过 Readiness 的 pod 进行摘除,而 Liveness 就是将这个 pod 进行重新拉起,或者是删除。
  • 第三种状态是 Unknown,Unknown 是表示说当前的执行的机制没有进行完整的一个执行,可能是因为类似像超时或者像一些脚本没有及时返回,那么此时 Readiness-probe 或 Liveness-probe 会不做任何的一个操作,会等待下一次的机制来进行检验。

那在 kubelet 里面有一个叫 ProbeManager 的组件,这个组件里面会包含 Liveness-probe 或 Readiness-probe,这两个 probe 会将相应的 Liveness 诊断和 Readiness 诊断作用在 pod 之上,来实现一个具体的判断。

Yaml文件分析

下面介绍这三种方式不同的检测方式的一个 yaml 文件的使用。

首先先看一下 exec,exec 的使用其实非常简单。如下图所示,大家可以看到这是一个 Liveness probe,它里面配置了一个 exec 的一个诊断。接下来,它又配置了一个 command 的字段,这个 command 字段里面通过 cat 一个具体的文件来判断当前 Liveness probe 的状态,当这个文件里面返回的结果是 0 时,或者说这个命令返回是 0 时,它会认为此时这个 pod 是处在健康的一个状态。

 

 那再来看一下这个 http Get,http Get 里面有一个字段是路径,第二个字段是 port,第三个是 headers。这个地方有时需要通过类似像 header 头的一个机制做 health 的一个判断时,需要配置这个 header,通常情况下,可能只需要通过 health 和 port 的方式就可以了。

 

 第三种是 tcpSocket,tcpSocket 的使用方式其实也比较简单,你只需要设置一个检测的端口,像这个例子里面使用的是 8080 端口,当这个 8080 端口 tcp connect 审核正常被建立的时候,那 tecSocket,Probe 会认为是健康的一个状态。

 

 

此外还有如下的五个参数,是 Global 的参数。

  • 第一个参数叫 initialDelaySeconds,它表示的是说这个 pod 启动延迟多久进行一次检查。比如说现在有一个 Java 的应用,它启动的时间可能会比较长,因为涉及到 jvm 的启动,包括 Java 自身 jar 的加载。所以前期,可能有一段时间是没有办法被检测的,而这个时间又是可预期的,那这时可能要设置一下 initialDelaySeconds;
  • 第二个是 periodSeconds,它表示的是检测的时间间隔,正常默认的这个值是 10 秒;
  • 第三个字段是 timeoutSeconds,它表示的是检测的超时时间,当超时时间之内没有检测成功,那它会认为是失败的一个状态;
  • 第四个是 successThreshold,它表示的是:当这个 pod 从探测失败到再一次判断探测成功,所需要的阈值次数,默认情况下是 1 次,表示原本是失败的,那接下来探测这一次成功了,就会认为这个 pod 是处在一个探针状态正常的一个状态;
  • 最后一个参数是 failureThreshold,它表示的是探测失败的重试次数,默认值是 3,表示的是当从一个健康的状态连续探测 3 次失败,那此时会判断当前这个pod的状态处在一个失败的状态。

应用健康状态-Liveness 与 Readiness 总结

 

标签:Readiness,probe,状态,Liveness,观测,探测,集群,pod,k8s
From: https://www.cnblogs.com/xinzhiyu/p/16909146.html

相关文章

  • k8s中pod、node、容器了解
    转自:https://juejin.cn/post/7037030068704051214,https://www.jianshu.com/p/94ee7e741d521.容器容器是docker技术中的概念:docker包括三个概念:镜像(image),容器(container)......
  • k8s超卖了解
    转自:https://testerhome.com/topics/31561?order_by=like&,https://fafucoder.github.io/2020/11/05/kubernetes-qos/https://github.com/bmwx4/k8s-in-practice/blob/mast......
  • Redis集群的搭建3主3从
    1、软件版本组件版本redis6.2.62、将部署包redis-6.2.6.tar.gz上传安装包到/usr/local/目录下;3、解压redis部署包3、解压redis部署包[root@hudi3local]#tar-xvfredis-6.2......
  • k8s:服务账号service-account相关参数设置:【重点一篇文章】
    为何写这篇文章?!主要在k8s中,serviceaccount是很要要的一个安全特性,官方资料、以及网上资料对这款的相关参数配置又语焉不详。这里也是自己的理解和解释。如有不对,请指......
  • 集群分发xsync xcall 脚本命令
     建立hosts白名单127.0.0.1localhostlocalhost.localdomainlocalhost4localhost4.localdomain4::1localhostlocalhost.localdomainlocalhost6loca......
  • K8s系列---【K8s常用命令】
    K8s常用命令1.查看所有node节点状态kubectlgetnodeskubectlgetnode-A 2.查看所有pod状态#查看所有命名空间下的podkubectlgetpod-A#默认查看default默认命名空间下......
  • 每天一点基础K8S--dockerfile的常见语法
    `dockerfile类似于ansible中的playbook文件,按需对dockerimage进行定制修改。参考文件可以通过mandockerfile查看,也可以去官网查看dockerfile中,常用语法主要包括:1......
  • 每天一点基础K8S--dockerfile练习
    点击查看代码#dockerfile文件[11-1415:39:27huaweiroot~/dockerfile]#ls-ltotal8-rw-r--r--1rootroot579Nov1415:25dockerfile-rw-r--r--1root......
  • Kubernetes(k8s)CNI(Calico)网络模型原理
    目录一、概述二、Calico架构和核心组件三、什么是BGP?三、Calico两种网络模式1)IPIP模式2)BGP模式四、安装Calico插件1)通过helm安装Calico2)通过yaml文件安装3)k8sflannel......
  • k8s配置禁止以 root 用户启动容器
    描述通过禁止以root用户启动容器,可以限制容器内进程的可用权限,降低被容器中恶意进程通过root权限入侵/破坏用户应用、主机甚至整个集群的风险。如果确认当前工作负载确......