修改控制器的pod副本數
1、yml文件中修改replicas數量
2、在dashboard修改deployment的pod值;此修改只是臨時生效,重建yml文件后,pod數量會恢復,以yml文件為准
3、通過kubectl scale命令;此修改只是臨時生效,重建yml文件后,pod數量會恢復
4、通過kubectl edit編輯deployment
5、通過HPA控制器
手動調整pod數量:
kubectl scale 參數對運行在k8s 環境中的pod 數量進行擴容(增加)或縮容(減小)。
1、kubectl scale deployment/nginx-deployment --replicas=2 -n default #指定deployment的名稱
2、root@master1:~# kubectl get deployment -n default #查看擴容后控制器的pod數量
NAME READY UP-TO-DATE AVAILABLE AGE
net-test1 3/3 3 3 4d12h
nginx-deployment 2/2 2 2 5m42s
kubectl autoscale deployment/nginx-deploymen --min=2 --max=5 --cpu-percent=50 -n default
#自動擴容指定deployment的pod數量,當pod的cpu資源利用率達到50%,最大pod數量擴容到5個,最小2個pod數量
HPA自動伸縮pod數量
kubectl autoscale 參數自動控制在k8s集群中運行的pod數量(水平自動伸縮),需要提前設置pod范圍及觸發條件。
k8s從1.1版本開始增加了名稱為HPA(Horizontal Pod Autoscaler)的控制器,用於實現基於pod中資源
(CPU/Memory)利用率進行對pod的自動擴縮容功能的實現,早期的版本只能基於Heapster組件實現對CPU利用率
做為觸發條件,但是在k8s 1.11版本開始使用Metrices Server完成數據采集(采集pod的CPU/內存),然后將采集到的數據通過
API(Aggregated API,匯總API),例如metrics.k8s.io、custom.metrics.k8s.io、external.metrics.k8s.io,然后
再把數據提供給HPA控制器進行查詢,以實現基於某個資源利用率對pod進行擴縮容的目的。
控制管理器(kube-controller-manager)默認每隔15s(可以通過–horizontal-pod-autoscaler-sync-period修改)查詢metrics的資源使用情況
kube-controller-manager支持以下三種metrics指標類型:
->預定義metrics(比如Pod的CPU)以利用率的方式計算
->自定義的Pod metrics,以原始值(raw value)的方式計算
->自定義的object metrics
支持兩種metrics查詢方式:
->Heapster
->自定義的REST API
支持多metrics,即支持多種數據采集方式,采集pod指標數據

運維通過master的API創建一個HPA控制器,由HPA控制器對deployment進行自動伸縮,通過調用kube-controller-manager對pod數量進行管理;
配置了HPA的deployment發現pod的資源利用率超過了之前所設定的值,通過調用kube-controller-manager服務創建pod,直到pod的資源利用率低於所設定的值;HPA會通過metrics API獲取當前HPA所管理的deployment內部的POD的資源利用率
工作過程:
HPA通過master api(Metrices Server通過api server把采集到的數據記錄到etcd中,HPA會通過master api獲取到etcd中pod的數據)獲取到deployment中pod的指標數據,再與HPA提前定義好的值做對比,如果資源利用率超出定義的值,則會通過kube-controller-manager新建pod,直到資源利用率低於hpa所定義的值;
kube-controller-manager默認每隔15s會查詢metrics的資源使用情況
准備metrics-server
https://github.com/kubernetes-incubator/metrics-server #使用metrics-server作為HPA數據源。
1、cd /usr/local/src
2、git clone https://github.com/kubernetes-sigs/metrics-server.git #將項目克隆下來
3、git clone https://github.com/kubernetes-sigs/metrics-server.git
4、cd metrics-server/deploy/kubernetes/
5、grep image ./* #部署容器時,有的鏡像國外網站下載不下來,需要更換成國內地址
6、vim metrics-server-deployment.yaml
image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6 #將鏡像地址更換成國內阿里雲地址
7、kubectl apply -f . #將當前目錄下所有yml文件全部創建
8、cd /opt/k8s-data/yaml/magedu/tomcat-app1/
9、vim hpa.yaml
#apiVersion: autoscaling/v2beta1
apiVersion: autoscaling/v1 #定義API版本
kind: HorizontalPodAutoscaler #對象類型
metadata: #定義對象元數據
namespace: linux #hpa創建后隸屬的namespace
name: linux-tomcat-app1-podautoscaler #hpa對象名稱
labels:
app: linux-tomcat-app1 #自定義的label名稱
version: v2beta1 #自定義的api版本
spec: #定義對象具體信息
scaleTargetRef: #定義水平伸縮的目標對象,Deployment、ReplicationController/ReplicaSet
apiVersion: apps/v1 #目標對象的API版本
#apiVersion: extensions/v1beta1
kind: Deployment #目標對象類型為deployment
name: linux-tomcat-app1-deployment #目標deployment的具體名稱
minReplicas: 2 #最小pod數
maxReplicas: 4 #最大pod數
targetCPUUtilizationPercentage: 60 #CPU資源利用率
#metrics: #k8s-1.9之前使用此方法指定水平伸縮,現版本已經淘汰
#- type: Resource
# resource:
# name: cpu
# targetAverageUtilization: 60
#- type: Resource
# resource:
# name: memory
10、kubectl apply -f hpa.yaml
11、hpa的yml文件一般與服務的yml文件分開
12、kubectl describe deployment/linux-tomcat-app1-deployment -n linux
#desired 最終期望處於READY狀態的副本數
updated 當前完成更新的副本數(已經成為READY狀態的副本數)
total 總計副本數
available 當前可用的副本數
unavailable 不可用副本數
13、kubectl get hpa -n linux #查看指定namespace下的hpa控制器
注意
如果hpa的最小值高於業務yml文件replicas的值,以hpa值為准;
如果yml文件中的replicas值高於hpa的最小值,以hpa的最小值為准;
如果hpa控制器發現所監控的deployment下有pod的CPU資源利用率超過所指定的數值,會進行擴展pod,直到該deployment內各個pod的cpu利用率低於所指定的值為止;