弹性伸缩是ACK上被广泛采用的功能,典型的场景包含在线业务弹性、大规模计算训练、深度学习GPU或共享GPU的训练与推理、定时周期性负载变化等。本文介绍如何通过ACK的弹性伸缩功能实现Pod、ECS和ECI的自动扩缩容。
弹性伸缩分为两个维度:
在 ACK 中可通过设置HPA或CronHPA进行Pod的水平自动伸缩;通过配置 节点自动伸缩或通过虚拟节点方式可以进行ECS/ECI的自动伸缩。
您可以通过两种方式实现Pod自动伸缩,即HPA(指标型HPA)和CronHpa(定时型HPA)。
1、登录容器服务管理控制台,在左侧导航栏单击集群,然后单击目标集群。
2、在集群配置页的左侧导航栏,单击工作负载,然后单击右上角的使用镜像创建。
3、填写应用名称、副本数等信息,单击下一步。
4、填选镜像地址和版本等信息,单击下一步。
5、在高级配置选项中勾选开启容器组水平伸缩,填写相关信息后点击页面右下角创建。
本例中HPA的指标设为CPU使用量,触发条件设为使用量70%。
6、页面显示资源成功创建,单击查看应用详情。
在容器组页签下可以看到容器处于Running状态。
此时,当Nginx的Pod的利用率超过本例中设置的70%利用率时,则会进行水平扩容。
在可以准确预测流量高峰的情况下(如秒杀、促销活动),可以通过定时HPA进行Pod自动伸缩。
1、登录容器服务管理控制台,在左侧导航栏中选择市场 > 应用目录,安装ack-kubernetes-cronhpa-controller应用。
2、创建并复制以下内容到deployment_cronhpa.yml中。
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment-basic
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
---
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: cronhpa-sample
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment-basic
jobs:
- name: "scale-down"
schedule: "30 */1 * * * *"
targetSize: 1
- name: "scale-up"
schedule: "0 */1 * * * *"
targetSize: 3
3、执行以下命令,部署示例对象与cronhpa。
kubectl apply -f deployment_cronhpa.yaml
4、执行kubectl describe cronhpa命令,查看cronhpa状态和执行结果。
节点自动伸缩组件是基于kubernetes资源调度的分配情况进行伸缩判断的,节点中资源的分配是通过资源请求(Request)进行计算的。
因此资源请求(Request)的正确、合理设置,是弹性伸缩的前提条件。具体授权与配置方式请参考节点自动伸缩。
虚拟节点Virtual Node来源于Kubernetes社区的Virtual Kubelet技术,其实现了Kubernetes与弹性容器实例ECI的无缝连接,让Kubernetes集群轻松获得极大的弹性能力,而不必受限于集群的节点计算容量。