配置 Endpoint Health Checker
目录
Overview
Endpoint Health Checker 是一个集群插件,旨在监控和管理 k8s 集群中服务端点的健康状态。它会自动将不健康的端点从服务中移除,确保流量仅路由到健康实例,从而提升整体服务的可靠性和可用性。
Key Features
- 自动健康监控:持续监控 k8s 集群中服务端点的健康状态
- 负载均衡集成:自动将不健康端点从服务中移除
- 服务可用性:确保流量仅导向健康且可用的端点
- 快速故障切换:在节点断电时将端点切换时间从 40 秒缩短至 10 秒
Installation
通过 Marketplace 安装
-
进入 管理员 > Marketplace > 集群插件。
-
在插件列表中搜索“Alauda Container Platform Endpoint Health Checker”。
-
点击 安装 打开安装配置页面。
-
在部署配置对话框中,可选配置以下参数:
| 参数 | 描述 |
|---|
| 节点选择器 | 配置标签选择器,指定 Endpoint Health Checker 组件应运行在哪些节点上。点击 添加 可添加多个标签键值对。 |
| 节点容忍度 | 配置容忍度,允许 Endpoint Health Checker 组件调度到带有特定污点的节点上。点击 添加 可添加多个包含 Key、Value 和类型的容忍度。 |
-
点击 安装 部署插件。
-
等待插件状态变为“Ready”。
How It Works
健康检查机制
Endpoint Health Checker 是专门的健康监控组件,确保只有健康的端点接收流量。它通过监控服务端点并自动管理其可用性状态来实现。
核心功能
Endpoint Health Checker 的工作流程:
- 服务发现:识别集群中配置了健康监控的服务和 Pod。
- Pod 健康监控:监控支撑服务端点的 Pod 的就绪和存活探针状态。
- 主动健康检查:使用可配置的标准执行主动健康评估:
- TCP 连接检查:建立 TCP 连接以验证端口可访问性。
- 端点管理:自动将不健康端点从服务端点列表中移除,防止流量路由到故障实例。
健康检查流程
健康检查流程包括:
- 探针集成:利用 Kubernetes 的就绪和存活探针结果作为初步健康指标。
- 网络连通性:向目标端点端口发送 TCP 包以验证可访问性。
- 响应验证:评估响应状态、时长和内容以确定端点健康状况。
- 自动故障切换:将无响应或失败的端点从服务端点列表中移除。
性能提升
- 之前方法:依赖 kubelet 心跳检测,延迟最长达 40 秒。
- 当前方法:主动端点健康检查,检测和切换时间为 10 秒。
- 提升效果:显著提升 ALB + MetalLB 环境中节点故障时的服务可用性。
How To Activate
健康检查可通过以下两种方式激活:
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
- 安装 ingress-nginx
- 在
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-operator
- 在
EnvoyProxy 的 .spec.provider.kubernetes.envoyDeployment.patch.value.spec.template.metadata.annotations 中设置 annotations。
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: demo
spec:
infrastructure:
parametersRef:
group: gateway.envoyproxy.io
kind: EnvoyProxy
name: demo
gatewayClassName: envoy-gateway-operator-cpaas-default
listeners:
- name: http
port: 80
protocol: HTTP
---
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
name: demo
spec:
provider:
kubernetes:
envoyDeployment:
replicas: 1
patch:
type: StrategicMerge
value:
spec:
template:
metadata:
annotations:
endpoint-health-checker.io/enabled: 'true'
container:
imageRepository: registry.alauda.cn:60080/acp/envoyproxy/envoy
type: Kubernetes
针对自定义 Deployment
在 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 的 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'。
Uninstallation
卸载 Endpoint Health Checker:
-
进入 管理员 > Marketplace > 集群插件。
-
找到已安装的“Endpoint Health Checker”插件。
-
点击选项菜单,选择 卸载。
-
按提示确认卸载。