在 Kubernetes 上部署 Apache APISIX 並進行自動縮放 (autoscaling),你需要配置 HorizontalPodAutoscaler
(HPA)。HPA 根據 CPU 使用率或其他指標自動調整 Apache APISIX pod 的數量。以下是基本的 YAML 配置範例,展示如何設置 Apache APISIX 的 HPA。
apiVersion: apps/v1
kind: Deployment
metadata:
name: apisix
labels:
app: apisix
spec:
replicas: 2 # 初始 pod 數量
selector:
matchLabels:
app: apisix
template:
metadata:
labels:
app: apisix
spec:
containers:
- name: apisix
image: apache/apisix:latest
ports:
- containerPort: 9080
resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "1000m"
memory: "1Gi"
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: apisix-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: apisix # 對應 Deployment 名稱
minReplicas: 2 # 最小 pod 數量
maxReplicas: 10 # 最大 pod 數量
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50 # 當 CPU 使用率超過 50% 時觸發擴展
minReplicas
和 maxReplicas
,或依賴不同的指標來決定何時進行縮放。當 Apache APISIX 的負載增加,CPU 使用率超過 50% 時,HPA 會自動增加 pod 的數量,以便應對高負載。
將 Deployment
和 HorizontalPodAutoscaler
一起寫在同一個 YAML 文件中,這樣在應用時只需一次 kubectl apply
就能同時部署 Apache APISIX 並設定自動縮放。以下是將兩者結合的 YAML 範例:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: apisix
labels:
app: apisix
spec:
replicas: 2 # 初始 pod 數量
selector:
matchLabels:
app: apisix
template:
metadata:
labels:
app: apisix
spec:
containers:
- name: apisix
image: apache/apisix:latest
ports:
- containerPort: 9080
resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "1000m"
memory: "1Gi"
---
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: apisix-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: apisix # 對應 Deployment 名稱
minReplicas: 2 # 最小 pod 數量
maxReplicas: 10 # 最大 pod 數量
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50 # 當 CPU 使用率超過 50% 時觸發擴展
---
是用來分隔多個 Kubernetes 資源的標記符號。Deployment
和 HorizontalPodAutoscaler
,當你執行 kubectl apply -f
時,Kubernetes 會依序處理這兩個資源。這樣做的好處是可以在同一個文件中管理所有配置,保持配置的集中和簡潔。
https://chatgpt.com/share/67055439-7008-8001-be3e-60cd2cf8309f