新增HPA資源
apiVersion: apps/v1
kind: Deployment
metadata:
name: wadweb-deployment
labels:
app: wadweb-deployment
spec:
selector:
matchLabels:
app: wadweb
replicas: 1
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
name: wadweb
labels:
app: wadweb
spec:
containers:
- name: wadwebapp
image: "你的registryURL/wad-web:v2.0.0"
imagePullPolicy: Always
resources:
limits:
cpu: 200m
memory: 500Mi
requests:
cpu: 100m
memory: 200Mi
ports:
- containerPort: 80
name: http
- name: wadwebapi
image: "你的registryURL/wad-web-api:v2.0.0"
imagePullPolicy: Always
resources:
limits:
cpu: 2000m
memory: 2Gi
requests:
cpu: 1000m
memory: 1Gi
env:
- name: DOTNET_RUNNING_IN_CONATINER
value: "true"
- name: ASPNETCORE_ENVIRONMENT
value: "Development"
- name: ASPNETCORE_URLS
value: "http://+:8080"
- name: ConnectionStrings__DefaultConnection
value: "Server=你的SQLServer Connection;Initial Catalog=WADREQM;Persist Security Info=False;User ID=你的SQLServer帳號;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=true;Connection Timeout=30;"
- name: Connection__Key
value: "我是密碼"
- name: HostUrl__RemoteHost
value: "http://192.168.1.34:8080"
- name: TZ
value: "Asia/Taipei"
volumeMounts:
- name: fileupload
mountPath: /app/upload
ports:
- containerPort: 8080
name: http
volumes:
- name: fileupload
hostPath:
path: /run/desktop/mnt/host/d/Kubernetes/fileupload
type: DirectoryOrCreate
restartPolicy: Always
v1版本
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: wadweb-autoscaling
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: wadweb-deployment
minReplicas: 1
maxReplicas: 10
targetCPUUtilizationPercentage: 30
v2版本
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: wadweb-autoscaling
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: wadweb-deployment
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 30
- spec.scaleTargetRef:指定要自動擴展的資源,這裡我們選擇上方範例設定的Deployment💡 kind可以是Deployment或ReplicaSet。正常情況下都不會單獨寫ReplicaSet,所以基本上記得是Deployment最簡單XD
- spec.minReplicas:最小副本數量
- spec.maxReplicas:最大副本數量
- spec.targetCPUUtilizationPercentage:當資源使用量達到這個數值時就會進行自動橫向擴展💡 這裡的數值是百分比的意思,以Web API的Pod為範例:我們設定spec.container.resource.requests.cpu=1000m,因此當我們使用率達到300m(1000m * 30%)時就會自動啟動橫向擴展💡 v2版本沒有這個屬性,取而代之的是metrics;它可以做更細部的設定!
部署完成後就可以使用指令查看HPA當前的狀態
kubectl get hpa
- TARGETS:欄位這裡顯示的是「當前資源使用率 / 自動擴展臨界值」💡 如果TARGETS欄位左手邊是「UNKNOWN」表示沒有安裝Metrics Server【點我前往安裝】
- MINPODS:最小Pod數量(對應spec.minReplicas)
- MAXPODS:最大Pod數量(對應spec.maxReplicas)
- REPLICAS:當前的Pod數量
壓力測試
成功部署HPA後我們來使用「壓力測試工具」來觀察Pod的數量變化,因為還沒學習Service的用法所以我們還是直接使用「port-forward」導出服務並確認Web API是否可以連線(Swagger畫面有無出現)
kubectl port-forward Pod的名稱 8080:8080
壓力測試開始後就可以使用指令來監控HPA的變化
kubectl get hpa wadweb-autoscaling --watch
監控後可以看到在服務達到尖峰的時候會逐漸開啟HPA的功能,最忙的時候還開到6個Pod去處理,是不是很厲害呢!另外從Docker Desktop來看也可以發現原本只有一個Pod,到後面逐漸增加的過程哦!
原本只有一個Pod |
逐漸增加的Pod |
3分鐘時間到停止打API後也可以看到資源使用率也慢慢的下降此時可以看到Pod數量依然是6個,接著我們再等個數分鐘可以發現神奇的事情發生了!由於已經不是尖峰時段,Pod的數量就自動減少,最終保持在1個Pod的數量
0 Comments
張貼留言