k8s 之HPA應用
阿新 • • 發佈:2020-12-02
1、建立測試deployment
apiVersion: v1 kind: Service metadata: name: my-app namespace: default spec: type: NodePort selector: app: my-app release: canary ports: - name: http nodePort: 30327 port: 80 --- apiVersion: apps/v1 kind: Deployment metadata: name: my-app-deploy namespace: default spec: replicas:3 selector: matchLabels: app: my-app release: canary template: metadata: labels: app: my-app release: canary spec: containers: - name: my-app image: ikubernetes/myapp:v2 ports: - name: http containerPort:80
resources:
requests:
cpu: 128m
memory: 128Mi
limits:
cpu: 128m
memory: 128Mi
kubectl create -f app.yaml
[root@10 ingress]# kubectl get pod | grep my-app my-app-deploy-76f86b954b-5r5n7 1/1 Running 03m25s my-app-deploy-76f86b954b-8n2dp 1/1 Running 0 3m25s my-app-deploy-76f86b954b-d95d8 1/1 Running 0 3m25s [root@10 ingress]# kubectl get svc | grep my-app my-app NodePort 192.168.192.192 <none> 80:30327/TCP 3m29s [root@10 ingress]#
2、建立HPA
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: my-app-hpa # 名稱 namespace: default #k8s名稱空間 spec: maxReplicas: 10 # 最大副本數 minReplicas: 3 # 最小副本數 scaleTargetRef: apiVersion: apps/v1beta1 kind: Deployment name: my-app-deploy # 監控名為my-app-deploy的Deployment targetCPUUtilizationPercentage: 20 # cpu 閾值
kubectl create -f hap.yaml [root@10 zhangpan]# kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE my-app-hpa Deployment/my-app-deploy <unknown>/80% 2 10 3 77s [root@10 zhangpan]#
也可以直接用命令建立hpa
kubectl autoscale deployment myapp --min=2 --max=10 --cpu-percent=20
如果出現unknown,可以檢視原始deployment的resource有沒有設定cpu的限制,或者沒有找到deployment,也有可能是由於heapster元件沒有安裝,也有可能是資料沒有檢測到,預設heapster採集時間為1分,需要稍等一會看一下狀態。
可以用kubectl describe hpa my-app-hpa 檢視具體原因
正常後顯示如下:
[root@10 zhangpan]# kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE my-app-hpa Deployment/my-app-deploy 0%/20% 2 10 2 6m29s [root@10 zhangpan]#