AIC 高可用
API7 / APISIX Ingress Controller 通过领导者选举支持高可用。运行多个控制器副本时,只有 leader 实例会主动处理 Kubernetes 资源并配置网关。这可以避免配置冲突,并在 leader 不可用时自动故 障转移。
领导者选举
控制器使用 Kubernetes Lease 资源进行领导者选举。部署多副本后,它们会协同选出一个 leader。只有 leader 会执行配置同步。
在控制器的配置文件中,可以找到领导者选举相关配置:
leader_election_id: "apisix-ingress-controller-leader" # Ingress Controller 的领导者选举 ID。
leader_election:
lease_duration: 30s # lease_duration 是非 leader 在最后一次观察到 leader 续约后,
# 等待多久再尝试接管 leader 身份。
renew_deadline: 20s # renew_deadline 是当前控制器在放弃前,
# 尝试刷新 leader 身份的时间。
retry_period: 2s # retry_period 是当前控制器两次尝试执行操作之间的等待时间。
disable: false # 是否禁用领导者选举
如果环境需要更快故障转移,可以调小这些值:
leader_election:
lease_duration: 10s
renew_deadline: 7s
retry_period: 1s
缩短领导者选举时间可以让候选实例更快发现并替换不可用的 leader,从而降低故障转移时间。不过,较短时间也会增加 Lease 续约和重试频率,提高 Kubernetes API Server 负载,并在网络或资源条件不稳定时增加 leader 频繁切换的风险。
多副本
默认情况下,控制器只部署一个副本。如需启用高可用,请至少部署两个副本,使领导者选举能够发生,并在当前 leader 不可用时由备用实例接管。
你可以在 Helm values 文件中配置副本数:
deployment:
replicas: 2
也可以在安装或升级时使用 Helm --set 参数覆盖该值:
--set ingress-controller.deployment.replicas=2
更多信息请参阅 Helm Chart。
验证领导者选举
你可以检查 Lease 资源,并测试故障转移行为,确认领导者选举正常工作。
查看 Lease 资源以确认当前 leader:
kubectl get lease apisix-ingress-controller-leader -n <namespace> -o yaml
Lease 资源中的 holderIdentity 字段表示当前 leader。如果 leader Pod 被终止,会自动选出新的 leader。
如需验证故障转移行为,可删除当前 leader Pod 来模拟 leader 故障:
kubectl delete pod -n <namespace> <leader-pod-name>
剩余副本应通过领导者选举过程自动获得 leader 身份。新的 leader 通常会在几个重试周期内选出。再次验证是否已选出新 leader:
kubectl get lease apisix-ingress-controller-leader -n <namespace> -o yaml
确认 Lease 资源中的 holderIdentity 字段已反映新选出的 leader。