作者 | 陈晓宇(阿里云技术专家)

策划 | 褚杏娟

伴随着云原生的发展,从早先的单机版 Docker 到 Kubernetes 的编排领域的一统江湖,再到云上托管 Kubernetes,技术风雨变化。今天我们就沿着历史的脉络,一起看一下 Serverless Kubernetes 的发展史。

故事,从 Docker 讲起

故事虽然从 Docker 讲起,但我们不能忽视了 IaaS(Infrastructure as a Service)先辈们在前面的披荆斩棘,以及云计算大佬们很早就确定的云计算发展规划。

在十几年前,先辈们从按照用户使用(云平台提供能力)维度,将云分为三层:

  • IaaS:Infrastructure as a Service,基础设施即服务,提供虚拟机或者其他基础资源作为服务提供给用户;

  • PaaS:Platform as a Service,平台即服务,将平台作为服务提供给用户,譬如在平台中可以随用随取各种中间件服务;

  • SaaS:Software as a Service,软件即服务,将应用作为服务提供给用户,譬如邮件服务。

如下图所示,从 IaaS 到 PaaS,用户 (开发和运维) 越来越少地感知基础资源,更加关注到业务当中。

让专业的人做专业的事情,从而发挥整体的最大效率。譬如一个初创的互联网买菜公司,没有必要自己去建机房、采购硬件、配置网络存储以及安装操作系统等与业务无关的事情,而是更应该把精力放到业务的开发和运营上面。

经过十几年的发展,IaaS 已经比较成熟,各种基础资源,如 ECS、VPC、EBS 等已经深入人心,但 PaaS 的发展却非常缓慢。

早在 2008 年,Google 就推出了 App Engine 服务,想打造一个开发平台,让开发者只需要编写业务代码就可以在 App Engine 上面运行。这个思想过于超前,开发者还不能完全接受。除了公有云以外,开源社区 PaaS 平台也在左突右冲。其中,IBM 的 Cloud Foundry 和 Redhat 的 OpenShift 最为出名,他们都希望提供一个应用快速发布的平台,但也都是不温不火,反而因为各种兼容问题越来越难使用。

直到 2013 年 Docker 的诞生,一个对开发者充分友好、一个命令可以拉起一个服务,并极致简单的操作方式,让 Docker 一下成为社区最受欢迎的开源项目之一。

Docker 的优势主要体现在:Docker 镜像将应该依赖的环境和应用打包成一个压缩文件,这个文件可以在任何安装了 Docker 的机器上面直接运行,解决了应用从开发、测试到生产各个环节部署问题,并且能够保障环境的一致性。

Docker 的成功在于极致的简单操作而非技术的创新,像 cgroup、namespace 这些技术早就加入内核特性了。所以,Cloud Foundry 早先并没有把 Docker 看做竞争对手,因为这些技术早就在 Cloud Foundry 上使用了。反而,Dcoker 镜像这个无心插柳的功能,让 Docker 真正实现了 “Build once, Run anywhere”。

Kubernetes 确定江湖地位

最初的 Docker 是单机版本,面对大规模部署的场景时需要一套管理平台,就像 OpenStack 管理 VM 一样。

容器管理平台初期也是百家争鸣,譬如 Mesos、Swarm 等,但它们都没有脱离 IaaS 固有思维,还是停留在把容器当做虚拟机管理。直到 Kubernetes 的出现,才真正开始一统江湖。这里除了 Google 的背书以及脱胎于 Borg 的成熟架构以外,更重要的是 Kubernetes 在诞生之初就已经想好了容器如何管理(Replica set)以及如何对外提供服务(Service)。

其中,最令人惋惜的就是 Docker 公司自家的管理系统 Swarm。当时的 Docker 虽然已经崭露头角,但 Docker 公司本身却没有实现盈利。于是公司推出了 Swarm 企业版,虽然 Swarm 后期也引入了很多 Kubernetes 的概念,但无奈大势已去,云原生的生态已经围绕 Kubernetes 蓬勃发展。

Kubernetes 虽然由 Google 主导,但却保持了足够的开放性,将资源的管理抽象出接口规范,譬如针对容器运行时的 CRI、针对网络的 CNI、针对存储的 CSI,以及设备管理 Device Plugins 和各种准入控制、CRD 等。Kubernetes 正逐渐演变成云操作系统,各种云原生组件就是运行在这个操作系统之上的系统组件。

公有云托管 Kubernetes

虽然 Kubernetes 确定了领导地位,但 Kubernetes 的运维却并非那么容易。在这种背景下,公有云纷纷尝试推出了云上 Kubernetes 托管服务,比如阿里云在 2017 年就推出了托管 Master 的方案:ACK。

在 ACK(Alibaba Cloud Container Service for Kubernetes)中,Kubernetes 管理组件的安装和运维托管给公有云,使用 ECS 或者裸金属作为 Kubernetes 的计算节点,这样一来极大地减少了 Kubernetes 用户的使用成本。用户从云平台获取一个 kubeconfig 文件便可以直接通过 kubectl 命令行或者 Restful API 管理集群。

如果需要扩容集群容量,只需要调整 ECS 个数,新创建的 ECS 会自动注册到 Kubernetes Master。不仅如此,ACK 还支持一键升级集群版本和各种插件。ACK 将繁杂的运维工作转移到云上,并且借助云的弹性能力,能够做到分钟级别的资源扩展。

将免运维和弹性进行到底

公有云相对私有云更加关注成本,因为在私有云中,用户的基础设施成本基本是固定的,用户不可能下线一个服务后去机房停一台服务器。与之相反,公有云则提供了按量付费的模式。

如果集群里面运行任务大部分都是 long run 并且资源需求是固定的任务,使用 ACK 没有问题,但如果是大量 job 类型的任务或者存在突发流量的情况,ACK 这种临时扩容虚拟机在虚拟机上启用容器方案在弹性方面有所欠缺。

比如某在线教育公司,每天晚上 7-9 点上课高峰期会临时扩容几万个 Pod,如果使用 ACK 就需要预先评估这些 Pod 的容量,然后再折算成 ECS 的算力,提前购买对应数量的计算节点加入到 Kubernetes 里面,并且还需要在 9 点之后将这些 ECS 释放掉,操作非常繁琐。

那么,有没有一种既能兼容 Kubernetes 使用方式,又能够秒级启动 Pod,并且按照 Pod 维度计费(ACK 按照 Node 维度计费)的方案呢?

AWS 率先提出 Fargate,可以在没有真实 Node 的情况下,以 Pod 的维度加入到 Kubernetes 集群。阿里云在 2018 年也推出了类似的产品 ECI(Elastic Container Instance),每个 ECI 就是一个 Pod,这不过这个 Pod 是托管在云上的。

Kubernetes 使用 ECI 有两种方式 :一种是 ASK(Alibaba Serverless Kubernetes),另一种是 ACK + Virtual Node 的方案。在 ASK 中,计算节点完全变成了 Virtaul Node。Virtaul Node 是一个虚拟的无限容量的计算节点,负责 ECI 生命周期管理。Virtaul Node 会注册到 Kubernetes 里面,对于 Kubernetes 来说,它就是一个普通的 Node 节点。用户只需要提交原生的 Kubernetes Yaml 便可以创建出 Pod,完全兼容 Kubernetes 的使用。



Virtaul Node 还可以与普通 ACK 节点混用,用户可以将 long run 的任务调度到 ECS 节点上运行,然后利用 ECI 的快速启动(10s 内拉起容器),将突发或者短周期任务调度到 ECI 上面,从而达到成本最优。



目前 ECI 已经被很多互联网以及人工智能公司所采用。在后续的文章中,我们将逐步分享几个典型用户在迁移 ECI 过程中遇到的技术问题和挑战。

总结一下,我们今天从技术发展的角度回顾了容器和 k8s 的发展历程,可以看到公共技术正逐渐沉淀到底层,无论是 k8s 还是 ServiceMesh,都在分别尝试将服务管理和流量管理下沉到基础设施中。但这些组件本身也存在管理成本,所以演化出云上托管。未来,随着技术的下沉,云计算提供的能力将不断上移、提供更加全面和丰富能力,让开发专注在业务之上。

陈晓宇,阿里云技术专家,负责阿里云弹性容器(ECI)底层研发工作,曾出版《深入浅出 Prometheus》 和 《云计算那些事儿》。本文 from InfoQ,节选自陈晓宇的《深度揭秘阿里云 Serverless Kubernetes》系列专题。

更多内容关注 Serverless 微信公众号(ID:serverlessdevs),汇集 Serverless 技术最全内容,定期举办 Serverless 活动、直播,用户最佳实践。

深度揭秘阿里云 Serverless Kubernetes的更多相关文章

  1. 中国唯一入选 Forrester 领导者象限,阿里云 Serverless 全球领先

    3 月 26 日消息,权威咨询机构 Forrester 发布 2021 年第一季度 FaaS 平台评估报告,阿里云函数计算凭借在产品能力.安全性.战略愿景和市场规模等方面的优势脱颖而出,产品能力位列全 ...

  2. 专访阿里云 Serverless 负责人:无服务器不会让后端失业

    2012 年,云基础设施服务提供商 Iron.io 的副总裁 Ken 谈到软件开发行业的未来,首次提出了 Serverless 的概念,为云中运行的应用程序描述了一种全新的系统体系架构.此后,以 AW ...

  3. 杂项-分布式-EDAS:深度解析阿里云EDAS服务

    ylbtech-杂项-分布式-EDAS:深度解析阿里云EDAS服务 1.返回顶部 1. 深度解析阿里云EDAS服务 弹性伸缩 摘要: 第一种只适用于业务较少的情况,而在新业务不断增加的情况下,增加新应 ...

  4. 阿里云 Serverless 应用引擎(SAE)发布 v1.2.0,支持一键启停、NAS 存储、小规格实例等实用特性

    近日,阿里云 Serverless 应用引擎(SAE)发布 v1.2.0版本,新版本实现了以下新功能/新特性: 一键启停开发测试环境:企业开发测试环境一般晚上不常用,长期保有应用实例,闲置浪费很高.使 ...

  5. 阿里云Serverless应用引擎(SAE)3大核心优势全解析

    软件发展到今,企业业务系统日趋复杂,开发一个业务系统需要掌握和关注的知识点越来越多.除实现业务逻辑本身,还需考虑很多非业务的基础技术系统:如分布式cache和队列.基础服务能力集成.容量规划.弹性伸缩 ...

  6. 在阿里云托管kubernetes上利用 cert-manager 自动签发 TLS 证书[无坑版]

    前言 排错的过程是痛苦的也是有趣的. 运维乃至IT,排错能力是拉开人与人之间的重要差距. 本篇会记录我的排错之旅. 由来 现如今我司所有业务都运行在阿里云托管kubernetes环境上,因为前端需要对 ...

  7. 倒计时 | 7.24 阿里云 Serverless Developer Meetup 杭州站报名火热进行中!

    本周六阿里云 Serverless Developer Meetup 即将亮相杭州 ​ 时间:7.24 本周六 13:30 - 17:30 地点:杭州市良睦路 999 号乐佳国际 1-3-7 特洛伊星 ...

  8. 阿里云 Serverless 再升级,从体验上拉开差距

    差距都在细节上. Serverless 要成就云计算的下一个 10 年,不仅需要在技术上持续精进,也需要在产品体验上精耕细作. 近日,阿里云 Serverless 再度升级,发布了一系列围绕产品体验方 ...

  9. 揭秘阿里云WAF背后神秘的AI智能防御体系

    背景 应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入.跨站等攻击仍然占据着较前的位置.WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在,也正是这些针对W ...

  10. 阿里云容器Kubernetes监控(九) - Kubernetes事件离线工具kube-eventer正式开源

    前言 监控是保障系统稳定性的重要组成部分,在Kubernetes开源生态中,资源类的监控工具与组件百花齐放.除了社区自己孵化的metrics-server,还有从CNCF毕业的Prometheus等等 ...

随机推荐

  1. MYSQL EXPLAIN 执行计划

    EXPLAIN 执行计划 有了慢查询语句后,就要对语句进行分析.一条查询语句在经过 MySQL 查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划,这个执行计划展示了接下来具体执行查询的方 ...

  2. VScode 中利用virtualenv建立 Python 虚拟环境

    ! https://zhuanlan.zhihu.com/p/638114885 VScode 建立 Python 虚拟环境 主要目的:创建一个与默认 python 版本不同的 python 虚拟环境 ...

  3. SpringBoot实战项目:蚂蚁爱购(从零开发)

    ​ 简介 这是从零开发的SpringBoot实战项目,名字叫蚂蚁爱购. 从零开发项目,视频加文档,十天彻底掌握开发SpringBoot项目. 教程路线是:搭建环境=> 安装软件=> 创建项 ...

  4. WordPress简码实现的一些常用的效果

    首先要确保框架里已经安装好element pro插件,下面是使用简码,来实现效果,在element中找到简码,并且在WordPress后台主题编辑器中,找到function.php文件, 显示产品的分 ...

  5. ElasticSearch索引库的增删改查

    官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/indices.html 创建索引.设置分片 https://www. ...

  6. 免费背景音人声分离解决方案MVSEP-MDX23,足以和Spleeter分庭抗礼

    在音视频领域,把已经发布的混音歌曲或者音频文件逆向分离一直是世界性的课题.音波混合的物理特性导致在没有原始工程文件的情况下,将其还原和分离是一件很有难度的事情. 言及背景音人声分离技术,就不能不提Sp ...

  7. 反转数组、打印数组元素、加强(增强)for循环

    package com.guoba.array; public class Demo04 { public static void main(String[] args) { int[] arr = ...

  8. TypeScript核心基础

    前言 为了方便我们直接使用脚手架让他帮我们直接编译就完事了 创建一个 Vue 应用 前提条件 熟悉命令行 已安装 16.0 或更高版本的 Node.js npm init vue@latest 这一指 ...

  9. OpenFeign:Spring Cloud声明式服务调用组件

    OpenFeign:Spring Cloud声明式服务调用组件 问题总结 OpenFeign? Feign VS OpenFeign? OpenFeign实现远程服务调用? OpenFeign超时控制 ...

  10. Picker 选择器

    WXML 文件中 <view class="container"> <view> <text>选择器的值: {{pickerValue}}< ...