容器水平伸缩
云容器引擎支持在控制台界面上快速创建支持HPA的应用,实现容器资源的弹性伸缩。您也可通过定义HPA(Horizontal Pod Autoscaling)的YAML来进行配置。
背景信息
从v1.18开始,K8s v2beta2 API允许通过HPA的behavior字段配置扩缩行为。在behavior字段中的scaleUp和scaleDown分别指定扩容和缩容行为。当您在使用HPA时,希望只进行扩容或者只进行缩容的Pod伸缩,则可以通过开启指标伸缩,单击禁止缩容或者禁止扩容来实现。
- 默认值:均不禁止
- 禁止扩容:selectPolicy的值Disabled会关闭给定方向的扩容。因此使用以下策略,将会阻止扩容。
behavior:
scaleUp:
selectPolicy: Disabled
- 禁用缩容:selectPolicy的值Disabled会关闭给定方向的缩容。因此使用以下策略,将会阻止缩容。
behavior:
scaleDown:
selectPolicy: Disabled
伸缩规则
HPA总体支持两种度量指标,一种为资源度量指标,默认情况下仅支持cpu、内存这两种资源指标,它不仅支持资源百分比也支持平均值;另一种为自定义度量指标,包含Pod度量跟Object度量两大类。
资源度量指标
以CPU为例,配置示意如下:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
自定义度量指标
Pod度量是从某一方面的指标描述Pod, 取多个pod的平均值, 它与资源度量指标非常相像,但仅支持平均值类型,示意如下:
type: Pods
pods:
metric:
name: packets-per-second
target:
type: AverageValue
averageValue: 1k
Object度量用于描述在相同命名空间除Pod以外的其他Kubernetes对象,如Service,配置示意如下:
type: Object
object:
metric:
name: requests-per-second
describedObject:
apiVersion: v1
kind: Service
name: main-route
target:
type: Value
value: 2k
通过控制台创建HPA
创建负载同时创建HPA
- 登录云容器引擎管理控制台。
- 在控制台左侧导航栏,单击集群。
- 在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏,选择工作负载 > 无状态。
- 在无状态页面选择指标伸缩。
- 填写伸缩规则跟伸缩范围等信息,然后单击下一步。
为已有应用开启HPA
- 登录云容器引擎管理控制台。
- 在控制台左侧导航栏,单击集群。
- 在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏,选择工作负载 > 无状态。
- 在无状态列表页面选择对应应用的操作栏中的更多—>水平伸缩。
- 在创建对话框中,设置伸缩的配置。
- 单击确定。
通过kubectl命令创建HPA
您也可通过编排模板来手动创建HPA,并将其绑定到要伸缩的Deployment对象上,通过kubectl命令实现容器自动伸缩配置。
下面针对一个Nginx应用进行举例。
1、创建并复制以下内容到nginx.yml中。Deployment的编排模板如下。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9 # replace it with your exactly <image_name:tags>
ports:
- containerPort: 80
resources:
requests: ##必须设置,不然HPA无法运行。
cpu: 500m
2、执行以下命令,创建Nginx应用。
kubectl create -f nginx.yml
3、创建HPA。通过scaleTargetRef设置当前HPA绑定的对象,在本例中绑定名叫nginx的Deployment。
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
4、创建好HPA后,再次执行 kubectl describe hpa <HPA的名称>命令
看到HPA正常运行。