简介:
随着容器技术的快速发展和广泛应用,毫无疑问云原生技术是未来发展的必然趋势。作为国内最早布局容器技术的阿里云,无论在技术还是产品上,都取得了极大的成果。阿里云资深技术专家易立通过阿里云容器服务,分享容器技术落地的最佳实践,希望能够帮助同学们更好地理解容器技术和云原生理念,合理地设计上云架构,充分发挥云的价值。
容器的英语是 Container,它的意思是集装箱。我们知道,经济全球化的基础就是现代运输体系,而其核心正是集装箱。集装箱的出现实现了物流运输的标准化,自动化,大大降低了运输的成本,使得整合全球的供应链变为可能。这就是著名经济学人谈到的“没有集装箱,就没有全球化”。
集装箱背后的标准化、模块化的理念也在推进建筑业的供应链变革。在最近,疫情爆发之后。10 天 10 夜,在武汉火神山,一个可以容纳上千床位的专科医院平地而起,在抗疫过程中发挥的重要作用。整个医院都是采用集装箱板房吊装。模块化的病房设计,预置了空调、消杀、上下水等设施,极大加速了施工速度。
软件集装箱 ”容器技术“ 也在重塑整个软件供应链。容器作为一种轻量化的操作系统虚拟化技术,和和传统的物理机、虚拟化技术和使用方式有什么不同呢?打个比喻:
传统物理机就是独栋大别墅
虚拟机就是联排住宅
容器就是集装箱板房
在过去几年中,容器技术得到了越来越广泛的应用。其中最主要的 3 个核心价值是:
敏捷
天下武功唯快不破。在企业数字化转型时代,每个企业都在面临着新兴业务模式的冲击和众多的不确定性。一个成功的企业不是看他现在规模有多大,过去的战略有多成功,而是要看他是否有能力持续创新。容器技术提升了企业的 IT 架构的敏捷性,从而提升了业务敏捷性,可以加速业务创新。比如疫情期间,教育、视频、公共健康等行业的在线化出现了爆发性高速增长。通过容器技术可以很好地把握业务快速增长的机遇。在业界的统计中,使用容器技术可以实现 3~10 倍交付效率提升,这意味着企业可以进行快速迭代,低成本试错。
弹性
在互联网时代,企业 IT 系统经常需要面对电商大促、突发事件等可预期和非预期的流量增长。通过容器技术可以充分发挥云计算的弹性,通过提升部署密度和弹性来降低计算成本。比如在线教育,面对疫情之下指数级增长的流量,可以通过容器技术来缓解扩容的压力,支持数十万教师在线教学,百万学生在线学习。
可移植性
容器技术推进了云计算的标准化进程。容器已经成为应用分发和交付的标准,可以将应用与底层运行环境解耦;Kubernetes
成为资源调度和编排的标准,屏蔽了底层架构的差异性,帮助应用平滑运行在不同的基础设施上。CNCF
云原生计算基金会推出了Kubernetes一致性认证,进一步保障了不同 K8s
实现的兼容性。采用容器技术来构建云时代的应用基础设施将变得越来越容易。
现在 Kubernetes 已经成为了云应用操作系统,越来越多应用运行在 Kubernetes 基础之上:从无状态的 Web 应用,到交易类应用(如数据库、消息中间件),再到数据化、智能化应用。阿里经济体也基于容器技术,实现了全面的云原生上云。
阿里云容器服务产品家族可以在公共云、边缘计算和专有云环境提供企业容器平台。阿里云容器产品的核心是 Kubernetes Service - ACK 和 Serverless K8s - ASK,它们构建在阿里云的一系列基础设施能力之上,包括计算、存储、网络、安全等,并提供标准化接口、优化的能力和简化的用户体验。ACK 通过 CNCF K8s 一致性兼容认证,并提供了一系列企业关注的核心能力,比如安全治理,端到端可观测性、多云混合云等。
镜像服务 ACR 是企业云原生应用资产管理的核心,可以管理 Docker 镜像,Helm Chart 等应用资产,并和 CI/CD 工具结合在一起提供完整的 DevSecOps 流程。
托管服务网格 ASM,提供全托管的微服务应用流量管理平台,兼容 Istio,支持多个 Kubernetes 集群中应用的统一流量管理,为容器和虚拟机中应用服务提供一致的通信、安全和可观测能力。
我们以托管 K8s 为例介绍集群部署拓扑结构。
ACK 托管 K8s 集群基于 Kubernetes on Kubernetes 架构设计。K8s 集群的 Master 组件,运行在 ACK VPC 中的控制平面 K8s Cluster 之上。
ACK 采用了默认高可用的架构设计:etcd 3 副本分别运行在 3 个不同 AZ 之上。也根据可扩展性最佳实践,提供了两组 etcd。一组保存配置信息,一组保存系统事件,这样可以提升 etcd 的可用性和可扩展性。用户 K8s 集群的 API Server/Scheduler 等 master 组件,采用多副本方式部署,运行在 2 个不同的 AZ 之上。master 组件可以根据工作负载进行弹性扩展,Worker 节点通过 SLB 来访问 API Server。这样的设计保证了整个 K8s 集群的可用性,即使一个 AZ 的失效,也不会导致 K8s 集群自身失败。
worker 节点,运行在 VPC 上。将节点运行在不同的 AZ,配合应用的 AZ anti-affinity反亲和性可以保障应用的高可用。
弹性是云最核心的能力之一,像双十一这样的典型脉冲应用场景,或者像疫情爆发之后的在线教育和办公协同的极速增长,只能依靠云提供的强大弹性算力才能支撑。Kubernetes 可以将云的弹性能力发挥到极致。
ACK 在资源层和应用层提供了丰富的弹性策略,在资源层目前主流的方案是通过 cluster-autoscaler 进行节点的水平伸缩。当出现 Pod 由于资源不足造成无法调度时,cluster-autoscaler 会在节点池中自动创建新的节点实例,根据应用负载需求进行扩容。
ECI 弹性容器实例,基于轻量虚拟机提供了 Serverless 化的容器运行环境。我们可以在 ACK 通过调度将业务应用运行在 ECI 实例上。这非常适合大数据离线任务、CI/CD 作业、突发的业务扩容等。在微博的应用场景中,弹性容器实例可以在 30 秒内扩容 500 Pod,轻松应对突发的新闻事件。
在应用层,Kubernetes 提供了 HPA 的方式进行 Pod 的水平伸缩,和 VPA 进行 Pod 的垂直伸缩。阿里云提供了 metrics-adapter,可以支持更加丰富的弹性指标,比如可以根据 Ingress 的 QPS 指标,动态调整应用 Pod 数量。另外很多应用负载的资源画像是具有周期性的。比如证券行业业务的高峰是工作日的股市开盘时间。峰谷资源需求量的差异高达 20 倍,为了解决这类需求,阿里云容器服务提供了定时伸缩组件,开发者可以定义定时扩缩容策略,提前扩容好资源,而在波谷到来后定时回收资源。可以很好地平衡系统的稳定性和资源成本。
K8s 提供的强大的功能和灵活性,但是运维一个 Kubernetes 生产集群极具挑战。即使利用托管 Kubernetes 服务,但是依然要保有 worker 节点资源池,还需要对节点进行日常维护,比如 OS 升级,安全补丁等,并根据自己的资源使用情况对资源层进行合理的容量规划。
针对 K8s 的复杂性挑战,阿里云推出了 Serverless Kubernetes 容器服务—— ASK。ASK 在兼容 K8s 应用的前提下,对 Kubernetes 做减法,将复杂性下沉到云基础设施,极大降低了运维管理负担,让开发者更加专注于应用自身。
在 Serverless 容器场景,我们提供了两种不同的技术方案:ACK on ECI 和 ASK。
ACK on ECI
ACK 集群兼具功能性和灵活性。非常适合大型互联网企业或传统企业的需求。可以一个集群中运行多种不同的应用、任务。它主要面向的是企业中 SRE 团队,可以对 K8s 进行定制化开发和灵活性控制。
ACK 集群支持 3 种不同的容器运行时技术:
ECI 在 K8s 集群中适合的场景:
ASK
ASK 则是针对 ISV 和企业中的部门/中小企业度身定制的容器产品。用户完全不需具备 K8s 的管理运维能力,即可创建和部署 K8s 应用,极大降低管理复杂性,非常适合应用托管、CI/CD、AI/数据计算等场景。比如可以利用 ASK 和 GPU ECI 实例构建了免运维的 AI 平台,可以按需创建机器学习环境,整体架构非常简单、高效。
云原生分布式应用架构具备几个关键特性,高可用、可弹性伸缩、容错性好、易于管理、便于观察、标准化、可移植。我们可以在阿里云上构建云原生应用参考架构,其中包括:
首先是端到端的弹性的应用架构。
我们可以将前端应用、业务逻辑容器化,部署在 K8s 集群上,并根据应用负载配置 HPA 水平伸缩。
在后端数据层,我们可以利用 PolarDB 这样的云原生数据库。PolarDB 采用存储和计算分离架构,支持水平扩展。同等规格下是 MySQL 性能的7倍,并且相较于 MySQL 能够节省一半成本。
此外是系统化的高可用设计:
这样我们可以保障整个系统具备 AZ 级别的可用性,可以容忍一个 AZ 的失效。
此外,阿里云的高可用服务 AHAS,提供了架构感知的能力,可以对系统的拓扑结构进行可视化。而且它提供了应用巡检能力,帮助我们定位可用性问题。比如应用副本数是否满足可用性需求,RDS 数据库实例是否开启了多可用区容灾等等。
在一个大规模分布式系统中,基础设施(如网络,计算节点、操作系统)或者应用自身都有可能会出现各种稳定性或者性能问题。可观测性可以帮助我们解分布式系统的状态,便于做出决策,并作为弹性伸缩和自动化运维的基础。
一般而言,可观测性包含几个重要的层面:
Logging – 日志(事件流)
我们基于阿里云日志服务 SLS 提供了完整的日志方案,不但可以对应用日志进行收集、处理,并且提供了操作审计,K8s 事件中心等能力。
Metrics – 监控指标
对基础设施服务,比如 ECS、存储,网络,云监控提供了全面的监控。对于业务应用的性能指标,比如 Java 应用的 Heap 内存利用情况,ARMS无需修改业务代码即可对 Java 和 PHP 应用提供全方位的性能监控。对于 K8s 应用和组件,ARMS 提供的托管 Prometheus 服务,提供多种开箱即用的预置监控大盘,也提供开放接口,便于三方集成。
Tracing – 全链路追踪
Tracing Analysis 为开发者提供了完整的分布式应用调用链路统计、拓扑分析等工具。能够帮助开发者快速发现和诊断分布式应用中的性能瓶颈,提升微服务应用的性能和稳定性。
安全是企业在应用容器技术中最大的顾虑,没有之一。为了系统化提升容器平台的安全性,我们需要全方位进行安全防护。第一件事,我们需要将 DevOps 提升成为 DevSecOps,强调需将安全概念融入在整个软件生命周期中,将安全防护能力左移到开发和交付阶段。
ACR 镜像服务企业版提供了完整的安全软件交付链。用户上传镜像后,ACR 可以自动化地进行镜像扫描,发现其中存在的 CVE 漏洞。之后可以利用 KMS 秘钥服务,自动化对镜像添加数字签名。在 ACK 中,可以配置自动化安全策略,比如只允许经过安全扫描且符合上线要求的镜像在生产环境进行发布。整个软件交付链路可观测、可追踪、策略驱动。在保障安全性的前提下,可以有效提升交付效率。
此外,在应用运行时,也会面对众多安全风险,比如新发现的 CVE 漏洞或者病毒攻击。阿里云安全中心提供了运行时的安全监控和防护能力。
云安全中心可以对容器应用进程与网络情况监控,对应用的异常行为或者安全漏洞进行实时检测。发现问题后,会通过邮件、短信对用户进行通知,也提供了自动化隔离与修复能力。比如我们拿一个去年著名的挖矿蠕虫病毒为例,它会利用用户的配置错误对容器集群发动攻击。在云安全中心的帮助下,我们可以轻松发现它的踪迹并进行一键清除。
今年二月,我们发布了业内首个全托管,Istio 兼容的服务网格产品 ASM。服务网格的控制平面组件托管在阿里云侧,与数据平面侧的用户集群独立。通过托管模式,极大简化了 Istio 服务网格部署和管理的复杂性,解耦了网格与其所管理的 K8s 集群的生命周期,使得架构更加简单、灵活,提升了系统的稳定性和可伸缩性。此外,ASM 在 Istio 基础上进行大量的扩展,整合了阿里云可观测性服务、日志服务等,可以帮助用户更加高效地管理网格中的应用。
在数据平面的支持上,ASM 产品可以支持多种不同的计算环境,这包括了 ACK Kubernetes 集群、ASK 集群、以及 ECS 虚拟机等。通过云企业网 CEN,ASM 可以实现多地域、跨 VPC 的 K8s 集群之间的服务网格。这样 ASM 可以对多地域的大规模分布式应用实现流量管理和灰度发布。此外,ASM 也会很快推出多云混合云的支持。
上云已是大势所趋,但是对于企业用户而言,有些业务由于数据主权和安全隐私的考虑,无法直接上云,只能采用混合云架构。Gartner 预测 81% 的企业将采用多云/混合云战略,混合云架构已经成为企业上云的新常态。
传统的混合云架构以云资源为中心进行抽象和管理。然而不同云环境的基础设施、安全架构能力的差异会造成企业 IT 架构和运维体系的割裂,加大混合云实施的复杂性,提升运维成本。
在云原生时代,以 Kubernetes 为代表的技术屏蔽了基础设施的差异性,可以更好地在混合云环境下,进行统一资源调度和统一应用生命周期管理。以应用为中心的混合云 2.0 架构已经到来!
这里有几个典型场景:
基于 ACK 和阿里云的混合云网络、存储网关以及数据库复制等能力,我们可以帮助企业构建全新的混合云 IT 架构。
混合云 2.0 架构
首先 ACK 提供了统一集群管理能力,除了可以管理阿里云 K8s 集群之外,还可以纳管用户在 IDC 的自有 K8s 集群和其他云的 K8s 集群。利用统一的控制平面实现多个集群的统一的安全治理、可观测性、应用管理、备份恢复等能力。比如利用日志服务、托管 Prometheus 服务,可以无侵入的方式帮助用户对线上、线下集群有一个统一的可观测性大盘。利用云安全中心,AHAS 可以帮助用户在混合云的整体架构中发现并解决安全和稳定性风险。
此外 ASM 提供统一的服务治理能力,结合 CEN、SAG 提供的多地域、混合云网络能力,可以实现服务就近访问,故障转移,灰度发布等功能,支持云容灾、异地多活等应用场景,提升业务连续性。
云原生混合云解决方案
一个案例:职优你是一个电子学习职业发展平台,为来自世界多个地区的用户提供服务。它的应用部署在阿里云的 4 个不同地域上多个 Kubernetes 集群中。这些集群通过云企业网 CEN 将多个跨地域 VPC 网络打通,并通过一个 ASM 服务网格,对多个 K8s 集群中的微服务应用进行统一的流量管理。
服务路由策略由 ASM 控制平面统一管理,并下发到多个 K8s 集群。用户请求会经过 DNS 分流到最近地域的入口网关,之后通过服务网格的就近访问能力,优先访问本地域内的服务端点。如果本地域的服务不可用,可以将请求自动转移到其他地域实现流量切换。
云原生混合云管理
阿里云的混合云解决方案有几个重要特点:
本文系作者在时代Java发表,未经许可,不得转载。
如有侵权,请联系nowjava@qq.com删除。