介绍
自动弹性伸缩是一种云服务,根据 CPU 和内存使用率自动调整计算实例的数量。当 CPU 或内存使用超过设定阈值时,系统会自动增加实例以应对高负载;当使用率降低时,系统则会减少实例。此机制确保应用在高峰时保持性能,同时优化资源利用和成本,适用于需求波动明显的场景。
架构图
其中红色框圈的部分为自动伸缩资源。
注意:此部分的服务为无状态服务,不会挂载及存放用户数据。
使用方式
创建带有自动伸缩功能的虚拟机
①在管理员视角下,选择虚拟化→虚拟机器→创建→使用向导。
②选择模板→下一步→定制虚拟机
③填写虚拟基本信息(注意引导源要选择“容器(临时)”)。
④设置存储及引导源。
⑤设置 Cloud-init 以及弹性伸缩配置。
⑥检查配置并创建,点击返回列表查看虚拟机。
创建服务
由于此虚拟机有多副本的存在,当访问虚拟机时,需要通过 service 随机访问一个状态正常的虚拟机。
① 查看虚拟机副本名称。
oc get vmirs -n vmirs-test
②创建服务。
virtctl expose vmirs cloudinit-centos7-test-vmirs -n vmirs-test --name cloudinit-centos7-ssh-service --port 22 --target-port 22
执行结果:
注意:红款圈住的内容,分别为 vmirs 名称,项目名称
创建路由
由于服务默认只对集群内部提供访问权限。若是要再集群外部访问,需要额外提供路由。
① 查看服务名称。
oc get svc -n vmirs-test
② 创建路由。
oc expose svc cloudinit-centos7-ssh-service -n vmirs-test
执行结果:
验证
1、创建无状态服务容器镜像。
这里采用 centos7 + cloudinit 配置生成。
cloudinit 配置为:
#cloud-config user: centos password: '1' chpasswd: expire: false runcmd: - 'if [ ! -f "RunName" ]; then echo "server name is $(date +%s | md5sum | head -c 10)" > RunName; fi' - nohup python -m SimpleHTTPServer 18080 >/dev/null 2>&1 &
用户名 centos 密码 1
默认执行命令
① 创建 RunName 文件,并随机生成名字进行记录。
② 启动一个简单 Http 服务,端口为 18080。
2、查看当前状态:
启动一个客户端进行持续访问,命令如下:
while true; do curl http://web-18080-service-vmirs-test.apps.uccps.21-21.example.com/RunName; sleep 3; done
结果
3、修改阈值,让其自动增加副本。
如上图所示,现在服务程序自动伸缩为2了,且客户端的请求会负载到第二个上面。看一下虚拟机列表
4、等待机器到达 3 台以上,开始模拟宕机操作。
看请求
已经有三台服务程序启动成功了,强制将第一个服务宕机,查看请求是否会收到影响。
根据上图的内容,我们可以分析出,被干掉的服务程序是 62c。 自动伸缩功能新启动的为 8f5。请求没有受到服务程序宕机影响。