自动扩展 APISIX 网关 (K8s)
自动扩展是一种机制,可自动调整网关可用的资源,确保在不同流量负载下保持一致的性能。
本文档将指导你完成设置 CPU 和内存请求、为 APISIX 创建水平 Pod 自动 伸缩器(HPA),并通过简单的负载测试验证扩展行为,使你的部署能够动态响应工作负载变化。
以下说明假定 APISIX 已安装在 Kubernetes 集群中。
部署 Metrics Server
水平 Pod 自动伸缩器(HPA)需要来自集群的 CPU 和内存指标。Kubernetes Metrics Server 从 kubelet 收集这些指标,并通过 Kubernetes API 公开它们。
要部署 Metrics Server,请运行:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
修补 Metrics Server 部署以允许到 kubelet 的不安全 TLS 连接,这在某些集群配置中可能是必需的:
kubectl patch deployment metrics-server \
-n kube-system \
--type='json' \
-p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value":"--kubelet-insecure-tls"}]'
要验证 Metrics Server 是否正常运行,你可以检查当前命名空间中 Pod 的 CPU 和内存使用情况:
kubectl top pods
假设 APISIX Pod 在当前命名空间中运行,你应该会看到其 CPU 和内存指标:
NAME CPU(cores) MEMORY(bytes)
apisix-595698f9df-hmbwn 19m 296Mi
这确认了指标正在被收集并且可供 HPA 使用。
配置资源请求和限制
为了确保适当的资源分配并使 HPA 能够有效地扩展 APISIX,你应该为 APISIX Gateway Pod 设置 CPU 和内存的请求和限制。
为此,请导出你 APISIX 版本的当前 Helm 值:
helm get values apisix --all > values.yaml
更新 resources 部分以包含 CPU 和内存的请求和限制。这确保 Kubernetes 调度程序可以为每个 Pod 分配足够的资源,并且 HPA 可以准确监控 Pod 的使用情况。
以下值是示例设置。在生产环境中,你应根据预期的流量、工作负载特性和集群资源调整 CPU 和内存的请求和限制。
resources:
requests:
cpu: "200m" # 保证的最小 CPU(0.2 CPU 核心)
memory: "256Mi" # 保证的最小内存(256 MiB)
limits:
cpu: "1" # 允许的最大 CPU(1 CPU 核心)
memory: "512Mi" # 允许的最大内存(512 MiB)
通过升级版本来应用更新的配置:
helm upgrade apisix apisix/apisix -f values.yaml
创建 HPA
为 APISIX 部署创建一个 HorizontalPodAutoscaler,自动将 Pod 数量扩展到 2 到 10 个之间。扩展基于平均 CPU 使用率,目标为 50%,以适应不同的流量负载。根据需要调整副本数和 CPU 目标以匹配你的工作负载和集群资源。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: apisix-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: apisix
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
应用配置以创建 HPA:
kubectl apply -f apisix-hpa.yaml
查看集群中 HPA 的当前状态:
kubectl get hpa
你应该会看到类似以下的输出:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
apisix-hpa Deployment/apisix cpu: 6%/50% 2 10 2 10m