云原生之路:容器技术落地最佳实践

简介:随着容器技术的快速发展和普遍应用,毫无疑问云原生技术是将来发展的必然趋势。做为国内最先布局容器技术的阿里云,不管在技术仍是产品上,都取得了极大的成果。阿里云资深技术专家易立经过阿里云容器服务,分享容器技术落地的最佳实践,但愿可以帮助同窗们更好地理解容器技术和云原生理念,合理地设计上云架构,充分发挥云的价值。(文末推荐:2020 阿里巴巴研发效能峰会)前端

image.png

没有集装箱,就没有全球化。——《经济学人》

什么是容器?

容器的英语是 Container,它的意思是集装箱。咱们知道,经济全球化的基础就是现代运输体系,而其核心正是集装箱。集装箱的出现实现了物流运输的标准化,自动化,大大下降了运输的成本,使得整合全球的供应链变为可能。这就是著名经济学人谈到的“没有集装箱,就没有全球化”。算法

集装箱背后的标准化、模块化的理念也在推动建筑业的供应链变革。在最近,疫情爆发以后。10 天 10 夜,在武汉火神山,一个能够容纳上千床位的专科医院平地而起,在抗疫过程当中发挥的重要做用。整个医院都是采用集装箱板房吊装。模块化的病房设计,预置了空调、消杀、上下水等设施,极大加速了施工速度。数据库

容器的通俗理解

image.png

软件集装箱 ”容器技术“ 也在重塑整个软件供应链。容器做为一种轻量化的操做系统虚拟化技术,和和传统的物理机、虚拟化技术和使用方式有什么不一样呢?打个比喻:后端

传统物理机就是独栋大别墅安全

  • 一家人独占,住的温馨,不会被别人打扰。
  • 应用独占物理机,性能优异。可是缺点就是贵、交付时间长,资源利用率也不高。

虚拟机就是联排住宅网络

  • 每户有独立的空间,有较好的隔离性。每栋房屋之间共享水电、地基等基础设施。容积率提高了,成本降低了,交付速度也加快了。
  • 经过虚拟化技术,虚拟机中的应用能够实现安全隔离,还能够有效提高资源利用率。可是,虚拟机交付后还需进行应用配置和安装,交付速度还不够快。

容器就是集装箱板房架构

  • 集装箱房采用模块化设计,自带装修,能够快速搭建,随时移动。这是 2022 年卡塔尔世界杯一个体育场的设计。它将彻底使用集装箱方式搭建一个能够容纳 4 万人的体育场。每一个集装箱模块都在在中国生产,已经预置了看台,卫生间,酒吧等功能,在中国生产完毕后在卡塔尔组装。不但工期能够缩短 3 年,并且赛事结束后能够拆卸,搬迁到其余地方。
  • 容器利用操做系统中 cgroup,namespace 等技术实现资源隔离。容器共享操做系统内核,很是轻量,没有资源损耗,支持秒级启动,极大提高了系统的应用部署密度和弹性。容器镜像将应用和其依赖的系统组件和配置打包在一个标准化的、自包含的格式中。经过容器镜像方式进行应用分发和交付,可让应用即开即用,并一致地运行在不一样环境。

容器的价值

在过去几年中,容器技术获得了愈来愈普遍的应用。其中最主要的 3 个核心价值是:负载均衡

敏捷less

天下武功惟快不破。在企业数字化转型时代,每一个企业都在面临着新兴业务模式的冲击和众多的不肯定性。一个成功的企业不是看他如今规模有多大,过去的战略有多成功,而是要看他是否有能力持续创新。容器技术提高了企业的 IT 架构的敏捷性,从而提高了业务敏捷性,能够加速业务创新。好比疫情期间,教育、视频、公共健康等行业的在线化出现了爆发性高速增加。经过容器技术能够很好地把握业务快速增加的机遇。在业界的统计中,使用容器技术能够实现 3~10 倍交付效率提高,这意味着企业能够进行快速迭代,低成本试错。运维

弹性

在互联网时代,企业 IT 系统常常须要面对电商大促、突发事件等可预期和非预期的流量增加。经过容器技术能够充分发挥云计算的弹性,经过提高部署密度和弹性来下降计算成本。好比在线教育,面对疫情之下指数级增加的流量,能够经过容器技术来缓解扩容的压力,支持数十万教师在线教学,百万学生在线学习。

可移植性
容器技术推动了云计算的标准化进程。容器已经成为应用分发和交付的标准,能够将应用与底层运行环境解耦;Kubernetes 成为资源调度和编排的标准,屏蔽了底层架构的差别性,帮助应用平滑运行在不一样的基础设施上。CNCF 云原生计算基金会推出了Kubernetes一致性认证,进一步保障了不一样 K8s 实现的兼容性。采用容器技术来构建云时代的应用基础设施将变得愈来愈容易。

Kubernetes:云原生时代的基础设施

image.png

如今 Kubernetes 已经成为了云应用操做系统,愈来愈多应用运行在 Kubernetes 基础之上:从无状态的 Web 应用,到交易类应用(如数据库、消息中间件),再到数据化、智能化应用。阿里经济体也基于容器技术,实现了全面的云原生上云。

阿里云容器服务介绍

image.png

阿里云容器服务产品家族能够在公共云、边缘计算和专有云环境提供企业容器平台。阿里云容器产品的核心是 Kubernetes Service - ACK 和 Serverless K8s - ASK,它们构建在阿里云的一系列基础设施能力之上,包括计算、存储、网络、安全等,并提供标准化接口、优化的能力和简化的用户体验。ACK 经过 CNCF K8s 一致性兼容认证,并提供了一系列企业关注的核心能力,好比安全治理,端到端可观测性、多云混合云等。

镜像服务 ACR 是企业云原生应用资产管理的核心,能够管理 Docker 镜像,Helm Chart 等应用资产,并和 CI/CD 工具结合在一块儿提供完整的 DevSecOps 流程。

托管服务网格 ASM,提供全托管的微服务应用流量管理平台,兼容 Istio,支持多个 Kubernetes 集群中应用的统一流量管理,为容器和虚拟机中应用服务提供一致的通讯、安全和可观测能力。

托管 K8s 集群

image.png

咱们以托管 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 倍,为了解决这类需求,阿里云容器服务提供了定时伸缩组件,开发者能够定义定时扩缩容策略,提早扩容好资源,而在波谷到来后定时回收资源。能够很好地平衡系统的稳定性和资源成本。

Serverless Kubernetes

K8s 提供的强大的功能和灵活性,可是运维一个 Kubernetes 生产集群极具挑战。即便利用托管 Kubernetes 服务,可是依然要保有 worker 节点资源池,还须要对节点进行平常维护,好比 OS 升级,安全补丁等,并根据本身的资源使用状况对资源层进行合理的容量规划。

针对 K8s 的复杂性挑战,阿里云推出了 Serverless Kubernetes 容器服务—— ASK。ASK 在兼容 K8s 应用的前提下,对 Kubernetes 作减法,将复杂性下沉到云基础设施,极大下降了运维管理负担,让开发者更加专一于应用自身。

  • 对用户而言,没有节点的概念,用户无需预留任何资源,免维护,零管理。
  • 全部资源按需建立,运行在弹性容器实例之上,按照应用实际消耗的资源付费。
  • 无需任何容量规划。

image.png

在 Serverless 容器场景,咱们提供了两种不一样的技术方案:ACK on ECI 和 ASK。

ACK on ECI

ACK 集群兼具功能性和灵活性。很是适合大型互联网企业或传统企业的需求。能够一个集群中运行多种不一样的应用、任务。它主要面向的是企业中 SRE 团队,能够对 K8s 进行定制化开发和灵活性控制。

ACK 集群支持 3 种不一样的容器运行时技术:

  • RunC 容器,也就是 Docker 容器,与宿主机 Linux 共享内核,简单、高效,可是安全隔离性比较弱。一旦恶意应用利用内核漏洞逃逸,能够影响整个宿主机上其余应用。
  • 为了提高安全隔离,阿里云和蚂蚁金服团队合做,引入袋鼠安全沙箱容器技术。阿里云是行业中,第一个提供 RunV 安全容器的公共云容器服务。相比于 RunC 容器,每一个 RunV 容器具备独立内核,即便容器所属内核被攻破,也不会影响其余容器。适合运行来自第三方不可信应用或者在多租户场景下进行更好的安全隔离。此外,RunC 和 RunV 容器都支持资源超售,用户能够本身灵活控制,来平衡稳定性和成本。
  • ACK 支持对弹性容器实例 ECI 的调度,ECI 本质上基于轻量虚拟机实现安全、隔离的容器运行环境。并充分利用整个阿里云弹性计算资源池的算力,来知足用户对计算弹性的成本、规模、效率的诉求。在设计上,ECI 针对容器场景充分优化,利用操做系统剪裁、ENI 网卡直通、存储直接挂载等技术,保障了 ECI 中应用的执行效率等于甚至略优于在虚拟机中的容器运行环境。ECI 目前不支持资源超售,可是提供了竞价实例,可让用户来控制成本和计算效率的平衡。

ECI 在 K8s 集群中适合的场景:

  • 在线业务突发流量:用户能够保有一个静态资源池应对平常流量,突发流量能够经过 ECI 来承载。
  • 批量计算任务:对有些临时性、周期性的计算任务,资源规模不太容易预期或者预留大量的资源会产生浪费。咱们可让 ECI 来承载这样的批量数据处理任务。
  • 安全隔离:有些业务应用须要运行 3 方不可信应用,好比一个用户上传的 AI 算法模型,利用 ECI 自己的安全沙箱进行隔离,能够安全地运行。

ASK

ASK 则是针对 ISV 和企业中的部门/中小企业度身定制的容器产品。用户彻底不需具有 K8s 的管理运维能力,便可建立和部署 K8s 应用,极大下降管理复杂性,很是适合应用托管、CI/CD、AI/数据计算等场景。好比能够利用 ASK 和 GPU ECI 实例构建了免运维的 AI 平台,能够按需建立机器学习环境,总体架构很是简单、高效。

云原生弹性、高可用架构

云原生分布式应用架构具有几个关键特性,高可用、可弹性伸缩、容错性好、易于管理、便于观察、标准化、可移植。咱们能够在阿里云上构建云原生应用参考架构,其中包括:

  • 云原生基础设施:基于神龙架构的 ECS 企业实例
  • 云原生应用平台:ACK 容器服务
  • 云原生数据库:PolarDB

首先是端到端的弹性的应用架构。

咱们能够将前端应用、业务逻辑容器化,部署在 K8s 集群上,并根据应用负载配置 HPA 水平伸缩。

在后端数据层,咱们能够利用 PolarDB 这样的云原生数据库。PolarDB 采用存储和计算分离架构,支持水平扩展。同等规格下是 MySQL 性能的7倍,而且相较于 MySQL 可以节省一半成本。

此外是系统化的高可用设计:

  • 利用 AZ 级别的反亲和性,咱们能够将应用的副本实例部署在不一样 AZ。
  • 经过 SLB 负载均衡接入在不一样 AZ 的应用入口。
  • PolarDB 数据库默认提供了跨 AZ 高可用。

这样咱们能够保障整个系统具有 AZ 级别的可用性,能够容忍一个 AZ 的失效。

此外,阿里云的高可用服务 AHAS,提供了架构感知的能力,能够对系统的拓扑结构进行可视化。并且它提供了应用巡检能力,帮助咱们定位可用性问题。好比应用副本数是否知足可用性需求,RDS 数据库实例是否开启了多可用区容灾等等。

多维度可观测性

image.png

在一个大规模分布式系统中,基础设施(如网络,计算节点、操做系统)或者应用自身都有可能会出现各类稳定性或者性能问题。可观测性能够帮助咱们解分布式系统的状态,便于作出决策,并做为弹性伸缩和自动化运维的基础。

通常而言,可观测性包含几个重要的层面:

Logging – 日志(事件流)

咱们基于阿里云日志服务 SLS 提供了完整的日志方案,不但能够对应用日志进行收集、处理,而且提供了操做审计,K8s 事件中心等能力。

Metrics – 监控指标

对基础设施服务,好比 ECS、存储,网络,云监控提供了全面的监控。对于业务应用的性能指标,好比 Java 应用的 Heap 内存利用状况,ARMS无需修改业务代码便可对 Java 和 PHP 应用提供全方位的性能监控。对于 K8s 应用和组件,ARMS 提供的托管 Prometheus 服务,提供多种开箱即用的预置监控大盘,也提供开放接口,便于三方集成。

Tracing – 全链路追踪

Tracing Analysis 为开发者提供了完整的分布式应用调用链路统计、拓扑分析等工具。可以帮助开发者快速发现和诊断分布式应用中的性能瓶颈,提高微服务应用的性能和稳定性。

从 DevOps 到 DevSecOps

image.png

安全是企业在应用容器技术中最大的顾虑,没有之一。为了系统化提高容器平台的安全性,咱们须要全方位进行安全防御。第一件事,咱们须要将 DevOps 提高成为 DevSecOps,强调需将安全概念融入在整个软件生命周期中,将安全防御能力左移到开发和交付阶段。

ACR 镜像服务企业版提供了完整的安全软件交付链。用户上传镜像后,ACR 能够自动化地进行镜像扫描,发现其中存在的 CVE 漏洞。以后能够利用 KMS 秘钥服务,自动化对镜像添加数字签名。在 ACK 中,能够配置自动化安全策略,好比只容许通过安全扫描且符合上线要求的镜像在生产环境进行发布。整个软件交付链路可观测、可追踪、策略驱动。在保障安全性的前提下,能够有效提高交付效率。

此外,在应用运行时,也会面对众多安全风险,好比新发现的 CVE 漏洞或者病毒攻击。阿里云安全中心提供了运行时的安全监控和防御能力。

云安全中心能够对容器应用进程与网络状况监控,对应用的异常行为或者安全漏洞进行实时检测。发现问题后,会经过邮件、短信对用户进行通知,也提供了自动化隔离与修复能力。好比咱们拿一个去年著名的挖矿蠕虫病毒为例,它会利用用户的配置错误对容器集群发动攻击。在云安全中心的帮助下,咱们能够轻松发现它的踪影并进行一键清除。

托管服务网格 ASM

image.png

今年二月,咱们发布了业内首个全托管,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 架构

image.png

首先 ACK 提供了统一集群管理能力,除了能够管理阿里云 K8s 集群以外,还能够纳管用户在 IDC 的自有 K8s 集群和其余云的 K8s 集群。利用统一的控制平面实现多个集群的统一的安全治理、可观测性、应用管理、备份恢复等能力。好比利用日志服务、托管 Prometheus 服务,能够无侵入的方式帮助用户对线上、线下集群有一个统一的可观测性大盘。利用云安全中心,AHAS 能够帮助用户在混合云的总体架构中发现并解决安全和稳定性风险。

此外 ASM 提供统一的服务治理能力,结合 CEN、SAG 提供的多地域、混合云网络能力,能够实现服务就近访问,故障转移,灰度发布等功能,支持云容灾、异地多活等应用场景,提高业务连续性。

云原生混合云解决方案

image.png

一个案例:职优你是一个电子学习职业发展平台,为来自世界多个地区的用户提供服务。它的应用部署在阿里云的 4 个不一样地域上多个 Kubernetes 集群中。这些集群经过云企业网 CEN 将多个跨地域 VPC 网络打通,并经过一个 ASM 服务网格,对多个 K8s 集群中的微服务应用进行统一的流量管理。

服务路由策略由 ASM 控制平面统一管理,并下发到多个 K8s 集群。用户请求会通过 DNS 分流到最近地域的入口网关,以后经过服务网格的就近访问能力,优先访问本地域内的服务端点。若是本地域的服务不可用,能够将请求自动转移到其余地域实现流量切换。

云原生混合云管理

阿里云的混合云解决方案有几个重要特色:

  • ACK 提供了统一的集群管理,统一的安全治理,统一的应用管理和可观测性。
  • CEN 实现了全地域网络连通,经过高速、低延时的网络互连。
  • ASM 支持统一的智能化应用流量管理,能够优化服务访问,提高业务连续性。

Windows 容器平滑上云

image.png

咱们来谈一下对 Windows 容器的支持。在现今企业中,Windows 操做系统依然占据半壁江山,其市场份额达 60% 之多。企业还有有大量的 Windows 应用,好比 ERP,CRM,ASP.Net 网站等。利用 Windows 容器和 Kubernetes,可让 .Net 应用在代码不重写的状况下实现容器化交付,充分利用云上的弹性、敏捷等能力,实现业务应用的快速迭代和伸缩。

ACK 支持 Windows 2019,在 K8s 容器集群中:

1)为 Linux 和 Windows 应用提供了一致的用户体验和统一的能力。

  • 支持 CPU、内存、存储卷等资源调度和编排
  • 支持无状态/有状态等多种不一样应用负载

2)支持 Linux 和 Windows 应用在集群中的混合部署和互连互通,好比咱们可让运行在 Linux 节点的 PHP 应用访问运行在 Windows 节点的 SQL Server 数据库。

咱们已经在支持了聚石塔电商平台和 supET 工业互联网平台支持了不少 ISV 来对 Windows 应用进行云原生化改造、升级。

阿里云容器服务的演进方向

下面咱们快速介绍一下阿里云在云原生方面的产品市场策略。咱们能够总结为三条:

新基石:容器技术是用户使用云资源的新界面,云原生技术是释放云价值的最短路径

  • 支撑全球化应用交付:经过 ACR EE,能够实现一次提交、全球发布,发布效率提高 7 倍。
  • 实现 Serverless 化应用架构:利用 ASK/Knative,让开发者聚焦业务应用,无需管理基础设施。
  • 支持混合云、多云架构:帮助企业用户平滑上云,让工做负载在不一样环境动态迁移。
  • 构建云-边-端一体的分布式云架构:将云的能力延伸到边缘和设备端,更好迎接 5G 和 AIoT 时代的创新机遇。优酷在应用边缘容器技术后,API 端到端网络延迟下降了 75%。

新算力:基于云原生的软硬一体化技术创新,提高计算效率,加速业务智能化升级

  • 容器和神龙架构相结合,性能优于物理机 20%。
  • 支持 GPU,NPU(含光芯片)等异构算力的调度和共享,能够实现利用率 2 ~ 4 倍提高。
  • 安全沙箱容器在强安全隔离的同时,实现原生进程90%性能。也推出了基于 Intel SGX 的机密计算的支持,能够为隐私和机密信息处理提供安全、可信的执行环境。

新生态:经过开放技术生态和全球合做伙伴计划,帮助更多企业分享云时代技术红利

  • 容器云应用市场:连接企业与云原生创新,已入驻 Fortinet、驻云、Intel 等多家合做伙伴,覆盖了从容器安全、监控到业务应用的不一样商品,便于用户得到完整的容器化解决方案。
  • 全球合做伙伴生态:咱们和 SAP,红帽,Rancher,Click2Cloud,BanzaiCloud等全球技术合做伙伴进行了产品能力集成。帮助企业用户在阿里云上用好云原生技术。

重磅推荐 | 2020 阿里巴巴研发效能峰会首次对外直播

6 月 12 日 - 13 日,阿里巴巴内部研发效能峰会首次对外直播!7 大论坛,35 个议题,1300 分钟技术干货分享!39 位技术大咖,4 万阿里工程师,邀你共享研发效能盛宴!

点击文末”阅读原文“当即预定直播!

相关文章
相关标签/搜索