跳到主要内容

AIC 高可用

API7 / APISIX Ingress Controller 通过领导者选举支持高可用。运行多个控制器副本时,只有 leader 实例会主动处理 Kubernetes 资源并配置网关。这可以避免配置冲突,并在 leader 不可用时自动故障转移。

领导者选举

控制器使用 Kubernetes Lease 资源进行领导者选举。部署多副本后,它们会协同选出一个 leader。只有 leader 会执行配置同步。

在控制器的配置文件中,可以找到领导者选举相关配置:

config.yaml
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 # 是否禁用领导者选举

如果环境需要更快故障转移,可以调小这些值:

config.yaml
leader_election:
lease_duration: 10s
renew_deadline: 7s
retry_period: 1s

缩短领导者选举时间可以让候选实例更快发现并替换不可用的 leader,从而降低故障转移时间。不过,较短时间也会增加 Lease 续约和重试频率,提高 Kubernetes API Server 负载,并在网络或资源条件不稳定时增加 leader 频繁切换的风险。

多副本

默认情况下,控制器只部署一个副本。如需启用高可用,请至少部署两个副本,使领导者选举能够发生,并在当前 leader 不可用时由备用实例接管。

你可以在 Helm values 文件中配置副本数:

values.yaml
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。