上周的文章是《分享一个高弹性的架构》,介绍了通过阿里云ACK、ECI来实现高弹性IT基础架构,这一周我们来聚焦ACK集群的资源购买和创建问题。
阿里云的计费模式分成两种:预付费和后付费,顾名思义,预付费就是提前向阿里云支付费用,阿里云向客户交付确定规格的服务产品,客户可以立即取得服务发票的一种计费模式。而后付费则需要客户提前将现金预存在阿里云账户中,再根据需要随时开通所需规格的服务产品,一段时间之后,客户可以基于已消费的金额从阿里云开具服务发票的一种计费模式。
大部分传统行业客户均采取预算制,因此在购买服务之前就要对要产生的消费额度进行估算和提前申请费用,在取得费用后通常需要马上获取对应金额的发票,更适合采取预付费的支付方式。
目前,阿里云ACK服务在创建集群时直接购买的资源均采取后付费的计
费模式,这样服务的开通和计费相对简单,也更容易实现按需的弹性扩缩容,但这样一来对于传统行业客户的购买和使用将造成一定的困扰。下面就让我们聊聊如何以预付费的方式来购买ACK集群。
我们首先要面对的问题是创建哪种类型的ACK集群?
ACK托管Pro版目前只支持后付费模式购买,假如需要以预付费的方式构建集群,有两个选择:ACK托管标准版、ACK专有版,因为ACK托管标准版无SLA保障,推荐生产系统使用ACK专有版,ACK专有版需要客户提前购买三台ECS服务器作为Kubernetes集群的Master节点。
对于计算资源的购买,ACK集群在创建时默认购买按量计费的Worker节点,因此除了Master节点,我们还需要提前购买ECS服务器作为承载日常业务水位的Worker节点。这样一来我们在创建时选择提前购买的Master和Worker节点,就可以避免通过后付费模式购买ECS。
除了提前购买所有的ECS实例,我们还可以通过预留实例券来进行动态抵扣,预留实例券是阿里云推出的一种动态抵扣计算资源消耗的抵扣券,可以自动抵扣一定规格内的计算资源消耗,预留实例券支持100%预付费购买,不仅ECS支持预留实例券,ECI弹性容器实例也支持通过预留实例券抵扣,但在创建ECI实例时需要对ECI使用的ECS规格进行指定以匹配指定规格的预留实例券。在ACK集群中我们可以在POD定义中通过annotations来指定创建ECI实例时使用的ECS规格。
下面举一个例子:
假设我们预先购买了100个ecs.c6.large规格(2vCPU,4GB),为期一年的预留实例券,并预先支付了100%的费用。我们在创建POD的时候可以在模版annotations中通过k8s.aliyun.com/eci-use-specs : "ecs.c6.large" 来指定ECI创建ecs.c6.large规格的实例,从而准确的抵扣预留实例资源池中的资源。
虽然预留实例券支持抵扣ECI弹性容器实例,但由于预留实例券在购买时需要指定ECS实例的规格和数量,因此并不适用于应付业务负载周期性大范围变化的应用场景。
上周介绍的高弹性架构虽然可以通过预留实例券进行购买和创建,但需要提前购买大量的预留实例节点,且在进行资源申请和抵扣时只能选择已购买的ECS实例规格,而无法选择像0.25vCPU、0.5G内存这样的更细粒度的资源规格。假如以后ECI支持容量递减资源包的方式进行抵扣就更适合通过预付费来实现这种高弹性的架构了。
在ACK的创建过程中,除了计算资源外,还需要EIP、SLB、NAT网关等网络资源。EIP主要用于集群的API Server 和NAT网关,虽然ACK集群创建时购买的的EIP是后付费模式,但可以随时在EIP控制台将其转换为预付费模式。NAT网关可以不在创建集群时自动创建,而是提前购买或在集群创建完成后购买预付费的NAT网关。ACK集群自动创建的SLB实例有两个,一个是用于集群API Server的内网SLB,一个是用于Ingress的外网/内网SLB,可以在集群创建完成后在SLB控制台将这两个SLB修改为包年包月的预付费方式,特别需要注意的是用于API Server的内网SLB千万不能删除,删除后无法恢复,只能重新创建集群,用于Ingress的SLB可以通过annotations进行更换,具体的步骤可以参考阿里云线上文档。