livenessProbe

exec(命令行)

  • livenessProbe命令行方式检测:web-dev-cmd.yaml,在容器中执行一个命令 推出返回0 算成功。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #deploy
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: web-demo
    namespace: dev
    spec:
    selector:
    matchLabels:
    app: web-demo
    replicas: 1
    template:
    metadata:
    labels:
    app: web-demo
    spec:
    containers:
    - name: web-demo
    image: chcgolang/frps
    ports:
    - containerPort: 7500
    livenessProbe: # 容器存活检查探针
    exec: # 通过执行shell命令来检查服务是否正常
    command: #或者command["/bin/sh","-c","ps -ef|grep frps.ini|grep -v grep"]
    - /bin/sh # 使用sh脚本
    - -c
    - ps -ef|grep frps.ini|grep -v grep # 检测frps进程
    initialDelaySeconds: 10 # 表明第一次检测在容器启动后多长时间后开始(秒)
    periodSeconds: 10 # 检查间隔时间 (秒)
    failureThreshold: 2 #检查失败次数,超了这个次数直接根据重启策略进行操作
    successThreshold: 1 #检查失败之后最小成功连续次数,默认 1,活跃度必须为 1
    timeoutSeconds: 5 # 超时秒数,默认 1s,最小值为 1s
  • 执行检测的顺序

    1
    2
    ps -ef|grep frps.ini|grep -v grep
    echo $? #结果为0则成功,结果为1失败

http(http请求)

  • 通过发送http的get请求检查服务是否正常,返回200-399状态码则表明容器健康

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #deploy
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: web-demo
    namespace: dev
    spec:
    selector:
    matchLabels:
    app: web-demo
    replicas: 1
    template:
    metadata:
    labels:
    app: web-demo
    spec:
    containers:
    - name: web-demo
    image: httpd
    ports:
    - containerPort: 80
    livenessProbe: # 开启健康检测
    httpGet: #http的get请求
    path: /index.html # 访问地址
    port: 80 # 服务端口
    scheme: HTTP #请求方式HTTP/HTTPS
    httpHeaders:
    - name: X-Custom-Header
    value: Awesome
    initialDelaySeconds: 5 # 表明第一次检测在容器启动后多长时间后开始(秒)
    periodSeconds: 5 # 检查间隔时间 (秒)
    failureThreshold: 1 #检查失败次数,超了这个次数直接根据重启策略进行操作
    successThreshold: 1 #检查失败之后最小成功连续次数,默认 1,活跃度必须为 1
    timeoutSeconds: 5 # 超时秒数,默认 1s,最小值为 1s

TCP Socket

  • 通过tcp链接到指定端口来测试容器是否健康

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: web-demo
    namespace: dev
    spec:
    selector:
    matchLabels:
    app: web-demo
    replicas: 1
    template:
    metadata:
    labels:
    app: web-demo
    spec:
    containers:
    - name: web-demo
    image: chcgolang/goproxy
    ports:
    - containerPort: 8080
    livenessProbe:
    tcpSocket: # tcpSocket的方式进行健康检测
    port: 8080 # tcp端口号
    initialDelaySeconds: 20
    periodSeconds: 10
    failureThreshold: 2
    successThreshold: 1
    timeoutSeconds: 5
    readinessProbe: # 判断容器是否完成(Ready状态),可以接收请求
    tcpSocket:
    port: 8080
    initialDelaySeconds: 20
    periodSeconds: 10
    failureThreshold: 2
    successThreshold: 1
    timeoutSeconds: 5

readinessProbe和livenessProbe的区别

  • livenessProbe

    用于判断容器是否存活(Running状态),如果LivenessProbe探针探测到容器不健康,则kubelet将杀掉该容器,并根据容器的重启策略做相应的处理

    用与判断服务是否存活,然后进行重启策略的相关操作

  • readinessProbe

    用于判断容器是否启动完成(ready状态),可以接收请求。如果ReadinessProbe探针检测到失败,则Pod的状态被修改

    用于判断服务是否可以对外提供服务

Pod重启策略基本说明和状态描述

  • Pod的重启策略包括:Always、OnFailure和Never,默认值为Always。

    根据RestartPolicy的设置来进行相应的操作

    1
    2
    3
    Always:当容器失效时,由kubelet自动重启该容器。
    OnFailure:当容器终止运行且退出码不为0时,由kubelet自动重启该容器。
    Never:不论容器运行状态如何,kubelet都不会重启该容器
  • Pod的状态描述

    状态值 描述
    Pending API Server已经创建该Pod,但在Pod内还有一个或多个容器的镜像没有创建,包括正在下载镜像的过程。
    Runnung Pod内所有容器均已创建,且至少有一个容器处于运行状态、正在启动状态或正在重启状态。
    Succeeded Pod内所有容器均成功执行后退出,且不会再重启。
    Failed Pod内所有容器均已退出,但至少有一个容器退出为失败状态。
    Unknown 由于某种原因无法获取该Pod的状态,可能由于网络通信不畅导致。

相关配置说明

  • 探针

    探针参数 说明
    initialDelaySeconds 表明第一次检测在容器启动后多长时间后开始(秒)
    periodSeconds 检查间隔时间 (秒),默认为10秒。最小值为1
    failureThreshold 检查失败次数,超了这个次数将被标记为未准备好,默认为3.最小值为1
    successThreshold 检查失败之后最小成功连续次数,默认 1,活跃度必须为 1
    timeoutSeconds 超时秒数,默认 1s,最小值为 1s
  • http

    Http Get 说明
    host 要连接的主机名,默认为pod IP。您可能希望在httpHeaders中设置“主机”
    scheme 用于连接主机(HTTP或HTTPS)的方案。默认为HTTP
    path HTTP服务器上的访问路径
    httpHeaders 要在请求中设置的自定义标头。HTTP允许重复标头
    port 容器上要访问的端口的名称或编号。数字必须在1到65535的范围内

问题解决

  • 容器不停的重启,启动不起来

    可以使用commandls等方式不让容器重启,然后使用exec进入容器当中查看启动状况

  • readinessProbelivenessProbe的执行顺序

    readinessProbelivenessProbe