引言
统信容器云管理平台是一个 PaaS 层容器云平台,在容器平台使用虚拟化目前最优选择是 kubevirt,有雀基于 KubeVirt 进行适配、优化,是 kubevirt 可以通过有雀的 console 界面进行虚拟机创建、管理、克隆、快照等操作。
介绍
自动弹性伸缩是一种云服务,根据 CPU 和内存使用率自动调整计算实例的数量。当 CPU 或内存使用超过设定阈值时,系统会自动增加实例以应对高负载;当使用率降低时,系统则会减少实例。此机制确保应用在高峰时保持性能,同时优化资源利用和成本,适用于需求波动明显的场景。
架构图
其中红色框圈的部分为自动伸缩资源。 注意:此部分的服务为无状态服务,不会存放用户数据。
使用方式
创建带有自动伸缩功能的虚拟机
首先我们需要通过页面创建出带有自动伸缩功能的虚拟机,整个流程会通过图片加文字描述进行引导操作。图片与文字后有很大的重合内容。优先考虑图片的上的内容。[中括号中的内容可以先不看,如果图片内容找不到对应操作,可以通过这部分内容对此部分的内容进行详解]
①在管理员视角下,选择虚拟化→虚拟机器→创建→使用向导。[我们需要在管理员视角下找到虚拟化组件中的虚拟机器导航菜单。并在在其右上角位置选择创建。可以选择向导模式。也可以选择 yaml 文件方式。由于创建含有自动伸缩功能的虚拟机与普通的虚拟创建有着很大差异,页面存在复用,所以这里并不能通过 yaml 文件创建包含自动伸缩功能的虚拟机。假使你特别熟悉 k8s 以及 kubevirt。你可以通过命令行工具加 yaml 资源描述文件进行创建。涉及到的资源为 vmirs 与 hpa。界面主要创建这两种资源。]
②选择模板→下一步→定制虚拟机。[请选择好模板,模板不要使用带有引导源的。此部分需要注意一下,模板里面的设置。有些模板存在自定义配置,会导致一些问题,不过这些都无法预估的,需要根据正式的环境进行一些调试。]
③填写虚拟基本信息(注意引导源要选择“容器(临时)”)。[这里选择容器(临时)方式,是因为其它方式都会 dv 资源,dv 资源在虚拟机启动时,会被 libvirt 进行软锁定,进而无法被多个副本进行一起使用。不符合无状态服务器的定义。而容器(临时)方式,这种磁盘会跟容器一起生成和销毁。当虚拟机重建、销毁时,存储也会销毁。关于用户数据,也就是有状态的数据需要外接其它服务提供。当然也可以通过多挂载的方式,将内容挂载到容器中,不建议这样使用]
④设置存储及引导源。[通过右上角的添加存储,选择容器(临时)方式,在下方写上容器镜像地址。并在引导源位置选择刚加的引导源。]
⑤设置 Cloud-init 以及弹性伸缩配置。[Cloud-init 可以在虚拟机创建之后设置一些操作,比如用户设置,预装一些包,添加一些文件等,在此部分可以考虑添加连接有状态的数据库或者配置文件拉取等。通过这种方式,可以保证每次重启时都会获取到正确的状态,也让虚拟机本身成为一个无状态资源。弹性伸缩功能主要对应的是 HPA 内容,这里的设置最终会生成一个 HPA 资源。有兴趣可以在虚拟机创建完成之后,对这个资源进行一下查看。后面我们更改指标以及副本数时会用到这部分资源。]
⑥检查配置并创建,点击返回列表查看虚拟机。[通过复查展示的信息,我们可以对一些基本信息的设置进行二次确认。确认没有问题后,我们就可以点击创建了。创建成功后,在页面下方是有vmirs 资源描述 yaml 文件展示,如果想再此确认一些内容的话,可以通过这里进行检查。截图中没有展示到。它在成功创建虚拟机那张截图里面,有需要的话可以关注一下。创建成功后,我们可以在虚拟机列表中看到虚拟机,虚拟机的名字通常会在你之前命名的名字后面额外再添加一些随机的字符。在虚拟机控制台中可以进行虚拟机操作。如果忘了密码。可以点击 YAML 便签也中查找 cloud-init 中关于密码的设置]
创建服务
由于此虚拟机有多副本的存在,当访问虚拟机时,需要通过 service 随机访问一个状态正常的虚拟机。 ① 查看虚拟机副本名称。[ 通过命令行工具获取 vmirs 资源,请注意加 -n 参数(所在项目)。查询全部请使用 -A ]
②创建服务。[关注红框圈的内容,不要写错了]
执行结果:
注意:红款圈住的内容,分别为 vmirs 名称,项目名称
创建路由
由于服务默认只对集群内部提供访问权限。若是要再集群外部访问,需要额外提供路由。
① 查看服务名称。[和创建服务差不多,关注好参数不要写错就行]
② 创建路由。[和创建服务差不多,关注好参数不要写错就行]
执行结果:
验证
1、创建无状态服务容器镜像。
这里采用 centos7 + cloudinit 配置生成。
镜像为: http://quay.chenby.cn/containerdisks/centos:7-2009
cloudinit 配置为:
用户名 centos 密码 1
默认执行命令
① 创建 RunName 文件,并随机生成名字进行记录。
② 启动一个简单 Http 服务,端口为 18080。
2、查看当前状态:
[此部分为 cloud-init 信息,在虚拟机创建完成,进行一些配置,比如上面的信息,在每个虚拟机中生成一个名字并运行一个 http 服务]
[再次确认一下虚拟机的信息]
[这个就是 hpa 资源的信息,可以看到红框内的一些设置信息,我们可以通过 YAML 便签页进行一些值的修改]
[创建服务及路由,注意参数不要写错了] 启动一个客户端进行持续访问,命令如下:[命令的含义,每 3 秒访问一次路由,获取一下是谁提供的服务。]
结果
3、修改阈值,让其自动增加副本。[通过 yaml 文件内的信息,对此部分内容进行修改]
[注意:获取到第二个服务程序名称了,说明现在应该有2个服务程序提供服务了] 如上图所示,现在服务程序自动伸缩为2了,且客户端的请求会负载到第二个上面。看一下虚拟机列表
4、等待机器到达 3 台以上,开始模拟宕机操作。[这部分主要是高可用的展示,已经偏离自动伸缩功能的含义了,实际自动伸缩到多副本的情况时,就会实现服务高可用。但是这里有一定区别,自动伸缩是为了应对洪峰请求或者服务程序忙不过来的时候,典型就是 12306 春运抢票与新浪微博明星塌房时。而高可用,主要是解决提供的服务可用率。这部分其实包含了服务自检,自动注册,负载均衡等一些内容。脱离平台的情况下,实现高可用还麻烦的呢,这个典型就是银联支付系统基本达到一年中每一分每一秒都可以支付。] 看请求
已经有三台服务程序启动成功了,强制将第一个服务宕机,查看请求是否会收到影响。[只要还有一台虚拟机服务状态正常就能提供服务,这就是高可用的体现。因为有 hpa + 健康检查机制的存在。可以看到,当我们手动删除一台虚拟机时,健康检测机制就能发现,并迅速摘掉去这个服务程序的链路,并创建出新的服务程序来满足 hpa 的副本要求。]
根据上图的内容,我们可以分析出,被干掉的服务程序是62c。 自动伸缩功能新启动的为8f5。请求没有受到服务程序宕机影响。
重点:多副本方式的高可用完美搞定,是不是还挺简单的。
点击这里了解更多信息
• 统信官网