免費推廣網(wǎng)站在線觀看網(wǎng)絡運營課程培訓班
文章目錄
- 一、k8s彈性伸縮類型
- 二、HPA原理
- 三、metrics-server插件
- 四、創(chuàng)建nginx提供負載測試
- 五、部署HPA
master操作即可
一、k8s彈性伸縮類型
- Cluster-Autoscale: 集群容量(node數(shù)量)自動伸縮,跟自動化部署相關的,依賴iaas的彈性伸縮,主要用于虛擬機容器集群
- Vertical Pod Autoscaler: 工作負載Pod垂直(資源配置)自動伸縮,如自動計算或調整deployment的Pod模板limit/request,依賴業(yè)務歷史負載指標
- Horizontal-Pod-Autoscaler: 工作負載Pod水平自動伸縮,如自動scale deployment的replicas,依賴業(yè)務實時負載指標
二、HPA原理
HPA在k8s中也由一個controller控制,controller會間隔循環(huán)HPA,檢查每個HPA中監(jiān)控的指標是否觸發(fā)伸縮條件,默認的間隔時間為15s。一旦觸發(fā)伸縮條件,controller會向k8s發(fā)送請求,修改伸縮對象(statefulSet、replicaController、replicaSet)子對象scale中控制pod數(shù)量的字段。k8s響應請求,修改scale結構體,然后會刷新一次伸縮對象的pod數(shù)量。伸縮對象被修改后,自然會通過list/watch機制增加或減少pod數(shù)量,達到動態(tài)伸縮的目的。
三、metrics-server插件
-
概念:用來收集K8s集群中的資源使用情況。每15秒進行一次數(shù)據(jù)采集(可以通過-horizontal-pod-autoscaler-sync-period修改查詢metrics的資源使用情況),占用資源少,每個Node占用1 mili core的CPU和2 MB內(nèi)存,目前只能對CPU和內(nèi)存進行監(jiān)控
-
下載yaml文件:wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.1/components.yaml
-
修改yaml文件配置:vi components.yaml
1. 注釋- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname在底下添加- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP # node address類型的優(yōu)先權設置- --kubelet-insecure-tls # 取消安全驗證 2. 注釋image: registry.k8s.io/metrics-server/metrics-server:v0.6.3在底下添加image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.1
-
部署:kubectl apply -f components.yaml
-
查看pod:kubectl get pod -n kube-system
-
查看資源使用情況:
1)kubectl top node
2)kubectl top pod -n kube-system
ps:查看全部空間的命令為kubectl top pod --all-namespaces
四、創(chuàng)建nginx提供負載測試
-
創(chuàng)建yaml:vi /opt/pod-controller.yaml
apiVersion: apps/v1 kind: Deployment metadata:name: pod-controllerlabels:controller: deploy spec:replicas: 1selector:matchLabels:app: nginx-podtemplate:metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:latestports:- name: nginx-portcontainerPort: 80protocol: TCPresources: # 要設置每個容器最低使用的CPU,不然測試不出效果requests:cpu: "0.1"
-
創(chuàng)建pod:kubectl apply -f /opt/pod-controller.yaml
-
暴露端口:kubectl expose deployment pod-controller --name=nginx-service --type=NodePort --port=80 --target-port=80
-
查看端口:kubectl get svc
-
訪問:http://192.168.248.11:31409/
五、部署HPA
-
新建pod-hpa.yaml:vi /opt/pod-hpa.yaml
ps:也可以直接設置控制器的資源限制:kubectl autoscale deploy 控制器 --cpu-percent=3 --min=1 --max=10
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: pod-hpa # hpa的名稱labels:controller: hpa # 給hpa打標簽 spec:minReplicas: 1 # 縮容最小Pod數(shù)量maxReplicas: 10 # 擴容最大Pod數(shù)量targetCPUUtilizationPercentage: 3 # 為了便于測試,這里設置CPU使用率警戒線為3%scaleTargetRef: # 指定要控制的Deployment的信息apiVersion: apps/v1kind: Deploymentname: pod-controller
-
創(chuàng)建pod:kubectl apply -f /opt/pod-hpa.yaml
-
查看HPA: kubectl get hpa
-
查看服務pod個數(shù):kubectl get deploy pod-controller -o wide
-
使用postman測壓工具不斷訪問:http://192.168.248.11:31409/