随笔 - 378  文章 - 0  评论 - 5  阅读 - 6085

K8s高可用之Keepalived节点健康检测

Kubernetes高可用实战:Keepalived节点健康检测深度解析

在生产环境中,Keepalived是保障Kubernetes控制面高可用的重要组件。本文将揭秘其核心健康检测机制,并分享经过千节点集群验证的最佳实践方案。


一、Keepalived双保险检测机制

1. VRRP心跳检测(基础层)

核心参数解析

vrrp_instance VI_1 {
    advert_int 1     # 心跳间隔(秒)
    priority 100     # 初始优先级
    authentication { # 安全认证
        auth_type PASS
        auth_pass 62f7f8e5
    }
}

故障转移时序

  1. Master节点每1秒发送广播包
  2. Backup节点3秒未收到心跳触发选举
  3. 优先级最高的节点升主(默认20秒完成切换)
2. 自定义探针(业务层)
vrrp_script chk_k8s_node {
    script "/etc/keepalived/check_apiserver.sh"
    interval 3    # 检查间隔
    timeout 2     # 脚本超时时间
    rise 2        # 成功2次标记健康
    fall 3        # 失败3次标记异常
    weight -30    # 失败时优先级降低值
}

二、生产级健康检测方案

场景1:控制面APIServer检测

检测脚本示例

#!/bin/bash
curl -sk https://localhost:6443/healthz | grep -q ok || exit 1
场景2:ETCD集群健康检查
#!/bin/bash
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  endpoint health | grep -q 'healthy'
场景3:节点资源健康检查
#!/bin/bash
# 检查内存压力
memory=$(free | awk '/Mem/{printf("%.0f"), $3/$2*100}')
[ $memory -lt 90 ] || exit 1

# 检查磁盘空间
df -h /var/lib/kubelet | awk 'NR==2{print $5}' | grep -qvE '(90%|100%)'

三、高阶配置技巧

1. 多VRRP组负载均衡
vrrp_instance VI_1 {
    virtual_router_id 51
    virtual_ipaddress {
        192.168.1.100/24 dev eth0
    }
}

vrrp_instance VI_2 {
    virtual_router_id 52
    virtual_ipaddress {
        192.168.1.101/24 dev eth0
    }
}
2. 权重动态调整
vrrp_script chk_load {
    script "/etc/keepalived/check_load.sh"
    weight 50  # 健康时增加优先级
}

track_script {
    chk_load
    chk_k8s_node weight -30
}
3. 网络分区防护
vrrp_instance VI_1 {
    unicast_peer {  # 指定单播对端IP
        192.168.1.201
        192.168.1.202
    }
    nopreempt       # 禁止抢占
    preempt_delay 300 # 抢占延迟(秒)
}

四、监控告警体系

1. Prometheus指标采集
# keepalived-exporter配置
scrape_configs:
  - job_name: 'keepalived'
    static_configs:
      - targets: ['192.168.1.100:9650']
2. 关键监控指标
指标名称 告警阈值 说明
keepalived_vrrp_state != 2 主节点状态异常
keepalived_check_script_exit_code > 0 健康检查失败
keepalived_advert_interval > 1.5 心跳延迟过高
3. Grafana监控看板

五、故障排查工具箱

1. 实时状态查看
# 查看VIP绑定状态
ip addr show eth0 | grep '192.168.1.100'

# 查看VRRP日志
journalctl -u keepalived -f
2. 流量抓包分析
# 捕获VRRP协议包
tcpdump -i eth0 vrrp -nn -vv
3. 模拟故障演练
# 主动触发故障转移
systemctl stop kube-apiserver
watch -n1 'curl -s http://localhost:9650/metrics | grep state'

六、避坑指南

  1. 脑裂防护

    • 启用iptables防火墙规则:仅允许指定对端IP的VRRP通信
    • 配置至少3个节点形成多数派
  2. 性能调优

    vrrp_garp_master_refresh 60  # 降低ARP广播频率
    vrrp_garp_master_repeat 2
    
  3. 版本选择

    • Kubernetes 1.20+ 建议使用Keepalived v2.2+
    • 禁用SELinux:setenforce 0
  4. 容器化部署

    # DaemonSet示例
    securityContext:
      capabilities:
        add: ["NET_ADMIN", "NET_RAW"]
    

通过本文方案,某头部电商平台成功实现Kubernetes控制面故障切换时间从分钟级降至秒级。建议将核心配置版本化存储,并定期进行故障演练,以构建真正的高可用架构。记住:Keepalived不是银弹,必须与Kubernetes原生健康检查机制协同工作,才能达到最佳效果。

posted on   Leo-Yide  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

点击右上角即可分享
微信分享提示