如何在云上高效地实践“自动化”和“弹性”

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 阿里云开放平台「端到端解决方案」帮助客户解决在自动化和弹性流程中的痛点问题!

yfmdlhcq.jpg

本篇作者丨箫竹

前言


在云计算越来越普及的今天,企业对云的讨论焦点已经从几年前的「是否上云」转换为「如何快速上云」和上云之后「如何低成本用云」等问题。新的焦点问题对云提出了新的要求:容器化、自动部署、自动发布、弹性扩缩容、监控告警等云上业务生命周期的方方面面。除此之外,随着业务架构的不断复杂,高可用、多备份、异地多活等方案趋于常态化,由此对多账号、多 Region 部署的需求越来越强烈。


企业应用上云,通常都会根据自身的业务架构,首先选择相关云产品并完成授权,接着搭建网络基础环境、搭建业务架构、配置负载和弹性伸缩策略,最后实现应用上云。


1.png


整个过程即复杂又繁琐,但当想要借助编排服务(Terraform,ROS)来简化流程、实现自动化的时候,又遇到了阻碍自动化流程的各种障碍:


  1. 云产品没有提前开通,导致 OpenAPI 调用失败,编排服务无法工作;
  2. RAM 权限策略的编写过于复杂,编排模板涉及到哪些策略,无处可查,想要做到精细化的授权难度太大;
  3. Kubernetes 集群的搭建依赖多种云资源优先创建,但云资源之间存在的复杂的关联和依赖关系却无处可查;
  4. 每个云账号对大部分资源的使用都存在配额的限制,弹性伸缩的时候往往因为配额不足而失败,进而影响应用的快速扩容;
  5. ......


一、端到端解决方案


「如何做到自动化上云」成了应用上云路上的一道坎,基于这个现状,阿里云开放平台在通过过去一年的努力,提供了一系列的「端到端解决方案」,旨在消除客户在基于 OpenAPI 上云过程中影响“自动化”的主要障碍。


本文从一个实际场景出发,基于开源资源编排工具 Terraform、 Kubernetes 作业管理的开源项目 Argo 和阿里云的多种服务搭建一个自动化弹性样板间,并利用该样板间完成了 Kubernetes 应用的自动化部署和伸缩,在云上实践“自动化”和“弹性”的同时,切身感受下「端到端解决方案」所带来的重大成果和客户价值。


2.jpg


围绕自动化弹性样板间的具体内容,本文将介绍三种已经落地的方案:


  1. 云产品自动化开通

什么是自动化开通?为什么要自动化开通?如何做到自动化开通?


  1. 左手弹性,右手成本

弹性遇到的问题是什么?如何通过配额服务解决?弹性伸缩过程中如何控制成本?


  1. RAM 权限策略的自动化导出

如何对一个 Terraform 模板中涉及到的资源实现准确、完备和精细化的权限控制?


二、云产品自动化开通


所谓「云产品开通」,是指在注册了一个新的阿里云账号后,首次使用某个云产品服务时,需要阅读该云产品的服务等级协议,并通过点击“开通”按钮来完成该云产品的激活。激活之后才能正常地使用该云产品的控制台、OpenAPI以及资源编排(Terraform,ROS)等服务。


3.png


自动化弹性样板间总共涉及到 9 款服务,其中有 3 款服务需要手动开通,当需要支持多账号部署时,需要 3*N 次手动开通操作,费时又费力。同时,对于资源编排服务 Terraform 和 ROS 而言,无疑是致命的,直接阻碍了 Terraform 和 ROS 的成功运行。目前与 Terraform 和 ROS 集成的所有60多款云产品中,分别有 22 和 25 款云产品需要在首次使用前进行手动开通,体验非常差。


为了解决该问题,开放平台提供了自动化开通的方案。所谓「自动化开通」,是指对外提供开通动作的 OpenAPI,通过调用 OpenAPI 或者基于 API 的编排工具实现云服务的自动开通,省去手动开通的麻烦。目前,已经有超过 30 款云产品实现了自动化开通,Terraform 和 ROS 也实现了 100% 全自动化开通的目标,彻底解决了阻碍 Terraform 和 ROS 自动化之路的第一个障碍,也为自动化弹性样板间的成功提供了支持:


data "alicloud_ack_service" "open" {
  enable = var.enable_service
  type   = "propayasgo"
}
data "alicloud_log_service" "open" {
  enable = var.enable_service
}
data "alicloud_cms_service" "open" {
  enable = var.enable_service
}


如何使用 Terraform 实现自动化开通,详见文章Terraform 支持自动化开通阿里云产品


三、左手弹性,右手成本


在云上根据业务发展,按需建出资源是云上资源弹性的重要特征,相较于传统IDC机房的机器采购、上架、供应等漫长的周期和运维成本,云上资源的快速供应是客户对云的弹性的最大认可。


为了充分利用和发挥云平台的弹性和分布式特性,必须做到从基础设施到应用都是弹性可伸缩和运维全自动化,以云原生的最佳姿势使用云。自动化弹性样板间正是充分利用和发挥阿里云的弹性优势,实现了云资源和云应用的弹性:


  • 基础设施层弹性管理

借助 Terraform 自动创建托管版Kubernetes集群,并基于弹性伸缩服务 ESS 为其自动创建弹性伸缩节点池,当节点池中节点负载达到阈值时实现自动伸缩,从而达到基础设施层弹性管理。


  • 业务弹性管理

借助 Terraform 和 Argo 将业务应用自动部署到容器集群的 Pod,并通过配置由 Kubernetes 的 HPA 策略控制业务层的弹性管理。


4.png图片来自:https://help.aliyun.com/document_detail/86554.html


resource "alicloud_cs_managed_kubernetes" "this" {
  name                     = local.k8s_name
  pod_cidr                 = var.k8s_pod_cidr
  cluster_spec             = "ack.pro.small"
  worker_number            = var.worker_number
  ...
}
resource "alicloud_cs_kubernetes_node_pool" "autoscaling" {
  name                 = "autoscaling"
  cluster_id           = alicloud_cs_managed_kubernetes.this.id
  # automatic scaling node pool configuration.
  scaling_config {
    min_size                 = var.autoscaling_node_min_number
    max_size                 = var.autoscaling_node_max_number
    ...
  }
  ...
}


在如此全自动化架构下,弹性样板间所要面临的挑战是:


  1. 要求基础资源完全按需使用

包年包月计费类型将无法适用,机器不能随时释放,容易造成资源浪费;


  1. 资源供应需有保障

按量计费的类型,需要确保资源充足和 100% 创建成功;云资源配额可动态调整;


  1. 资源成本不能太高,要接近包年包月成本

既要满足按需使用,又要能享受到类似包年包月的折扣;


  1. 弹性资源的监控

自动弹出的资源可被监控系统自动发现并处于监控之下。


面对如上挑战,得益于「端到端解决方案」的成果,自动化弹性样板间采用了如下解决方案:


3.1 配额中心解决资源使用限制问题


配额中心」是阿里云开放平台2020年推出的一款新的云产品,提供了实时查询配额、在线发起配额申请、资源配额级联申请、API 流控申请、配额告警等能力,有效地帮助客户根据业务的需要在线调整多种资源配额,解决资源不足带来的问题。


5-j.jpg


自动化弹性样板间涉及到 9 款云产品,涉及到可调整的配额包括如实例规格的需求量、可保有的EIP 数量、可保有的 SLB 数量、集群节点的数量等有 6 项之多,并且不同配额项之间还可能存在相互依赖、级联和地域之分,每一项配额都需要配置告警规则和配额申请,以便当配额不足而发起告警后可以自动发起配额申请。面对这些复杂的关系,弹性样板间借助配额中心和 Terraform 集成的能力,完成了对不同配额项申请和告警的自动编排,通过查询规则(如:特定 Region 特定 Zone 下的特定实例规格)动态获取当前配额值并配置自动告警规则(如:所剩配额不足一半时发起告警)和自动申请规则(如:所剩配额不足一半时发起当前总配额2倍的申请),以实现配额不足时发起自动申请。


3.2 预留实例券解决资源供应和成本问题


预留实例券(Reserved Instance,简称 RI)是弹性计算团队推出的一种具有特定属性的优惠券,可以自动匹配您账户下的按量付费实例(不含抢占式实例)。相比包年包月实例,预留实例券与按量付费实例这种组合模式可以兼顾灵活性和成本。

在阿里云不支持 RI 之前,客户通过包年包月、抢占式实例和按量付费的组合来实现成本节约,即通常会购买一定量的包年包月,然后在业务尖峰的时候购买按量付费资源进行弹性扩展。当 RI 诞生后,本质上在提供了包年包月的能力的同时还提供了基于弹性伸缩获得比包年包月成本更低的能力。


6.png


  • 包年包月+按量付费

按照平时业务购买包年包月,业务尖峰时购买按量付费资源进行弹性扩展;业务稳步上升后,需要新购包年包月资源进行扩展(不是弹性伸缩)。因此企业付出的成本等于包年包月的支出加上按量付费的支出。


  • 预留实例券

最理想的情况下,全部负载都可以使用RI覆盖,且没有超买,企业付出的成本等同于阴影部分的面积。


两种模式对比,阴影面积越小成本越低,显然RI更能将云计算的弹性发挥到极致,更省钱。自动化弹性样板间通过 Terraform 支持对 RI 按可用区和不同规格购买。结合实例规格配额的消耗情况,不断调整 RI 的购买数量,确保 RI 不过量采购或者 RI 不够用,最大化降低使用成本。


3.3 安装云监控插件解决弹性资源可监控问题


资源监控是 Kubernetes 中最常见的监控方式,通过资源监控可以快速查看负载的CPU、内存、网络等指标的使用率。在阿里云容器服务中,资源监控已经与云监控互通,弹性伸缩的节点池也已支持自动扩展出的 ECS 节点上自动安装云监控插件,借助该插件可实现容器节点的自发现,保障弹性资源纳入监控。当然,这一配置也可以通过 Terraform 来实现自动化:


  name                 = "autoscaling"
  cluster_id           = alicloud_cs_managed_kubernetes.this.id
  # 自动安装云监控插件
  install_cloud_monitor = true
  # automatic scaling node pool configuration.
  scaling_config {
    min_size                 = var.autoscaling_node_min_number
    max_size                 = var.autoscaling_node_max_number
    ...
  }
  ...
}


四、RAM 权限策略的自动化导出


前两部分内容重点介绍了如何借助「端到端解决方案」的成果和 Terraform 编写一个全自动化的弹性样板间模板,接下来就是如何正确地运行这个模板来实现样板间的快速搭建。但是,样板间成功运行的前提是用户必须拥有模板中所有资源的操作权限。


对任何一个 Terraform 模板而言,实现对模板精细化权限策略管理的挑战主要包含以下几个方面:


  1. 无法自动地获取模版中所包含的所有资源

虽然可以通过人工 Review 模板代码或者解析 Terraform 的预览结果来间接地获取模板中所包含的资源,但人工成本将随着资源模板复杂度的增加而增加;


  1. 无法根据资源准确地推断资源所使用的 OpenAPI 有哪些

Terraform 是声明式的工具,每个资源所调用的 OpenAPI 对资源模板而言完全是黑盒,即使有资源也无法获取到准确的 OpenAPI 信息;


  1. 无法根据 OpenAPI 写出完整的、细粒度的权限策略

每个 OpenAPI 的鉴权还需要考虑不同的级别,如产品级、资源级以及 API 级;同时最终生成的每一条权限策略中还包含 Region 信息、账号信息和父子资源关系等信息。


7-jpg.jpg


面对RAM 权限策略的生成问题和挑战,开放平台在2020年推出了一款新的服务「IaC Service」,这款服务可以识别任一 Terraform 模板中定义的资源,解析每个资源在 CURD 阶段使用到的 OpenAPI,最后根据解析后的结果自动导出 RAM Policy 的内容,提供给最终客户使用。


有了 RAM 权限策略自动化导出的能力,针对 Terrafrom 模板的鉴权,将会大大减少手动编写 RAM Policy 的工作,只需要将 Terraform 模板上传到 IaC Service 上,即可快速得到一个精准的、模板相关的 RAM Policy,也为整个弹性样板间的顺利执行提供了支持。


五、结果展示


借助自动化开通、配额中心的告警和 Quota 申请、预留实例券与 Terraform 的集成、容器服务与 Terraform 的集成和弹性伸缩的支持、RAM Policy 的自动化导出等多种能力,目前自动化弹性样板间已经全面落地,并且已经开源到 Terraform Registry: terraform-alicloud-modules/automation-elastic-landing.

自动化弹性样板间的运行方式有两种:


  1. Terraform 命令行

可以按照样板间仓库中的 README 的指引,依次执行 terraform apply  , source .bash_profileterraform apply  即可。


  1. IaC Service 在线运行

IaC Service 目前已经提供了可以在线运行 Terraform 的工作流,首先将弹性样板间 GitHub 仓库 Fork 一份到自己的账号下,然后登录 IaC Service 控制台,创建一个新的工作空间,选择 Fork 后的仓库,然后点击“发起新计划”即可执行样板间。

相比与 Terraform 命令行的方式,IaC Service 可以省去本地安装和运行 Terraform 的麻烦,同时借助 GitOps 的能力,可以实现修改应用文件后自动触发新的工作流、持续部署的能力。


自动化弹性样板间在运行成功之后,登录容器服务控制台,选择新建的集群,进入节点池,选择 autoscaling  节点池,即可看到当前集群下所有的伸缩活动:


8.png


登录 Agro UI 也可以如期地看到扩展出的应用正在部署和同步中:


9.png


应用的自动弹性扩展将会带动资源层面的弹性伸缩,当应用数的增加并且 Pod 负载超过阈值时,将自动扩展新节点;当应用下线后,随着 Pod 负载的降低将收回弹出的节点,完全做到的全自动化伸缩。

六、总结


总结一下,阿里云开放平台的「端到端解决方案」的价值和成果:


  • 与编排工具 Terraform 和 ROS 集成的云产品实现了 100% 自动化开通或者免开通,全面解决了客户在使用编排工具时的一大障碍;


  • 配额中心支持对 30+云产品配额项的管理,同时具备了配额告警、配额自动申请的能力;


  • 与 Terraform 集成的云产品从原来的 43 款提升到了 61 款,并且还在持续集成中;


  • IaC Service 不但提供了在线执行 Terraform 的能力,还支持对 Terraform 模板的自动解析和对应的 RAM Policy 的自动化导出,大大降低了客户使用 Terraform 的成本。


自动化弹性样板间的成功落地是对「端到端解决方案」价值和成果的直接体现,但并不是唯一受益方,解决客户在自动化和弹性流程中的痛点问题,解决云产品在对接横向产品中的痛点问题,做到真正的“降本提效”才是对该方案最大的反馈。后续我们也将继续在自动化、弹性等领域释放更多能量。

相关实践学习
基于云监控实现的监控系统
通过阿里云云监控功能给非阿里云主机安装监控插件,从而实现对非阿里云主机的各项指标进行监控和管理,在配置报警规则和报警人的情况下,能对特定的场景做出报警反应通知到报警人的手机上。
相关文章
|
6天前
|
敏捷开发 人工智能 Devops
探索自动化测试的高效策略与实践###
当今软件开发生命周期中,自动化测试已成为提升效率、保障质量的关键工具。本文深入剖析了自动化测试的核心价值,探讨了一系列高效策略,包括选择合适的自动化框架、设计可维护的测试脚本、集成持续集成/持续部署(CI/CD)流程,以及有效管理和维护测试用例库。通过具体案例分析,揭示了这些策略在实际应用中的成效,为软件测试人员提供了宝贵的经验分享和实践指导。 ###
|
5天前
|
机器学习/深度学习 人工智能 jenkins
软件测试中的自动化与持续集成实践
在快速迭代的软件开发过程中,自动化测试和持续集成(CI)是确保代码质量和加速产品上市的关键。本文探讨了自动化测试的重要性、常见的自动化测试工具以及如何将自动化测试整合到持续集成流程中,以提高软件测试的效率和可靠性。通过案例分析,展示了自动化测试和持续集成在实际项目中的应用效果,并提供了实施建议。
|
6天前
|
Java 测试技术 持续交付
探索自动化测试在软件开发中的关键作用与实践
在现代软件开发流程中,自动化测试已成为提升产品质量、加速交付速度的不可或缺的一环。本文深入探讨了自动化测试的重要性,分析了其在不同阶段的应用价值,并结合实际案例阐述了如何有效实施自动化测试策略,以期为读者提供一套可操作的实践指南。
|
6天前
|
Web App开发 敏捷开发 测试技术
探索自动化测试的奥秘:从理论到实践
【10月更文挑战第39天】在软件质量保障的战场上,自动化测试是提升效率和准确性的利器。本文将深入浅出地介绍自动化测试的基本概念、必要性以及如何实施自动化测试。我们将通过一个实际案例,展示如何利用流行的自动化测试工具Selenium进行网页测试,并分享一些实用的技巧和最佳实践。无论你是新手还是有经验的测试工程师,这篇文章都将为你提供宝贵的知识,帮助你在自动化测试的道路上更进一步。
|
6天前
|
敏捷开发 Java 测试技术
探索自动化测试:从理论到实践
【10月更文挑战第39天】在软件开发的海洋中,自动化测试是一艘能够带领团队高效航行的船只。本文将作为你的航海图,指引你理解自动化测试的核心概念,并分享一段实际的代码旅程,让你领略自动化测试的魅力和力量。准备好了吗?让我们启航!
|
7天前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
|
8天前
|
数据采集 IDE 测试技术
Python实现自动化办公:从基础到实践###
【10月更文挑战第21天】 本文将探讨如何利用Python编程语言实现自动化办公,从基础概念到实际操作,涵盖常用库、脚本编写技巧及实战案例。通过本文,读者将掌握使用Python提升工作效率的方法,减少重复性劳动,提高工作质量。 ###
22 1
|
1月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
65 4
|
1月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
52 4
|
16天前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
41 4