K8s部署高可用 Apache APISIX 集群

Kubernetes(K8s)部署高可用(High Availability)的 Apache APISIX 集群。部署要点、注意事项,并提供基于 Helm 的部署步骤,助你构建稳定、可靠的 APISIX 网关集群。
在这里插入图片描述


🔧 一、高可用部署核心要点

实现 APISIX 在 K8s 中的高可用,主要需关注以下几点:

  1. ETCD 集群高可用:APISIX 的所有配置(路由、服务、证书等)都存储在 etcd 中。etcd 的高可用是 APISIX 高可用的基石。在生产环境中,务必部署不少于 3 个节点的 etcd 集群,并确保它们分布在不同的故障域(如不同可用区)。
  2. APISIX 组件多副本:无论是 APISIX 网关本身,还是 apisix-ingress-controller,都应通过 Deployment 部署多个副本,并配置反亲和性(Anti-Affinity),避免副本集中在同一工作节点,从而避免单点故障。
  3. 持久化存储:etcd 是有状态服务,必须为每个 etcd 节点提供独立且持久的存储卷(Persistent Volume)。这样即使 Pod 重建,数据也不会丢失。
  4. 外部访问与负载均衡:需要通过 LoadBalancer 类型的 Service 或 Ingress 将 APISIX 网关暴露到集群外部,并确保流量能在多个 APISIX 网关副本间均衡分布。

在这里插入图片描述

📊 二、部署方式对比

在 K8s 中部署 APISIX,主要有两种方式,下表列出了它们的对比,Helm 通常是更便捷的选择:

特性Helm 部署 (推荐)YAML 文件部署
复杂度低,几条命令即可完成高,需自行处理所有资源定义和依赖
可维护性高,易于升级、回滚较低,需手动管理所有配置
灵活性高,可通过 values.yaml 灵活定制极高,可对每个细节进行定制
生产适用性非常适合适用,但管理成本较高

🚀 三、使用 Helm 部署高可用 APISIX 集群(推荐)

以下是使用 Helm 进行高可用部署的关键步骤和配置。假设你已安装 kubectlhelm

步骤 1: 添加 Helm 仓库
helm repo add apisix https://charts.apiseven.com
helm repo update
步骤 2: 准备 Values.yaml 配置文件

创建一个自定义的 values.yaml 文件来覆盖默认配置,这是实现高可用的核心。关键配置如下:

# values.yaml 高可用配置示例

# 1. 配置 APISIX 网关多副本及反亲和性
gateway:
  replicaCount: 3  # 根据需求调整副本数
  autoscaling:  # 可选:配置水平自动扩缩容 (HPA)
    enabled: true
    minReplicas: 3
    maxReplicas: 10
    targetCPUUtilizationPercentage: 80
  podAntiAffinity:  # 反亲和性,尽量将 Pod 分散到不同节点
    requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
            - key: app.kubernetes.io/name
              operator: In
              values:
                - apisix
        topologyKey: kubernetes.io/hostname

# 2. 高可用 ETCD 集群配置 (核心!)
etcd:
  replicaCount: 3  # 必须 3 个或更多奇数节点
  persistence:
    enabled: true
    storageClass: "alicloud-disk-ssd"  # 替换为你集群中可用的 StorageClass
    size: 20Gi  # 根据实际需求调整存储大小
  # 资源请求与限制
  resources:
    requests:
      cpu: 500m
      memory: 512Mi
    limits:
      cpu: 2000m
      memory: 2Gi

# 3. 启用 Ingress Controller 并配置多副本
ingress-controller:
  enabled: true
  replicaCount: 2  # 通常 2 个副本即可
  config:
    apisix:
      serviceNamespace: apisix  # 指定 APISIX Admin API 的命名空间

# 4. 启用 Dashboard (可选)
dashboard:
  enabled: true
  # Dashboard 的服务类型,可根据需要设置为 ClusterIP, NodePort 或 LoadBalancer
  service:
    type: LoadBalancer

📌 关键配置说明

  • StorageClassetcd.persistence.storageClass 必须设置为你的 K8s 集群中可用的、支持动态供给的存储类。在阿里云 ACK 中,可以是 alicloud-disk-ssd;AWS EKS 中可能是 gp2gp3;自建集群可能需要配置 Ceph RBD 或 NFS Provisioner。
  • 资源限制:务必为 etcdgateway 设置合理的 CPU 和内存资源请求与限制,防止资源竞争导致容器被杀。
  • 反亲和性podAntiAffinity 配置能尽量避免同一应用的 Pod 调度到同一节点,提升容灾能力。
步骤 3: 执行 Helm Install

使用你的 values.yaml 文件部署 APISIX。建议部署到独立的命名空间。

# 创建命名空间
kubectl create namespace apisix

# 部署 APISIX
helm install apisix apisix/apisix \
  --namespace apisix \
  --values values.yaml  # 指定你的自定义配置文件
步骤 4: 验证部署

检查 Pod 是否全部正常运行,且副本数符合预期:

kubectl get pods -n apisix

期望的输出应显示所有 Pod 都处于 Running 状态,例如:

NAME READY STATUS RESTARTS AGE
apisix-etcd-0 1/1 Running 0 5m
apisix-etcd-1 1/1 Running 0 5m
apisix-etcd-2 1/1 Running 0 5m
apisix-gateway-xxx-yyy 1/1 Running 0 5m
apisix-gateway-xxx-zzz 1/1 Running 0 5m
apisix-gateway-xxx-www 1/1 Running 0 5m
apisix-ingress-controller-aaa-bbb 1/1 Running 0 5m
apisix-ingress-controller-aaa-ccc 1/1 Running 0 5m

检查 Service,确认 apisix-gatewayapisix-dashboard (如果启用) 的服务类型:

kubectl get svc -n apisix

⚠️ 四、重要注意事项与故障排查

  1. 存储卷权限问题:在某些环境中(如阿里云 ACK 使用云盘),etcd Pod 可能会因无权限写入挂载目录而启动失败。解决方法是在 values.yamletcd 部分添加以下配置:

    etcd:
      # ... 其他配置
      volumePermissions:
        enabled: true  # 启用初始化容器来修改卷权限
      securityContext:
        fsGroup: 0  # 设置文件组ID
        runAsUser: 0  # 设置运行用户ID
    
  2. 访问 APISIX 网关和 Dashboard

    • 通常将 apisix-gateway 服务的类型设置为 LoadBalancer,云提供商会自动分配一个外部 IP 或域名。
    • 同样,若需从外部访问 Dashboard,也可将其服务类型设置为 LoadBalancer务必注意 Dashboard 的安全风险,应配置强密码、启用 HTTPS 并严格限制访问源 IP。
  3. 资源监控与自动扩缩容 (HPA):生产环境强烈建议配置 HPA(如示例配置),并根据实际监控指标(如 QPS、连接数、CPU 负载)动态调整 APISIX 网关的副本数。

  4. 备份与灾难恢复:定期备份 etcd 的数据至关重要。你可以使用 etcdctl 工具手动备份,或使用 Velero 等工具备份整个 Persistent Volume,以确保在发生严重故障时能够恢复。


💎 总结

在 K8s 中部署高可用的 Apache APISIX 集群,关键在于确保 ETCD 集群的高可用和多副本部署、为 ETCD 提供可靠的持久化存储,以及通过反亲和性等方式避免单点故障。使用 Helm chart 可以极大地简化部署和管理的复杂度。

部署完成后,你应该通过 kubectl get pods -n apisix 验证所有组件(特别是 etcd 和 gateway)的副本数是否都按预期运行,并通过 kubectl get svc -n apisix 确认网关服务是否已成功暴露以便接收外部流量。

希望这份指南能助你顺利完成高可用 APISIX 集群的部署。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值