配置 Endpoint Health Checker

概述

Endpoint Health Checker 是一个集群插件,用于监控和管理 k8s 集群中服务端点的健康状态。它会自动从服务中移除不健康的端点,确保流量仅路由到健康实例,从而提升整体服务的可靠性和可用性。

主要功能

  • 自动健康监控:持续监控 k8s 集群中服务端点的健康状态
  • 负载均衡器集成:自动从服务中移除不健康的端点
  • 服务可用性:确保流量仅定向到健康且可用的端点
  • 快速故障转移:在节点断电期间,将端点切换时间从 40s 缩短至 10s

安装

通过 Marketplace 安装

  1. 导航至 管理员 > Marketplace > 集群插件。

  2. 在插件列表中搜索 "Alauda Container Platform Endpoint Health Checker"。

  3. 点击 安装,打开安装配置页面。

  4. 在部署配置对话框中,您可以选择配置以下参数:

    参数描述
    节点选择器配置标签选择器,以指定 Endpoint Health Checker 组件应运行在哪些节点上。点击 添加 可添加多个标签键值对。
    节点容忍度配置容忍度,以允许 Endpoint Health Checker 组件调度到具有特定污点的节点上。点击 添加 可添加多个包含键、值和类型的容忍度。
  5. 点击 安装 以部署插件。

  6. 等待插件状态变为 "就绪"。

工作原理

健康检查机制

Endpoint Health Checker 是一个专用的健康监控组件,可确保只有健康的 Endpoint 才会接收流量。它通过监控服务 Endpoint 并自动管理其可用状态来实现这一目标。

核心功能

Endpoint Health Checker 的工作方式如下:

  1. 服务发现:识别集群中配置为进行健康监控的服务和 Pod。
  2. Pod 健康监控:监控为服务 Endpoint 提供支持的 Pod 的就绪探针和存活探针状态。
  3. 主动健康检查:使用可配置的条件执行主动健康评估:
    • TCP 连接检查:建立 TCP 连接以验证端口是否可访问。
  4. Endpoint 管理:自动从服务 Endpoint 列表中移除不健康的 Endpoint,防止流量路由到故障实例。

健康检查流程

健康检查流程包括:

  • 探针集成:使用 Kubernetes 就绪探针和存活探针的结果作为初始健康指标。
  • 网络连接:向目标 Endpoint 端口发送 TCP 数据包,以验证其可访问性。
  • 响应验证:评估响应状态、响应时间和内容,以确定 Endpoint 的健康状况。
  • 自动故障转移:从服务 Endpoint 列表中移除无响应或故障的 Endpoint。

性能改进

  • 之前的方法:依赖 kubelet 心跳检测,延迟最长可达 40 秒。
  • 当前的方法:主动执行 Endpoint 健康检查,检测和切换时间为 10 秒。
  • 改进效果:显著提升 ALB + MetalLB 环境在节点故障期间的服务可用性。

如何激活

可以通过以下两种方法激活健康检查:

Pod 级别注解(推荐)

对于 ALB

设置 ALB2 的 alb.cpaas.io/pod-annotations 注解。

apiVersion: crd.alauda.io/v2
kind: ALB2
metadata:
  annotations:
    alb.cpaas.io/pod-annotations: '{"endpoint-health-checker.io/enabled":"true"}'
  name: demo-alb
spec:
  config:
    loadbalancerName: demo-alb
    nodeSelector:
      ingress: 'true'
    replicas: 1
  type: nginx

对于 IngressNginx

  1. 安装 ingress-nginx
  2. 在 IngressNginx 的 .spec.controller.podAnnotations 中设置 podAnnotations。
    apiVersion: ingress-nginx.alauda.io/v1
    kind: IngressNginx
    metadata:
      name: demo
      namespace: ingress-nginx-operator
    spec:
      controller:
        replicaCount: 1
        podAnnotations:
          endpoint-health-checker.io/enabled: 'true'

对于 EnvoyGateway

按照如何在 Envoy Gateway 中添加 Pod 注解中的说明操作,并将注解设置为 endpoint-health-checker.io/enabled: 'true'。

对于自定义部署

在 Deployment 的 .spec.template.metadata.annotations 中设置 annotations。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
      annotations:
        endpoint-health-checker.io/enabled: 'true'
    spec:
      containers:
        - name: container
          ports:
            - containerPort: 8080
          livenessProbe:
            tcpSocket:
              port: 8080
            initialDelaySeconds: 15
            periodSeconds: 10
          readinessProbe:
            tcpSocket:
              port: 8080
            initialDelaySeconds: 5
            periodSeconds: 5

Pod 级别 readinessGates(旧版)

对于旧版本,请在 Pod spec 中配置 readinessGates:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pod-legacy
  namespace: cpaas-system
spec:
  replicas: 3
  selector:
    matchLabels:
      app: pod-legacy
  template:
    metadata:
      labels:
        app: pod-legacy
    spec:
      readinessGates:
        - conditionType: 'endpointHealthCheckSuccess'
      containers:
        - name: container
          image: your-image:latest
          ports:
            - containerPort: 8080
          livenessProbe:
            tcpSocket:
              port: 8080
            initialDelaySeconds: 15
            periodSeconds: 10
          readinessProbe:
            tcpSocket:
              port: 8080
            initialDelaySeconds: 5
            periodSeconds: 5

注意:readinessGates 配置来自旧版本。对于新部署,建议使用 Pod 注解 endpoint-health-checker.io/enabled: 'true'。

卸载

要卸载 Endpoint Health Checker:

  1. 导航至 管理员 > Marketplace > 集群插件。

  2. 找到已安装的 "Endpoint Health Checker" 插件。

  3. 单击选项菜单,然后选择 卸载。

  4. 根据提示确认卸载。

商标声明

Envoy® 是 The Linux Foundation 的注册商标。

NGINX® 是 F5, Inc. 在美国及其他国家/地区的注册商标。

MetalLB™ 是 The Linux Foundation 的商标。

Alauda 是独立供应商。本产品与 The Linux Foundation 或 F5, Inc. 无关联,也未获得其认可或赞助。所有商标均归其各自所有者所有,此处使用这些商标仅用于标识目的。