共计 6382 个字符,预计需要花费 16 分钟才能阅读完成。
作者 | 易立
云原生曾经成为数字经济技术的翻新基石,并且正在粗浅地扭转企业上云和用云的形式。云原生的用云形式能够帮忙企业最大化取得云价值,也给企业的计算基础设施、利用架构、组织文化和研发流程带来新一轮改革。而业务和技术挑战也催生了新一代云原生运维技术体系。
本文整顿自阿里云资深技术专家、容器服务研发负责人易立在阿里云联结主办的“2021 云上架构与运维峰会”中的演讲实录,分享了云原生时代运维技术收回的重要扭转,以及源自阿里云超大规模云原生利用倒退过程中的 CloudOps 实际。
新商业带来新机遇与新挑战
阿里云对云原生的定义是因云而生的软件、硬件和架构,帮忙企业最大化取得云价值。云原生技术带来的变动蕴含几个维度:
• 首先是计算基础设施的变动,蕴含虚拟化、容器、函数计算的新的计算状态,帮忙利用高效地运行在公共云、公有云、边缘云等不同的云环境。
• 其次是利用架构的变动。利用微服务、服务网格等技术帮忙企业构建分布式、松耦合、高弹性、高容错的现代化利用。
• 最初是组织、文化和流程的变动。比方 DevOps、DevSecOps、FinOps、SRE 等理念继续推动现代化的软件开发流程和组织降级。
回顾云原生呈现的时代背景,挪动互联网的呈现扭转了商业的状态,扭转了人与人沟通的形式,让任何人在任何工夫、任何地点都能够轻松获取本人所需的服务。IT 零碎须要可能应答互联网规模的快速增长,并且可能疾速迭代、低成本试错。
以 Netflix、阿里为代表的一系列互联网公司推动了新一代利用架构的改革,Spring Cloud、Apache Dubbo 等微服务架构应运而生。微服务架构解决了传统单体式利用存在的几个问题:每个服务能够独立部署和交付,大大晋升了业务敏捷性;每个服务能够独立横向扩容,应答互联网规模的挑战。
与传统单体利用相比,分布式的微服务架构具备更快的迭代速度、更低的开发复杂性和更好的可扩展性。但同时,它的部署和运维的复杂性却大大增加。咱们须要如何应答?
此外,“脉冲”计算成为常态。比方双十一大促期间,零点须要的算力是平时的数十倍;一个突发的新闻事件,可能让上千万用户涌向社交媒体。云计算无疑是解决突发流量洪峰的更加经济、高效的形式。如何上好云、用好云、管好云,如何让利用能够更加充分利用基础设施的弹性,成为企业运维团队的关注重点。这些业务和技术挑战也催生了云原生的运维技术体系 – CloudOps。
云原生时代运维技术改革
1、云原生运维解决之道
CloudOps 要解决几个关键问题:
• 标准化:标准化能够促成开发团队与运维团队的沟通和协同,标准化也有助于生态分工,推动更多自动化工具的呈现。
• 自动化:只有自动化运维,能力撑持互联网规模的挑战,能力继续撑持业务的疾速迭代与稳定性。
• 数智化:数据化、AI 加强的自动化运维成为将来倒退的必然趋势
2、容器“利用集装箱”重塑软件供应链
在传统的利用散发、部署过程中,常会因为不足规范导致工具碎片化,比方 Java 利用和 AI 利用的部署,须要齐全不同的技术栈,交付效率低。此外,为了防止利用之间的环境抵触,咱们常常须要将每个利用独自部署在一个独立的物理机或者虚拟机上,这也造成了很多资源节约。
2013 年开源的容器技术 Docker 呈现,开创性地提出了基于容器镜像的利用散发和交付形式,重塑了软件开发、交付和运维的整个生命周期。
就像传统的供应链体系为例,不论什么样的产品都是通过应用集装箱来进行运输,极大晋升了物流效率,使得全球化的分工协同成为可能。
容器镜像将利用和其依赖的应用环境一起打包。镜像能够通过镜像仓库进行散发,能够统一的形式运行在开发、测试和生产环境中。
容器技术是一种轻量化 OS 虚拟化能力,能够晋升利用部署密度,优化资源利用率,与传统的虚拟化技术相比,更加麻利、轻量,具备更好的弹性和可移植性。
容器作为云时代的“利用集装箱”,重塑了整个软件供应链,也开启了云原生技术浪潮。
3、容器技术减速不可变基础设施理念落地
在传统的软件部署和变更过程中,常常会呈现因为环境间的差别导致利用呈现不可用的问题。比方,新版本利用须要依赖 JDK11 的能力,而如果部署环境中没有更新 JDK 版本,就会导致利用失败。“It works on my machine”也成了开发人员打趣的口头禅。而且随着工夫的推移,零碎的配置曾经不可考,采纳原地降级的形式在变更的时候一不留神就会掉进坑里。
不可变基础设施(Immutable Infrastructure)是由 Chad Fowler 于 2013 年提出的一个理念,其核心思想是“任何基础设施实例一旦创立,就变成为只读状态,如须要批改和降级,则应用新的实例进行替换。”
这种模式能够缩小配置管理的复杂性,确保系统配置变更能够牢靠地、反复地执行。而且一旦部署出错时可进行疾速回滚。
Docker 和 Kubernetes 容器技术正是实现 Immutable Infrastructure 模式的最佳形式。当咱们为容器利用更新一个镜像版本的时候,Kubernetes 会新创建一个容器,并且通过负载平衡将新申请路由到新容器,而后销毁老容器,这防止了令人头疼的配置漂移问题。
4、Kubernetes:分布式资源调度的规范及 CloudOps 最佳载体
目前,容器镜像曾经成为了分布式应用交付的规范。Kubernetes 曾经成为了分布式资源调度的规范。
越来越多的利用,通过容器形式进行治理、交付:从无状态的 Web 利用,有状态的数据库、音讯等利用,再到数据化、智能化利用。
CNCF 2020 年调查报告指出,55% 的受访者曾经在生产中的容器中运行有状态利用;Gartner 预测到 2023 年,70% 的 AI 工作会通过容器或 Serverless 模式构建。
比照一下经典的 Linux 操作系统和 Kubernetes 的概念模型,他们的指标都是向下封装资源,向上撑持利用,提供了标准化的 API 来反对利用生命周期,并且晋升利用的可移植性。
不同的是,Linux 的计算调度单元是过程,调度范畴限度在一台计算节点。而 Kubernetes 的调度单位是 Pod 一个过程组,它的调度范畴是一个分布式集群,反对利用在公共云、专有云等不同环境间进行迁徙。
对于运维团队而言,Kubernetes 成为实现 CloudOps 理念的最佳平台。
首先是 K8s 采纳申明式 API,让开发者能够专一于利用本身,而非零碎执行细节。比方,在 Kubernetes 之上,提供了 Deployment、StatefulSet、Job 等不同类型利用负载的形象。申明式 API 是云原生重要的设计理念,有助于将零碎复杂性下沉,交给基础设施进行实现和继续优化。
此外,K8s 提供了可扩展性架构,所有 K8s 组件都是基于统一的、凋谢的 API 进行实现和交互。开发者也可通过 CRD(Custom Resource Definition)/ Operator 等形式提供畛域相干的扩大,极大拓宽了 K8s 的利用场景。
最初,K8s 提供平台无关的技术形象:如 CNI 网络插件, CSI 存储插件等等,能够对下层业务利用屏蔽基础设施差别。
5、为什么是 Kubernetes?
Kubernetes 的胜利背地的魔法就是管制循环,Kubernetes 有几个简略的概念。
首先,一切都是资源,通过控制器对资源进行自动化治理。
用户能够申明资源的指标状态。当控制器发现资源以后状态与指标状态存在不统一,就会继续调整,让资源状态趋近于指标状态。通过这个办法,能够对立解决各种状况,比方,依据调整利用正本数进行扩缩容,或者节点宕机后利用主动迁徙,等等。
正因如此,Kubernetes 反对资源范畴曾经远超容器利用。比方服务网格,能够对利用通信流量进行申明式治理;Crossplane 能够利用 K8s CRD 对 ECS,OSS 等云资源进行治理和形象。
6、云原生利用自动化治理摸索与开源实际
K8s 控制器“把简单留给本人,把简略交给用户”的现实十分美妙,然而实现一个高效、强壮的控制器却充斥技术挑战。
OpenKruise 是阿里云开源的云原生利用自动化治理引擎,也是募捐到 Cloud Native Computing Foundation (CNCF) 下的沙箱我的项目。它来自阿里巴巴多年来容器化、云原生的技术积淀,解决容器利用在大规模生产环境的自动化和稳定性挑战。
OpenKruise 提供了加强的利用灰度公布,稳定性防护,Sidecar 容器扩大等多种能力。
OpenKruise 开源实现和团体外部版本代码保持一致。撑持了阿里团体利用 100% 云原生化,也曾经在苏宁、OPPO、小米、Lyft 等企业失去广泛应用。欢送大家社区共建和应用反馈。
7、GitOps:申明式 API 催生的利用交付流程与协同新形式
基础架构即代码(Infrastructure-as-Code,IaC)是一种典型的申明式 API,它扭转了云上资源管理、配置和协同的形式。利用 IaC 工具,咱们能够将云服务器、网络和数据库等不同云资源进行自动化的创立、组装和变配。
将 IaC 概念进行延长,能够笼罩整个云原生软件的交付、运维流程,即 Everything as Code。本图列进去云原生利用波及的各种模型,从基础设施、到利用定义、到利用交付治理和平安体系,咱们都能够通过申明式形式对利用的配置进行治理。
比方,咱们能够通过 Istio 来对利用流量切换进行申明式解决,能够利用 OPA(Open Policy Agent)来定义运行时安全策略等等。
更近一步,咱们能够将利用的所有环境配置都通过源代码控制系统 Git 进行治理,并通过自动化的流程进行交付和变更。这样就是 GitOps 的核心理念。
首先,从利用定义到基础设施环境,所有的配置都以源代码的形式保留在 Git 中;所有变更、审批记录也记录在 Git 的历史状态中。这样 Git 成为 sourceof truth,咱们能够追溯变更历史、能够回滚到指定版本。
GitOps 与申明式 API、不可变基础设施相结合,保障了应用环境的可复现性,晋升了交付与管理效率。GitOps 在阿里团体曾经被宽泛应用,在阿里云容器服务 ACK 中也有反对。目前 GitOps 开源社区也在不断完善相干的工具和最佳实际,大家能够关注相干停顿。
8、云原生催生稳定性思维改革
分布式系统存在高度复杂性,在利用、基础设施、部署过程中任何一个中央的问题,都可能导致业务零碎的故障。
面对这样的不确定性危险,咱们有两种做法:一种是“事在人为”,信佛祖,不宕机;一种是通过系统化的办法进行主动出击,晋升零碎的确定性。
2012 年,Netflix 提出了“混沌工程”的理念,通过被动注入故障的形式,提前发现零碎的薄弱环节,推动架构的改良,最终实现业务韧性。咱们能够将混沌工程的工作形式比作疫苗,通过“接种灭活疫苗”的形式,让咱们的免疫系统受到锤炼,具备抵御“疾病”的能力。
阿里双十一购物节的顺利胜利,离不开全链路压测等对混沌工程的大规模实际,为此阿里团队在这个畛域积攒了丰盛的实战经验。
ChaosBlade 是一组遵循混沌工程理念的试验工具,具备场景丰盛、简略易用等特点,曾经成为 CNCF 沙箱我的项目。它反对 Linux、Kubernetes、Docker 等不同运行环境,以及 Java、NodeJS、C++、Golang 等多种语言。内置了 200 多个场景的测试计划。
chaosblade-box 是新引入的混沌工程控制台,可实现试验环境平台化治理,进一步简化用户体验,升高应用门槛。欢送大家退出 Chaosblade 社区共建,也能够应用阿里云利用高可用服务 AHAS 云服务。
云原生 CloudOps 之路
最初我将联合阿里实际,介绍咱们在 CloudOps 上的一些摸索。
在传统组织中,开发和运维角色是严格离开的。而不同业务线也构建了一个一个的烟囱化架构,从基础设施环境与运维,到利用运维与开发,都是独立的团队,不足良好的协同与复用。
云时代的到来也在扭转着古代 IT 组织和流程。
首先,公共云、专有云成为了不同业务部门间共享的基础设施。
而后,SRE(Site ReliabilityEngineering)理念开始失去宽泛承受。是通过软件和自动化伎俩,来解决零碎的运维复杂性和稳定性问题。因为 Kubernetes 的标准化、可扩展性和可移植性等劣势,越来越多企业的 SRE 团队基于 K8s 治理云环境,极大晋升了企业运维效率与资源效率。
在此之上,平台工程团队开始浮现,基于 Kubernetes 构建企业的 PaaS 平台和 CI/CD 流程,反对中间件和不同业务部门的利用部署与运维。晋升企业的标准化和自动化程度,进一步晋升利用研发、交付效率。
这样的分层构造中,向下的团队更多是通过 SLO 驱动,从而让下层系统对底层依赖技术具备更好的可预期性。越向上的团队更多是业务驱动,更好地撑持业务倒退。
1、阿里云容器服务 SRE 团队的最佳实际
阿里云容器服务 SRE 团队始终也在践行 CloudOps 的最佳实际,简略总结如下:
第一项是全局稳定性架构设计,让整个平台防备与未然:
• 首先 Securityby-design:让零碎做到默认平安,同时通过安全软件供应链保障全生命周期平安
• 其次 Designfor failure:管制爆炸半径、提供限流 / 降级伎俩升高故障影响面
• 第三 Designfor automation:相似扩缩容、故障复原等工作尽可能自动化实现
• 最初 Observabilityby-design:为每个生产利用定义 SLO,并建设相干的可观测性体系,继续关注申请量,提早、谬误数、饱和度等黄金指标
第二项是建设稳定性应急体系,也就是咱们日常所说的 1-5-10 快恢能力,它蕴含:
• 1 分钟发现 – 包含通过黑盒、白盒监控能力
• 5 分钟定位 – 提供诊断大盘,利用工具实现自动化根因定位
• 10 分钟止损 – 蕴含系统化的预案的设计与继续积攒,和自动化预案执行
最初一项是日常稳定性保障,次要蕴含:
• 变更治理规范化 – 所有公布做到可灰度、可监控、可回滚
• 问题跟踪流程化 – 凡事有交代,件件有着落,做一个靠谱青年
• 故障演练常态化 – 通过巡检、突袭、压测等伎俩查漏补缺,让故障预案继续保鲜
2、拥抱云原生运维技术体系
云原生曾经成为势不可挡的技术趋势。Gartner 预测到 2025 年,95% 数字化运维将通过云原生平台进行撑持。
咱们能够依据企业能力和业务指标抉择适合的迁云之路,大抵能够分为几个阶段:
• Rehost 新托管:简略地通过 lift-and-shift 形式,将线下物理机替换成为云上虚拟机或者裸金属实例,不扭转原有的运维形式。
• Re-platform 新平台:利用托管的云服务替换线下自建利用基础设施,比方通过 RDS 数据库服务替换自建 MySQL,通过阿里云容器服务 ACK 来取代自建 K8s 集群。托管的云服务通常提供更好的弹性、稳定性和自治运维能力,能够让用户关注于利用而非基础设施治理。
• Refactor/Re-architect 重构 / 新架构:包含对单体利用的微服务架构革新、容器化和 Serverless 化等现代化革新。
从 Rehost、Re-platform 到 Re-architect,咱们能够看到迁徙的复杂性和所需技能在减少,然而敏捷性、弹性、可用性、容错性等收益也在继续减少。
阿里团体上云也经验了这样的历程,在 2020 年业务 100% 上公共云的根底之上,2021 年实现了利用 100% 云原生化。帮忙阿里业务的研发效率晋升了 20%,资源利用率晋升了 30%。
最初做一个疾速总结。基于容器、Kubernetes 等云原生技术,提供的凋谢社区规范、不可变基础设施、申明式 API 会成为企业 CloudOps 的最佳实际,也将在这个根底上推动数据化、智能化体系建设,将运维复杂性进一步下沉,让企业能够聚焦于本人的业务翻新。阿里云也将继续向外输入本身在超大规模云原生实际和摸索中的能力积淀,与更多企业、开发者一起,躬身入局,全面拥抱云原生运维技术体系。