以容器、服务网格、微服务、Serverless 为代表的云原生技术,带来一种全新的方式来构建应用。同时,云原生也在拓展云计算的边界,一方面是多云、混合云推动无边界云计算,一方面云边端的协同。在云的趋势下,越来越多的企业开始将业务与技术向“云原生”演进。
在这个演进过程中,企业都或多或少都面对一些困惑与挑战,其中如何将应用和软件向 Kubernetes 体系进行迁移、交付和持续发布是一个普遍的难题。
阿里巴巴从 2011 年开始通过容器实践云原生技术体系,在整个业界都还没有任何范例可供参考的大背境下,从最初独自摸索到拥抱开源回馈社区,阿里巴巴逐渐摸索出了一套比肩全球一线技术公司并且服务于整个阿里集团的容器化基础设施架构。九年的前行,让阿里巴巴在交流互动中不断吸收和贡献好的理念、技术、思想,也积累了最为丰富和宝贵的实践经验。
2019 年 6 月 24 日至 6 月 26 日,由 Cloud Native Computing Foundation (CNCF) 主办的云原生技术大会 KubeCon + CloudNativeCon + Open Source Summit(上海 ),阿里巴巴在大会上为全球企业和开发者分享了 26 场实践经验、行业趋势和技术演讲,我们筛选了其中 15 场有代表性的演讲进行重新编排成书,旨在全面揭秘阿里巴巴云原生之路上的探索与实践,为准备踏上云原生之旅的开发者,提供一些实践参考。
你为什么要读这本书
在云原生领域,开发者的诉求和使用方法永远是丰富的、复杂的、多样的。在这种背景下,短时间内很难有技术能够大一统地解决开发者面临的所有问题,阿里巴巴内部对云原生的探索也一直在进行中。从外向内引入社区技术,让阿里巴巴的基础设施完成了一次自我升级,并变得更加开放标准;从内向外的输出,对社区提出有价值的代码,推动整个云原生社区向更大规模的方向演进。
本书整合阿里巴巴九年云原生技术沉淀,分析真实的技术案例,发现问题,理清思路,解决问题,总结方法,把自我成长和专业精进的技术养料,回馈给广大云原生开发者。本书包含 3 个系列,阿里云原生实践,阿里新技术方案及阿里开源贡献,共 16 篇文章。每篇文章都凝结着阿里巴巴云原生落地实践的宝贵经验和面对困惑的解决方法,相信能够在最短的时间内,帮助你全面了解阿里巴巴云原生实践经验,踏上最适合自己的云原生之路。
本书目录
书中精彩干货集合
《坚持探索与落地开源,阿里巴巴云原生之路全景揭秘》
阿里云已经成功地规模化落地云原生,本文将分享阿里巴巴具体的云原生实践经验分享给各位观众,涉及规模扩展、可靠性、开发效率、迁移策略等方面,并探讨针对大规模场景进行优化。Cloud native works for Alibaba. Cloud native works for (almost) everyone.
《1-5-10:如何快速恢复大规模容器故障》
在云时代,企业中基于容器的应用激增,由于人工操作、硬件故障等,发生容器故障的可能性大幅增加。因此,如何在不增加资源投入的情况下保证大规模容器的可靠性成为云平台面临的一个巨大挑战。阿里巴巴运行着数百万个容器,为恢复容器相关故障提出了 1-5-10 理论:MTTD(平均检测时间)为 1 分钟,MTTI(平均识别时间)为 5 分钟,MTTR(平均解决时间)为 10 分钟。我们将讨论如何利用 1-5-10 提高大规模容器的可靠性:
如何在本地建立一个有效代理,在 1 分钟内检测到问题;
如何借助专家知识库智能诊断容器问题;
如何以故障驱动型方式自动恢复容器问题。
《阿里巴巴利用 K8S、Kata 容器和裸机云构建无服务器》
无服务器计算是当前流行的计算形式,极大降低了开发人员部署、管理、运行应用的成本。在无服务器平台中,不同用户的服务通常混部在同一个节点上,为此,需要在多租户场景下提供可信的运行环境。在阿里巴巴,我们使用 Kata Containers 作为安全容器运行时,在存储、网络、硬件等层面确保多租硬隔离和服务运行时的性能。文章将根据我们的生产实践,详细讨论多租场景下如何实现硬多租和服务运行的高性能。
《CafeDeployment:为互联网金融关键任务场景扩展的 Kubernetes 资源》
Kubernetes 原生社区 Deployment 和 StatefulSet 解决了“服务节点版本一致性”的问题,并且通过 rolling update 实现了滚动升级,提供了基本的回滚策略。对于高可用建设要求不高的“年轻”业务,是一个不错的选择。但是,在金融场景下,要解决的场景复杂得多,因此我们在金融分布式架构-云应用引擎( SOFAStack-CAFE )中提出了 CafeDeployment 的云原生模型,致力于解决,IP 不可变;金融体系下的高可用;灵活的部署策略的问题。
在面对以上这些问题的时候,我们思考:能不能有一个类似 Deployment 的东西,不仅可以实现副本保持,而且还能协助用户管控应用节点部署结构、做 Beta 验证、分批发布,减少用户干预流程,实现最大限度减少发布风险的目标,做到快速止损,并进行修正干预。本篇文章中将详细解释我们为什么选择定义了自己的 CRD——CafeDeployment 。
《Severless 市场观察和落地挑战》
KubeCon China 2019 大会上, 蚂蚁 SOFAStack CAFE Serverless 应用服务(SAS)正式亮相,在工作坊吸引了百余名参与者同场体验。Serverless 将资源管理的粒度更加细化,使开发者更快上手云原生,并且倡导事件驱动模型支持业务发展。从而帮助用户解决了资源管理复杂、低频业务资源占用等问题;实现面向资源使用,以取代面向资源分配的模式。
《有效可靠地管理大规模 Kubernetes 集群》
Kubernetes 以其超前的设计理念和优秀的技术架构,在容器编排领域拔得头筹。越来越多的公司开始在生产环境部署实践 Kubernetes,在阿里巴巴和蚂蚁金服 Kubernetes 已被大规模用于生产环境。Kubernetes 的出现使得广大开发同学也能运维复杂的分布式系统,它大幅降低了容器化应用部署的门槛,但运维和管理一个生产级的高可用 Kubernetes 集群仍十分困难。本文将分享蚂蚁金服是如何有效可靠地管理大规模 Kubernetes 集群的,并会详细介绍集群管理系统核心组件的设计。
《云原生应用 Kubernetes 监控与弹性实践》
云原生应用的设计理念已经被越来越多的开发者接受与认可,而 Kubernetes 作为云原生的标准接口实现,已经成为了整个 stack 的中心,云服务的能力可以通过 Cloud Provider 、 CRD Controller 、 Operator 等等的方式从 Kubernetes 的标准接口向业务层透出。开发者可以基于 Kubernetes 来构建自己的云原生应用与平台, Kubernetes 成为了构建平台的平台。本文将向大家介绍一个云原生应用该如何在 Kubernetes 中无缝集成监控和弹性能力。
《了解 Kubernetes Master 的可扩展性和性能》
目前,Kubernetes 的规模限制是 5k 节点,因此如果您想用它来管理像 10k 节点这样的 Web 规模集群,您可能无法实现。您是否想知道 Kubernetes 管理超过 5k 节点的性能瓶颈是什么?当你想将其可扩展性扩展到一个新的水平时,是哪个组件阻碍?etcd,apiserver 或者 scheduler?了解这些问题是运营大型 Kubernetes 集群的关键。在阿里巴巴,我们遇到了很多问题,比如随着集群变得越来越大,pod 创建变得非常慢。本文将分享我们如何进行各种基准测试和分析,并找到瓶颈,以及如何调整控制组件,并实现了超过 100 倍的性能提升。
《云原生时代加速镜像分发的三种方法》
本文将分享从阿里巴巴网络规模提高镜像分发效率的实践和经验教训。根据不同的场景,我们利用不同的镜像分发方法。基于 P2P 的 CNCF/Dragonfly 分发是缓解镜像中心带宽和减少分发时间的最直接方式。此外,CNCF/containerd 中的远程文件系统快照程序直接远程存储镜像,使容器引擎通过网络读取镜像内容,几乎不需要时间分发。你会发现第二种方式依赖于网络稳定性,那么如何根据镜像内容读请求动态加载从远程到本地存储的镜像作为权衡?最后,我们将总结如何选择适合镜像分布的方式。
《在 Web 级集群中动态调整 Pod 资源限制》
阿里巴巴这样规模庞大的全球电商巨头,其所拥有的应用数量和应用种类的都是超大规模的。如何科学合理管理这些容器的资源,一直是我们面临的巨大挑战。在本文中,我们将从技术和社区演进等多种维度为大家分享我们的实际工作经验和技术成果。其中包括:
目前社区对于容器的资源管理现状是什么?
阿里这种大规模应用部署的具体挑战是什么?
我们如何诊治资源管理上的各种疑难杂症?
我们如何做到资源利用率大幅提升的同时确保在线服务稳定?
如何平衡基于云原生的演进和实现工作快速交付?
我们的经验可以为您带来什么帮助以及我们如何反馈社区做到共赢?
《大规模 K8s 集群下的巡检》
众所周知,准确的异常发现和快速的问题分析是保证 Kubernetes 集群可用性和稳定性的关键所在。但在整个 Kubernetes 项目中,有着不计其数的监控指标数据。仅以我们的 Kubernetes 集群为例,我们观察到像这样的监控数据每秒钟就会产生几千条。如何合理地利用这些复杂而大量的数据和指标,对它们有效的进行记录和分析,变成简单易懂的可视化展示,变成准确的告警信息,是一个非常有挑战性的工作。
本文将分享阿里巴巴在 Kubernetes 集群监控、审计和巡检方面的实践和经验。谈谈 Kubernetes 与稳定性相关的重要数据和指标,以及如何去理解它们。以案例的形式,具体讲解我们如何对这些数据和指标进行整合与解析,并分享阿里巴巴高效、实时的对这些数据进行自动化巡检与分析的最佳实践。
《使用 Istio 管理跨地域多集群的服务》
职优你是一个电子学习职业发展平台,旨在满足全球学生和在职专业人士的各种需求,并为来自世界多个地区的用户提供服务。这些应用部署于在阿里云的不同区域上的多个 Kubernetes 集群上,以减少不同区域内的服务访问延迟。为了有效地管理这些微服务,需要一个多集群服务网格来控制微服务流量、保证服务到服务通信等。
Istio 是一个建立在 Kubernertes 上的服务网格,可支持多种拓扑来管理多个 Kubernetes 集群上的应用流量统一管理。在整个案例研究中,我们将使用 Istio 服务网格分享多集群流量管理相关的部署设计和技术,并根据底层平台的需求和限制讨论一些挑战和相应的实践。
《首个普惠社区的平民化方案: GPU 共享调度》
越来越多的数据科学家在 Kubernetes 上运行基于 NvidiaGPU 的深度学习任务。与此同时,他们发现集群中的空闲 GPU 浪费了超过 40% 的成本。因此,如何能帮助提高 GPU 使用效率成为一个重要挑战。本文将介绍一款基于原生 Kubernetes 的 GPU 共享解决方案:
如何定义 GPU 共享 API
如何在不更改调度程序裸机代码的情况下在调度 GPU 共享
如何将 GPU 隔离解决方案与 Kubernetes 相集成
我们还将通过演示介绍 Tensorflow 用户如何在 Kubernetes 集群中的同一 GPU 设备上运行不同的作业
《容器运行时管理引擎 Containerd》
本文将从 containerd 架构设计理念出发,向听众分享如何使用插件化能力来增强 containerd,提供不同镜像存储以及强隔离容器运行时的解决方案。同时,还会展示 containerd 同 gVisor, Firecracker 容器运行时集成的演示案例,会让读者更好地理解 containerd 最佳集成方式。
《基于 P2P 原理的高可用高性能大规模镜像分发系统 :Dragonfly》
随着容器技术在工业中的应用越来越广泛,如何安全高效地分发映像是工程师们所面临的新挑战。蜻蜓项目是基于开源智能 P2P 的映像和文件分发系统。该项目旨在解决云原生场景中的所有分发问题。目前,蜻蜓项目专注于以下方面:
简单:面向用户的明确定义的 API (HTTP),对所有容器引擎都无侵入性
高效:CDN 支持、基于 P2P 的文件分发以节省企业带宽
智能:主机检测实现主机层面的速度限制、智能的流量控制
安全:数据块传输加密,HTTPS 连接支持
本文将重点介绍通过蜻蜓分发容器映像。我们将回顾组织面临的挑战,包括大规模分发、安全传输、带宽成本,并提供解决方案。
云原生浪潮滚滚而来,企业纷纷上云。这条路上,阿里巴巴不是踽踽独行。不管是开源回馈社区或是分享最佳案例,希望阿里巴巴在云上的探索,能够为业界提供借鉴意义,共同推动云计算的应用和发展。