先啟用 Minikube 的 Metrics Server,再等待資源指標可以查詢。外掛顯示啟用,不代表量測資料立刻可用,因此若查詢暫時失敗,可以稍候重試。接著套用官方的運算負載範例,它包含測試用 Deployment 與 Service,並已設定 CPU 請求。
把下方 HPA 設定存成 hpa-demo.yaml 並套用,讓副本數在一到五之間調整,目標 CPU 使用率為請求量的百分之五十。先觀察低流量狀態,再建立持續呼叫服務的負載產生器,避免只看到控制器存在,卻沒有驗證它實際取得指標。
經過量測與控制週期後,使用率可能上升,副本數也可能增加。實際結果會受到電腦效能與叢集容量影響,不能保證固定秒數內擴到特定數量。如果指標顯示未知,先查看 HPA 詳細資料與 Metrics Server 狀態。
停止測試時刪除負載 Pod,再觀察副本逐漸下降。縮容通常會受到穩定時間窗影響,因此不一定立即發生。這個實驗的重點是把負載、量測、決策與實際副本連起來,並理解擴縮需要時間,而不是只記住一條建立指令。
minikube addons enable metrics-server
kubectl top nodes
kubectl apply -f <https://k8s.io/examples/application/php-apache.yaml>
kubectl rollout status deployment/php-apache --timeout=180s
hpa-demo.yaml:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
kubectl apply -f hpa-demo.yaml
kubectl run load-generator --image=busybox:1.37 --restart=Never -- sh -c 'while sleep 0.01; do wget -q -O- <http://php-apache>; done'
kubectl get hpa php-apache -w
觀察後按 Ctrl+C,停止負載並繼續查看:
kubectl delete pod load-generator
kubectl get hpa php-apache -w
參考:官方 HPA 實作教學