包年购买K8S集群的省钱之道
前段时间我有幸拿到了一张5000元的阿里云代金券,在此一并感谢为我申请代金券的阿里云运营同学。我准备用这笔费用包年购买一个阿里云K8S集群。但正常情况下5000元包年购买一台符合K8S集群创建要求的服务器都有一定困难,别说除了服务器之外还要购买一堆网络和存储资源了,不过最后我还是成功的完成购买,下面就分享一下购买的过程供大家参考。
在创建阿里云K8S集群时有两种集群模式,一种是托管集群,一种是专有集群。专有集群需要至少三台额外的Master节点,托管集群无需准备Master节点,因此我选择托管集群模式,在选择托管集群模式之后还有一个Pro版和标准版的选择,Pro版主要用于生产环境,有明确的SLA承诺,而标准版主要用于开发测试环境,我这个环境就是用来进行测试的,因此选择标准版。
在创建托管K8S集群时需要用到的计算、网络、存储资源包括:
- worker节点、需要至少两台4C及以上配置的企业级规格ECS,典型的规格包括G、C、R系列等,不支持N、T系列等共享规格实例,ECS资源可以提前购买在创建集群时选择现有实例,也可以在创建集群时直接购买。
- 负载均衡、通常要创建两个SLB负载均衡,阿里云的K8S集群本身的API管控需要一台SLB,集群的对外提供服务入口的Ingress组件需要一个SLB。其中用于集群管控的SLB只能在创建集群时一并购买,不支持事后指定,用于Ingress的负载均衡可以在事后通过手工创建Ingrees来指定。
- EIP、需要两个EIP,分别指向上面提到的两个SLB,负责API管控的SLB及其对应的EIP在创建集群时自动购买和绑定,无需提前购买。
- NAT网关、在阿里云的K8S集群内部 ,服务请求的处理可以通过SLB进行转发,而假如容器组(POD)要主动对外网发起访问则需要通过NAT网关进行SNAT转发。NAT网关的另一个应用场景是容器镜像的拉取,除了用NAT网关,假如Worker节点在购买时选择了公网IP或绑定了EIP,容器镜像的拉取还支持直接通过worker节点的公网出口进行处理,无需NAT网关。假如不是经常需要POD直接对外网发起请求,包年一个NAT网关实例就有些浪费了,可以选择购买一个NAT网关的按量计费资源包,只在需要的时候开启NAT网关。
- NAS存储资源包、建议采用速型的NAS资源包,相对于通用型的NAS,极速型NAS能提供更及时的IO响应。
- SCU存储资源包、在像关系型数据库这样的应用场景,块存储比NAS更为合适一些,建议购买SCU存储容量包,准备随时按需为集群提供块存储资源。
- SLS资源包、在K8S运行过程中会产生大量的日志信息,其中就包括用户访问集群服务的日志信息,以及集群各类资源创建时留下的系统信息,这些信息都将存储到阿里云的SLS日志服务中,可以购买SLS资源包进行抵扣。
在准备上述资源的过程中,可以充分利用阿里云的一些优惠活动,例如在双十一期间新老客户均可享受4折购买R5类型的2C、4C、8C规格实例、小规格的SLB实例包年5折(限一单)、极速型NAS资源包1折优惠等,利用这些优惠资源可以极大的降低K8S集群的构建成本。
对于开发测试环境来说,还可以通过购买一台包年实例+一台按量付费实例来创建集群,在集群创建完毕后再移除按量计费实例的办法来进一步降低集群的日常运行开销,一旦需要投入大量资源时可以随时添加按量付费或者抢占型的实例来临时扩充集群资源。
总之,在采取了上述策略之后,我利用5000块的代金券成功的包年购买了一个K8S托管集群,以下是创建过程中的步骤和关键选项:
一、包年购买一台ECS服务器,为了进一步降低成本我选择在双十一期间在华北三地域创建一台R5类型的ECS实例,实例的规格为4C、32G、100GB云盘、默认1Mbps公网带宽(在购买完成后更改为按流量计费)。
二、 开通一台抢占型实例,规格和包年实例相同,创建集群之后就释放掉。
三、 进入阿里云K8S集群管理控制台,创建集群,选择托管集群——标准版,计费模式选择包年包月,这样一来用于API管控的SLB将会以包年包月的方式创建。
四、Kubernetes版本和容器运行时,正常情况下选择最新的Kubernetes版本即可,对于容器运行环境没有特殊要求的客户选择默认的Containerd即可,安全沙箱是给对安全有更高要求的客户准备的,可以提供更好的容器隔离性。假如采用了Containerd运行时,在宿主机上需要使用crictl命令替代docker命令。
五、专有网络和网络插件,专有网络选择目标地域下专有网络即可,网络插件的选择要看对安全和容量密度的需求,默认的Flannel可以提供更高的容器密度,但缺少网络策略等安全功能,在性能上也不如Terway,选择Terway虽然可以使用网络安全策略但单台ECS能够提供的POD数量受到服务器弹性网卡数量的限制,通常情况下单台服务器能够提供的POD数量要少于Flannel插件,对于一般的开发测试需求选择Flannel即可。
六、虚拟交换机的选择、为了未来能够使用该VPC下的所有可用区,建议在选择交换机的过程中尽可能覆盖所有可用区。
七、节点IP数量、POD网络CIDR、Service网络CIDR,节点IP数量直接选择最大的256即可,毕竟我们要搭建的是开发测试环境,POD网络CIDR和Service网络CIDR通常情况下保持默认即可,除非推荐的网络地址存在冲突情况。
八、SNAT配置和API Server访问,因为可以随时根据需要来开通NAT网关,此处选择暂不配置SNAT,API Server 选择最低规格的SLB实例并开启EIP暴露API Server,这样可以方便随时在外网访问API Server,在创建集群的过程中将自动的开通一台简约I型的包年包月内网SLB,并开通一个EIP绑定到该SLB上。
九、RDS白名单、安全组、集群删除保护,我的环境中不涉及RDS因此没有选择,安全组选择默认的自动创建企业级安全组,建议勾选集群删除保护。
十、点击下一步,节点池配置,选择现有节点,选择之前创建的两台ECS服务器,在此处还可以根据需要设置服务器的操作系统以及登录用的密钥和密码。
十一、点击下一步,组件配置,首先是Ingress和服务器发现的选项,这里我选择不安装Ingress,可以在集群创建完成后进行手工创建。服务发现默认勾选即可。
十二、存储插件、监控插件、报警配置选择默认即可无需更改。
十三、日志服务和控制屏幕组件日志,我的选择是全部勾选,因为假如不在这里选择开通,在集群创建之后手工开通是比较困难的。为了降低日志的存储开销,我们可以在集群创建完毕之后进入SLS服务器控制台,缩短一下日志的保留时间。
十四、完成集群配置,在完成上述选项之后,点击完成配置将看到一个配置确认页面,确认所有的配置无误后就可以创建集群了。等集群创建完成之后还需要完成一些后续收尾工作,包括释放抢占型实例、Ingress创建、SLS日志保留时间的设置等。
十六、首先释放临时的ECS实例,进入集群控制台,单击进入刚创建的集群控制台,在左侧的菜单中找到集群信息——节点管理——节点配置页面。在对应实例的右侧点击更多——移除,在随后的弹出页面中选择排空该节点上的POD。这样该节点将被从集群中移除,并自动进入关机状态,在容器集群控制台看不到该节点后再进入ECS控制台,找到这台关机的ECS实例手工释放即可。
十五、购买SLB和EIP,包年购买一个内网SLB,因为这样才能避免在包年购买SLB的同时包年购买公网带宽。再开通一个按量付费的EIP指向该SLB。
十六、手工开通按量付费Ingress,进入k8s集群的管理控制台,选择刚创建的集群,在左边菜单栏中找到运维管理——组件管理。在右边的组件列表中找到Nginx Ingress选择安装,这样就开通一个按量付费的Ingress SLB,但这不是我们要的最终结果,我们只是要借助这一过程获得一个完整的Nginx Ingress创建Yaml文件。
十七、获取Nginx Ingress的YAML文件,在Nginx Ingress 创建完成后将可以获取该组件的YAML文件,将该文件内容保存到本地的ingress.yaml文件中。
十八、在本地部署kubectl 命令,添加kubeconfig文件,kubecongfig文件的内容在集群的连接信息处获取。
十九、使用kubectl delete -f ingress.yaml 删除临时创建的Nginx Ingress。
二十、修改ingress.yaml ,在metadata部分添加有关SLB的注解信息,令其使用之前创建的内网SLB。
添加内容的模版如下:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "lb-XXXXX " service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"
这两句注解的意思是使用指定ID的负载均衡创建Ingress,并覆盖之前SLB上的已有配置。
负载均衡的ID可以去负载均衡控制台查看。
二十一、使用kubectl create -f ingress.yaml 重新创建Ingress并使用预先创建的包年包月SLB。
二十二、修改日志存储周期,去到SLS控制台,找到新创建的日志Project,进入该Project,根据需要调整不同logstore的保存时间,把省钱进行到底。
使用这种方式来创建K8S集群,日常的扣费主要来两个EIP的实例费和流量费,两个EIP实例费每年约为300元,流量费主要由API Server的结果返回和worker节点的镜像拉取请求(镜像的传输流量属于上行流量,免流量费)两部分构成,这两部分流量都不会太高,基本上可以忽略不计。
以上就是我利用5000块代金券包年购买K8S集群的过程分享,希望对大家有所帮助。
我有话说: