一 Pod的擴容和縮容
Kubernetes對Pod的擴縮容操作提供了手動和自動兩種模式,手動模式通過執行kubectl scale命令或通過RESTful API對一個Deployment/RC進行Pod副本數量的設定,自動模式則需要用戶根據某個性能指標或者自定義業務指標,并指定Pod副本數量的范圍,系統將自動在這個范圍內根據性能指標的變化進行調整,1.1 手動縮容和擴容
1 [root@uk8s-m-01 study]# vi nginx-deployment.yaml 2 apiVersion: apps/v1beta1 3 kind: Deployment 4 metadata: 5 name: nginx-deployment 6 spec: 7 replicas: 3 8 template: 9 metadata: 10 labels: 11 app: nginx 12 spec: 13 containers: 14 - name: nginx 15 image: nginx:1.7.9 16 ports: 17 - containerPort: 80
1 [root@uk8s-m-01 study]# kubectl create -f nginx-deployment.yaml 2 [root@uk8s-m-01 study]# kubectl scale deployment nginx-deployment --replicas=5 #擴容至5個 3 [root@uk8s-m-01 study]# kubectl get pods #查看擴容后的Pod
1 [root@uk8s-m-01 study]# kubectl scale deployment nginx-deployment --replicas=2 #縮容至2個 2 [root@uk8s-m-01 study]# kubectl get pods
1.2 自動擴容機制
Kubernetes使用Horizontal Pod Autoscaler(HPA)的控制器實作基于CPU使用率進行自動Pod擴縮容的功能,HPA控制器基于Master的kube-controller-manager服務啟動引數--horizontal-pod-autoscaler-sync-period定義的探測周期(默認值為15s),周期性地監測目標Pod的資源性能指標,并與HPA資源物件中的擴縮容條件進行對比,在滿足條件時對Pod副本數量進行調整,- HPA原理
- HPA指標型別
- 擴縮容演算法
- Pod正在被洗掉(設定了洗掉時間戳):將不會計入目標Pod副本數量,
- Pod的當前指標值無法獲得:本次探測不會將這個Pod納入目標Pod副本數量,后續的探測會被重新納入計算范圍,
- 如果指標型別是CPU使用率,則對于正在啟動但是還未達到Ready狀態的Pod,也暫時不會納入目標副本數量范圍,
1.3 HorizontalPodAutoscaler
Kubernetes將HorizontalPodAutoscaler資源物件提供給用戶來定義擴縮容的規則, HorizontalPodAutoscaler資源物件處于Kubernetes的API組“autoscaling”中, 目前包括v1和v2兩個版本, 其中autoscaling/v1僅支持基于CPU使用率的自動擴縮容, autoscaling/v2則用于支持基于任意指標的自動擴縮容配置, 包括基于資源使用率、 Pod指標、 其他指標等型別的指標資料, 示例1:基于autoscaling/v1版本的HorizontalPodAutoscaler配置,僅可以設定CPU使用率,1 [root@uk8s-m-01 study]# vi php-apache-autoscaling-v1.yaml 2 apiVersion: autoscaling/v1 3 kind: HorizontalPodAutoscaler 4 metadata: 5 name: php-apache 6 spec: 7 scaleTargetRef: 8 apiVersion: apps/v1 9 kind: Deployment 10 name: php-apache 11 minReplicas: 1 12 maxReplicas: 10 13 targetCPUUtilizationPercentage: 50釋義: scaleTargetRef:目標作用物件,可以是Deployment、ReplicationController或ReplicaSet, targetCPUUtilizationPercentage:期望每個Pod的CPU使用率都為50%,該使用率基于Pod設定的CPU Request值進行計算,例如該值為200m,那么系統將維持Pod的實際CPU使用值為100m, minReplicas和maxReplicas:Pod副本數量的最小值和最大值,系統將在這個范圍內進行自動擴縮容操作, 并維持每個Pod的CPU使用率為50%, 為了使用autoscaling/v1版本的HorizontalPodAutoscaler,需要預先安裝Heapster組件或Metrics Server,用于采集Pod的CPU使用率, 示例2:基于autoscaling/v2beta2的HorizontalPodAutoscaler配置,
1 [root@uk8s-m-01 study]# vi php-apache-autoscaling-v2.yaml 2 apiVersion: autoscaling/v2beta2 3 kind: HorizontalPodAutoscaler 4 metadata: 5 name: php-apache 6 spec: 7 scaleTargetRef: 8 apiVersion: apps/v1 9 kind: Deployment 10 name: php-apache 11 minReplicas: 1 12 maxReplicas: 10 13 metrics: 14 - type: Resource 15 resource: 16 name: cpu 17 target: 18 type: Utilization 19 averageUtilization: 50釋義: scaleTargetRef:目標作用物件,可以是Deployment、ReplicationController或ReplicaSet, minReplicas和maxReplicas:Pod副本數量的最小值和最大值,系統將在這個范圍內進行自動擴縮容操作, 并維持每個Pod的CPU使用率為50%, metrics:目標指標值,在metrics中通過引數type定義指標的型別;通過引數target定義相應的指標目標值,系統將在指標資料達到目標值時(考慮容忍度的區間)觸發擴縮容操作,
- metrics中的type(指標型別)設定為以下幾種:
- Resource:基于資源的指標值,可以設定的資源為CPU和記憶體,
- Pods:基于Pod的指標,系統將對全部Pod副本的指標值進行平均值計算,
- Object:基于某種資源物件(如Ingress)的指標或應用系統的任意自定義指標,
1 metrics: 2 - type: Pods 3 pods: 4 metrics: 5 name: packets-per-second 6 target: 7 type: AverageValue 8 averageValue: 1k
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/153340.html
標籤:Linux
上一篇:manjaro安裝后的配置
