云容器化编程- ASK & ACK
应用程式容器化的发展在2000年后已经在个别的系统上出现(例如 Sandboxie – Windows, LXC – Linux, Solaris Containers – Solaris),但要讲到容器化的发光发亮,应该就是 Docker Inc公司推出的同名产品 Docker的时候。现在比较普遍使用的容器执行个体技术中,Docker占有大多数,其他的技术如 Containerd 或 Cri-o 也开始慢慢普及。
什么是应用程式容器
作业系统层虚拟化亦称容器化,是一种将作业系统核心虚拟化的技术,允许使用者把应用程式分割成几个独立的单元,在不同的核心中运行。利用以下的图表可以更清楚的表达。
传统部署时代
早期,各个应用程式也在物理伺服器上直接执行。这种方式无法为应用程式定义资源边界,导致潜在的资源分配问题。例如,如果在物理伺服器上执行多个应用程式,可能会出现其中一个应用程式占用大部分资源的情况, 结果可能导致其他应用程式的效能下降。
虚拟化部署时代
作为解决方案,出现了虚拟化。虚拟化技术允许你在单一个物理伺服器的 CPU 上执行多台虚拟机器(VM)。每一台虚拟机器是一台完整的系统,利用虚拟化硬体资源执行所有元件,包括作业系统。
虚拟化允许应用程式在虚拟机器之间隔离,提供一定程度的安全。虚拟化技术同时能够更有效地利用物理伺服器上的硬体资源,并且因为可以轻松地新增或更新虚拟机器里的应用程式,而实现更好的可伸缩性,降低硬体成本等。
容器部署时代
容器类似于虚拟机,但是容器可以让应用程序同时使用同一个共享操作系统(OS)。容器相比虚拟机较为轻量。容器与虚拟机类似,具有自己的文件系统、CPU、内存、程序空间等。容器的部署也支持跨云或跨OS版本进行移植。
容器化的好处
容器因为具有许多优势而变得普及起来。下面列出的是容器的一些好处:
- 敏捷的应用程序建立和部署:一般容器建立不需要很长的编码,如果有合适的容器映像,只需一行的指令已经可以部署应用程序!
- 持续开发、整合和部署:由于映像的不可变性,容器支持可靠且频繁的容器映像构建和部署,并提供快速简单的复原过程。
- 跨开发、测试和生产环境的一致性:有跨云和操作系统发行版的可移植性,例如同一个容器映像可在 Ubuntu、RHEL、CoreOS、本地和任何云端上执行。
- 松散耦合、分布式、弹性、解放的微服务:应用程序被分解成较小的独立部分, 并且可以动态部署和管理。需要更新其中独立、分散的部分时,也比较传统部署容易。
- 因为资源的隔离,应用程序的效能更能预测,资源利用也可以有更高效率和高密度。
容器化的趋势
由于使用容器化有很多不同的好处,越来越多的应用程序也开始被容器化。以下的报告指出应用程序容器化的比例正持续上升。
图片来源:https://www.stackrox.com/post/2020/03/6-container-adoption-trends-of-2020/
另一方面,一些常用的技术应用程序使用容器化的比率也很高,原因是因为厂商已经预先准备好应用程序的容器,可以把部署应用架构时所需的时间大大减少。
2020 November, Datadog
为什么需要 Kubernetes?
利用容器是执行应用程序的好方式。在生产环境中,你需要管理执行应用程序的容器,并确保不会停机。 例如,其中一个容器发生故障时,需要启动另一个容器作替补。如果可以让系统来处理,会更为容易和快捷。
Kubernetes 提供以下功能:
- 服务发现和负载平衡:Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大, Kubernetes 可以负载平衡并分配网络流量,从而使部署稳定。
- 自动部署和复原:使用 Kubernetes 描述已部署容器的期望状态,再以受控的速率将实际状态更改为期望状态。例如,可以自动化 Kubernetes 来部署建立新容器, 删除现有容器并将它们的所有资源用于新容器。
- 自动完成装箱计算:Kubernetes 允许指定每个容器所需的 CPU 和内存(RAM)。 当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。
- 自我修复:Kubernetes 可以重新启动失败的容器、替换容器、删除不回复执行状况检查的容器。
阿里云的Kubernetes
阿里云的Container Service for Kubernetes (简称 ACK) 整合了阿里云虚拟化、储存、网络与安全功能,提供高效能、可伸缩的容器应用程序管理能力,支持企业级容器化应用程序的整体生命周期管理。
ACK服务分别提供专有版和托管版两个版本,使用专有版需要建立Kubernetes的Master节点和Worker节点,Master节点的作用是来管理Kubernetes的底层基础架构,Worker节点是用来执行应用容器的个体,建立Master节点需要对Kubernetes有较深入的认识。如果使用托管版,只需要建立部署应用的Worker节点,比较适合大部分的使用者。
ASK丛集是阿里云推出的无服务器Kubernetes容器服务。无需购买节点即可直接部署容器应用,也无需对丛集进行节点维护和容量规划。ASK根据应用程序配置的CPU和内存资源按使用量收费。ASK丛集提供完善的Kubernetes兼容能力,同时降低了Kubernetes的使用门坎,让使用者更专注于应用程序,而不是管理底层基础架构。
ACK与ASK丛集的对比
ASK核心优势
- 免运维:低门坎快速建立Serverless丛集,快速部署容器应用。无需管理Kubernetes节点和服务器,聚焦业务应用。
- 弹性:无需担心丛集节点的容量规划。根据应用负载,轻松灵活扩展应用程序所需的资源。
- 原生相容:支持原生Kubernetes应用和生态,包括Service、Ingress、Helm等,无缝迁移Kubernetes应用。
- 按量计费:不执行不计费,也没有资源闲置费用,同时Serverless带来更低的运维成本。
专有版Kubernetes | 托管版Kubernetes | Serverless Kubernetes | |
主要特点 | 需要自行建立Master节点及Worker节点。 | 只需建立Worker节点,Master节点由ACK建立并托管。 | 无需建立Master节点及Worker节点。 |
可以对丛集基础设施进行更多的控制,需要自行规划、维护、升级服务器群集 | 简单、低成本、高可用,无需管理Master节点。 | 无需管理任何节点,可直接启动应用程序。 | |
收费方式 | 承担Master节点、Worker节点以及其他基础架构资源的费用。 | 承担Worker节点以及其他基础架构资源的费用。 | 按容器的资源使用量和时长计费。 |
丛集建立 |
ASK应用场景
- 应用托管:ASK丛集中无需管理和维护节点,无需容量规划,降低基础架构管理和运维成本。
- 弹性业务负载:对于有着明显的波幅特征的业务负载,例如在线教育、电子商务等产业,ASK丛集的伸缩能力可以显著降低计算成本,减少闲置资源浪费,平滑应对突发流量高峰。
- 定时任务:在ASK丛集中执行定时任务,任务结束停止计费。无需维护固定资源池,避免资源闲置浪费。
ASK容器编程示范
2)选择ASK丛集,输入丛集名称,然后选择地区、规格等,再按建立丛集
3)建立丛集大概需要数分钟时间
4)在工作负载-任务,按使用镜像建立
5)输入应用名称,类型选Deployment,按下一步
6)选择镜像名称和镜像TAG
7)建立服务
8)建立完成后,按服务,可以找到负载均衡的外部IP
9)在浏览器打开负载平衡的外部IP便可以看到应用程序的响应
10)另一方面,因为ASK是利用 Serverless的关系,所以在云服务器ECS里,是不会有任何的ECS instance 资源。
容器的更新示范
以下是如何把新的镜像部署到kubernetes,可以注意镜像的版本是 nginx:1.7
1)按编辑
2)选择镜像TAG,选1.21.0,按更新
3)在容器组里,可以看到容器有序的逐步更新到指定的容器TAG版本
容器的复原示范
1)选择Deployment ,选择复原。
2)选择要复原到的版本
3)可以在容器组看到容器有序的复原到指定的版本
结语
这示范,可以看到使用容器编程可以非常快速和简单的部署应用程序镜像,而且因为容器镜像的不可变特性,在不同环境作部署或复原也可以变得快捷。加上现在使用容器编程能利用Serverless部署,进一部把使用容器化应用程序的费用和维护复杂性降低。

解决方案工程师
覃永德 Barry Chum