k8s怎么应用监控探针

作者:有用网 阅读量:208 发布时间:2024-01-14
关键字 k8s

这篇文章主要介绍“k8s怎么应用监控探针”,在日常操作中,相信很多人在k8s怎么应用监控探针问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”k8s怎么应用监控探针”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    应用监控

    k8s怎么应用监控探针

    在pod之上 添加一个探针, kubelet通过探针去检查应用

    pod状态转换

    pod的启动流程?

    • schduler环节 先绑定节点

    • kubelet接管

      • 监测pod是否健康

      • 准备CNI CSI CRI

      • 启动pod中的container

      • 启动探针

      • 存活探针

      • 就绪探针

    容器式运行的应用类似于“黑盒”,默认不会配置探针时 所以kublet只会监视pod的存活状态(但是无法检查是否处于正常的服务 对于pod不处理请求的情况无法检查 不能执行一些高级的检查)

    为了便于k8s对其进行监测,云原生应用应该输出用于监视自身的API

    • 包括健康状态、指标、分布式跟踪和日志等

    • 最基本要提供用于健康状态监测的API

    Pod支持的监测类型(健康探针)

    • startup Probe 启动探针,用来检查应用是否已经启动成功,适合那些有大量初始化工作要做,启动很慢的应用

    • liveness Probe 存活探针,用来检查应用是否正常运行,是否存在死锁、死循环

    • readiness Probe 就绪探针,用来检查应用是否可以接收流量,是否能够对外提供服务。

    监测机制

    • Exec Action:执行一个 Linux 命令看状态码,根据指定命令的结果状态码判定,

    • TcpSocket Action:使用TCP协议尝试连接容器的指定端口,根据相应TCP套接字连接建立状态判定

    • HTTPGet Action:连接端口并发送 HTTP GET 请求, 根据指定https/http服务URL的响应结果判定

    配置参数

    initialDelaySeconds

    periodSeconds: 执行探测动作的时间间隔,默认是 10 秒探测一次。

    timeoutSeconds: 探测动作的超时时间,如果超时就认为探测失败,默认是 1 秒。successThreshold: 连续几次探测成功才认为是正常,对于 startupProbe 和 livenessProbe 来说它只能是 1。

    failureThreshold: 连续探测失败几次才认为是真正发生了异常,默认是 3 次。

    示例

    同时定义了三种探针

    • startup使用Exec Action

    • liveness和readiness使用HTTPGet Action

    测试效果

    • liveness

      • URL "/livez" 支持以POST方法为livez参数设定不同值,非OK值都以5xx响应码响应;

    • readiness

      • URL "/readyz" 支持以POST方法为readyz参数设定不同值,非OK值都以5xx响应码响应;

    image pull policy 镜像管理策略

    Always 无论本地是否有相关的镜像 总是要到registry上下载 - 缺点 浪费带宽 - 好处 避免本地污染

    if not present 本地不存在相关的image是 才去registry上下载 - 好处 运行快 - 缺点 可能被污染 never 从不下载

    特殊情况 image 的tag是latest

    apiVersion: v1
    kind: Pod
    metadata:
        name: pod-probe-demo
        namespace: default
    spec:
        containers: 
        - name: demo
        image: ikubernetes/demoapp:v1.0
        imagePullPolicy: IfNotPresent
        startupProbe:
            exec:
                command: ['/bin/sh','-c','test','"$(curl -s 127.0.0.1/livez)"=="OK"']
            initialDelaySeconds: 0
            failureThreshold: 3
            periodSeconds: 2
        livenessProbe:
            httpGet:
                path: '/livez'
                port: 80
                scheme: HTTP
            initialDelaySeconds: 3
            timeoutSeconds: 2
        readinessProbe:
            httpGet:
                path: '/readyz'
                port: 80
                scheme: HTTP
            initialDelaySeconds: 15
            timeoutSeconds: 2
        restartPolicy: Always

    #发表评论
    提交评论