023.掌握Pod-Pod扩容和缩容
一 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

更多精彩