Pod 的扩容和缩容操作有手动和自动两种模式,手动模式通过执行 kubectl scale 命令对一个 Deployment/RC 进行 Pod 副本数量设置。自动模式则需要用户根据某个性能指标或者自定义业务指标 Pod 副本数量的范围,系统将自动在这个范围内根据性能指标 进行调整。

一、手动扩容和缩容

1
2
3
4
5
将Deployment nginx数量提升到5个
kubectl scale deployment nginx-deployment --replicas=5

#--replicas 设置为比当前 Pod 副本数量更小的数 系统将会杀掉一些运行中的 Pod
kubectl scale deployment nginx-deployment --replicas=1

二、自动扩容和缩容

Horizontal Pod Autoscaler( HPA) ,用于实现基于 CPU 使用率进行自动 Pod 扩容和缩 的功能。HPA制器基于 Master的kube-controller-manager 服务启动参数 horizontal- pod-autoscaler-sync-period 定义义的时长(默值为 30s )周期性检测目标 Pod的CPU使用率 井在满足条件时对 ReplicationControllerDeployment 中的 Pod 副本数量进行调整,以符合 户定义的 Pod CPU 使用率。 Pod CPU使用率来源于 Heapster 组件 所以需要预先安装好 Heapster

创建HPA 使用 kubectl autoscale 者使 yaml 件进行创建。创建HPA 之前,需要己经存在一个 Deployment/RC ,Deployment/RC 中的 Pod必指定 resources.requests.cpu 资源请求 ,如果不设置该值,则 Heapster 无法采集Pod CPU 使用情况,会导致HPA无法正常工作

创建一个deployment:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#php-apache-deployment.yaml 
apiVersion: apps/v1beta1
kind: Deployment
metadata :
name: php-apache
spec :
replicas: l
template :
metadata:
name : php-apache
labels:
app: php-apache
spec:
containers :
- name: php-apache
image : gcr.io/google_containers/hpa-example
resources:
requests:
cpu: 200m
ports :
- containerPort : 80

创建一个Service

1
2
3
4
5
6
7
8
9
apiVersion: vl 
kind: Service
metadata :
name : php-apache
spec:
ports:
- port : 80
selector:
app: php-apache

为Deployment创建一个HPA控制器,在1和10之间调整Pod的副本数量使PodCPU维持在50%

1
kubectl autoscale deployment php-apache --min=l --max=lO --cpu-percent=50

通过yaml文件创建HPA:

1
2
3
4
5
6
7
8
9
10
11
12
13
#hpa-php-apache.yaml 
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
scaleTarqetRef: #指定Dployment的名字
apiVersion : apps/v1beta1
kind : Deployment
name : php-apache
minReplicas : 1
maxReplicas : 10
tarqetCPUUtilizationPercentaqe: 50

创建:

1
kubectl create -f hpa-php-apache.yaml

查看:

1
kubectl get hpa
image-20211103210919247