pod假死

K8S pod假死处理方案

近期在调研新技术方案, 开发和灰度过程中遇到pod假死问题; 总结出两个方案, 可供参考.
详细内容: https://jimmysong.io/kubernetes-handbook/guide/configure-liveness-readiness-probes.html

案例1

pod在运行一段时间, 出现pod假死; 假死之后流量还是会正常打入到该pod, 无法处理这部分请求, 体现在API接口上就是大量504超时.

处理方法

添加pod健康检查, 探测方式:exec方式, http探测, tcp探测; 可自行根据服务添加合理方式.
示例http探测方式:

livenessProbe:
    httpGet:
        path: /healthy
        port: 80
    initialDelaySeconds: 5  # 容器启动 5s 之后开始执行 Liveness 探测
    periodSeconds: 5  # 每 5s 探测一次

案例2

kafka消费异常, 某个pod消费能力不足(原因有许多, 比如代码需优化, 消息内容大, DB压力大等…), 导致rebalance, 从而同一个消费者组内的其他pod也rebalance, 数次之后, 出现pod假死, 表现为消息不消费, 观察pod无日志输出.

处理方法

添加生命探测, 与上面差不多.

livenessProbe:
    exec:
      command:
    - /bin/bash
    - probe.sh
    failureThreshold: 3
    periodSeconds: 6
    successThreshold: 1
    timeoutSeconds: 2

probe.sh

#!/bin/bash

outputfile=./health_check

echo "OK" > ${outputfile}

result=$(cat ${outputfile})

if [[ "${result}" == "OK" ]]
then
    # sleep 10s
    sleep 1s
    rm -rf ${outputfile}
    exit 0
else
    exit 1
fi

 上一篇
mysql 存储emoji 表情 mysql 存储emoji 表情
mysql 存储emoji 表情 近期订单模块发现奇怪bug,某个客户的订单一直更新不到系统中; 于是发现客户的订单号竟然有表情(🐝)…..真的奇葩;特殊表情字符无法入库,而订单相关表设计的字符集为utf8,不支持特殊字符。存储emoji
2021-10-13
下一篇 
WSGI和AWSGI WSGI和AWSGI
什么是WSGI?WSGI全称Web Server Gateway Interface(Web服务器网关接口),这是一个规范(标准);规定了web server如何与web application交互,application如何处理请求。 W
2021-09-27
  目录