故事,从 Docker 讲起 | 深度揭秘阿里云 Serverless Kubernetes(1)

本文涉及的产品
简介: 伴随着云原生的发展,从早先的单机版 Docker 到 Kubernetes 的编排领域的一统江湖,再到云上托管 Kubernetes,技术风雨变化。

文丨 陈晓宇,阿里云技术专家


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

故事,从 Docker 讲起

 

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

 

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

 

  • 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(Alibaba Cloud Container Service for Kubernetes)。

 

在 ACK 中,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,都在分别尝试将服务管理和流量管理下沉到基础设施中。但这些组件本身也存在管理成本,所以演化出云上托管。未来,随着技术的下沉,云计算提供的能力将不断上移、提供更加全面和丰富能力,让开发专注在业务之上。

 

本文节选自阿里云技术专家陈晓宇的《深度揭秘阿里云 Serverless Kubernetes》系列专题。本专栏将主要围绕如何在 Serverless Kubernetes 场景中实现秒级扩容,以及在大规模并发启动中遇到的各种技术挑战、难点以及解决方案,系统地揭秘阿里云 Serverless Kubernetes 的发展、架构以及核心技术。

 

作者简介:

 

陈晓宇,阿里云技术专家,负责阿里云弹性容器(ECI)底层研发工作,曾出版《深入浅出 Prometheus》 和 《云计算那些事儿》。


(文章转自InfoQ平台,点击这里获取:原文链接

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
29天前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
29天前
|
运维 Kubernetes 监控
构建高效自动化运维体系:基于Docker和Kubernetes的实践指南
【2月更文挑战第30天】 在当今快速发展的云计算时代,传统的IT运维模式已难以满足业务的敏捷性和稳定性需求。本文深入探讨了如何通过Docker容器化技术和Kubernetes集群管理工具构建一个高效、可靠的自动化运维体系。文章首先概述了容器化技术和微服务架构的基本概念,随后详细阐述了基于Docker的应用打包、部署流程,以及Kubernetes在自动化部署、扩展和管理容器化应用中的关键作用。最后,文中通过案例分析,展示了如何在实际场景中利用这些技术优化运维流程,提高系统的整体效率和可靠性。
|
2天前
|
消息中间件 运维 Serverless
阿里云函数计算是一种FaaS(Function as a Service)云服务
【4月更文挑战第17天】阿里云函数计算是一种FaaS(Function as a Service)云服务
12 3
|
3天前
|
自然语言处理 Cloud Native Serverless
通义灵码牵手阿里云函数计算 FC ,打造智能编码新体验
近日,通义灵码正式进驻函数计算 FC WebIDE,让使用函数计算产品的开发者在其熟悉的云端集成开发环境中,无需再次登录即可使用通义灵码的智能编程能力,实现开发效率与代码质量的双重提升。
|
3天前
|
人工智能 Serverless 数据处理
利用阿里云函数计算实现 Serverless 架构的应用
阿里云函数计算是事件驱动的Serverless服务,免服务器管理,自动扩展资源。它降低了基础设施成本,提高了开发效率,支持Web应用、数据处理、AI和定时任务等多种场景。通过实例展示了如何用Python实现图片压缩应用,通过OSS触发函数自动执行。阿里云函数计算在云计算时代助力企业实现快速迭代和高效运营。
3 0
|
8天前
|
存储 安全 Serverless
用 Github Actions 自动部署阿里云函数计算 FC
介绍了如何配置阿里云函数计算(FC)与GitHub Actions集成以实现自动部署。首先在阿里云创建函数,然后在项目根目录创建`s.yaml`文件配置Serverless Devs。接着在GitHub仓库中设置 Secrets 存储阿里云账号信息,并创建名为`aliyun-fc-deploy.yaml`的工作流文件来定义GitHub Actions。当代码推送到`master`分支时,Actions会自动部署到函数计算。最后,成功配置后,提交代码会触发自动部署,并可在GitHub Actions和阿里云控制台查看部署状态。
311 1
|
12天前
|
弹性计算 前端开发 Java
使用阿里云 mqtt serverless 版本超低成本快速实现 webscoket 长链接服务器
使用阿里云 MQTT Serverless 可轻松实现弹性伸缩的 WebSocket 服务,每日成本低至几元。适用于小程序消息推送的 MQTT P2P 模式。前端需注意安全,避免 AK 泄露,采用一机一密方案。后端通过调用 `RegisterDeviceCredential` API 发送消息。示例代码包括 JavaScript 前端连接和 Java 后端发送。
103 0
|
18天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
14 0
|
18天前
|
消息中间件 NoSQL Kafka
云原生最佳实践系列 5:基于函数计算 FC 实现阿里云 Kafka 消息内容控制 MongoDB DML 操作
该方案描述了一个大数据ETL流程,其中阿里云Kafka消息根据内容触发函数计算(FC)函数,执行针对MongoDB的增、删、改操作。
|
20天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于Docker和Kubernetes的最佳实践
在现代云计算环境中,自动化运维成为保障系统稳定性与提升效率的关键。本文深入探讨了如何利用Docker容器化技术和Kubernetes容器编排工具构建一个高效、可靠的自动化运维体系。文中不仅介绍了相关的技术原理,还结合具体案例分析了实施过程中的常见问题及解决方案,为读者提供了一套行之有效的最佳实践指南。

相关产品

  • 函数计算