zoukankan      html  css  js  c++  java
  • k8s deployment健康检查

    原文链接: http://idcsec.com/2019/03/14/k8s-deployment健康检查/

    进程健康检查

    健康检查最简单的方式就是检查进程的状态。Kubelet 不断的询问 Docker daemon 这个容器进程是否还在运行,如果没有,这个容器就会被重启。目前在所有 Kubernetes 的案例中,这种健康检查是一直开启的。对与 Kubernetes 中所有运行的容器都是生效的。然而,在很多场景中这个低级别的健康检查是没有作用的:比如进程也一直在运行,但是从应用的角度看,代码已经死锁,而且不会有正确的响应。

    Pod健康检测机制

    LivenessProbe探针:
    用于判断容器是否存活,即Pod是否为running状态,如果LivenessProbe探针探测到容器不健康,则kubelet将kill掉容器,并根据容器的重启策略是否重启,如果一个容器不包含LivenessProbe探针,则Kubelet认为容器的LivenessProbe探针的返回值永远成功。
    ReadinessProbe探针:
    用于判断容器是否正常提供服务,即容器的Ready是否为True,是否可以接收请求,如果ReadinessProbe探测失败,则容器的Ready将为False,控制器将此Pod的Endpoint从对应的service的Endpoint列表中移除,从此不再将任何请求调度此Pod上,直到下次探测成功。(剔除此pod不参与接收请求)

    目前,有三种类型的应用健康检查你可以选择:

    • exec:通过执行命令来检查服务是否正常,回值为0则表示容器健康
    • httpGet方式:通过发送http请求检查服务是否正常,返回200-399状态码则表明容器健康
    • tcpSocket:通过容器的IP和Port执行TCP检查,如果能够建立TCP连接,则表明容器健康

    探测的结果有以下三者之一:

    • Success:Container通过了检查。
    • Failure:Container未通过检查。
    • Unknown:未能执行检查,因此不采取任何措施。

    本环境使用httpGet方式

    案例:

    containers:
      - name: nginx
        image: nginx
        readinessProbe:
              httpGet:
                path: /
                port: 80
                scheme: HTTP
              initialDelaySeconds: 120 
              periodSeconds: 15 
              timeoutSeconds: 2
        livenessProbe: 
              httpGet: 
                path: /
                port: 80
                scheme: HTTP
              initialDelaySeconds: 180 
              timeoutSeconds: 2
              periodSeconds: 15
    ----------
    
    • initialDelaySeconds:容器启动后第一次执行探测是需要等待多少秒。
    • periodSeconds:执行探测的频率。默认是10秒,最小1秒。
    • timeoutSeconds:探测超时时间。默认1秒,最小1秒。
    • successThreshold:探测失败后,最少连续探测成功多少次才被认定为成功。默认是1。对于liveness必须是1。最小值是1。
    • failureThreshold:探测成功后,最少连续探测失败多少次才被认定为失败。默认是3。最小值是1。

    httpGet探测方式有如下可选的控制字段

    host:要连接的主机名,默认为Pod IP,可以在http request head中设置host头部。
    httpHeaders:
    – name: X-Custom-Header
    value: Awesome
    scheme: 用于连接host的协议,默认为HTTP。
    path:http服务器上的访问URI。
    httpHeaders:自定义HTTP请求headers,HTTP允许重复headers。
    port: 容器上要访问端口号或名称
    对于LivenessProbe和ReadinessProbe用法都一样,拥有相同的参数和相同的监测方式。
    当前对每一个Container都可以设置不同的restartpolicy,有三种值可以设置:
    Always : 只要container退出就重新启动
    OnFailure : 当container非正常退出后重新启动
    Never : 从不进行重新启动
    restartPolicy: [Always|Never|OnFailure]//重启策略
    如果restartpolicy没有设置,那么默认值是Always。如果container需要重启,仅仅是通过kubelet在当前节点进行container级别的重启。
    如果要使用ReadinessProbe只需要将livenessProbe修改为readinessProbe即可
    

    tcp 端口

    ports:
        - containerPort: 8080
        readinessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 20
          periodSeconds: 10
          timeoutSeconds: 1
        livenessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 20
          periodSeconds: 10
          timeoutSeconds: 1
    

    exec

    readinessProbe:
          exec:
            command: ["python", "health_check.py", "server=-addr=:80"]
          initialDelaySeconds: 5
          periodSeconds: 10
        livenessProbe:
          exec:
            command: ["python", "health_check.py", "server=-addr=:80"]
          initialDelaySeconds: 10
          periodSeconds: 10
    
    livenessProbe:
      exec:
        command:
        - wget
        - --quiet
        - --tries=1
        - --timeout=4
        - --spider
        - http://localhost:8080/readyz
      timeoutSeconds: 5
      initialDelaySeconds: 5
      periodSeconds: 5
    
  • 相关阅读:
    nacos 配置优先级
    spring cloud 依赖查询
    树-数据结构
    CI/CD + docker 综合实战
    CICD:CentOS 下 Jenkins 安装
    生产环境 OOM 与 GC 问题的处理思路
    如何优雅的进行接口管理
    合并多个Execl 电子表格 java poi
    深入了解数据导入的一些解决方案
    浅谈导出Execl的报表数据解决方案
  • 原文地址:https://www.cnblogs.com/DevOpsTechLab/p/12905339.html
Copyright © 2011-2022 走看看