应用的云原生化迁云设计与实践

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 在帮助用户落实迁云方案之前,我们首先必须要回答至少 3 个问题:(1)ACK(阿里云容器服务Kubernetes)如何能保证用户业务的可靠性、稳定性、安全性和灵活性;(2)如何设计迁云方案把业务平滑地迁移到 ACK;(3)应用如何做进一步改造来适配 ACK 提供的更强大的扩展能力。

原文作者:流生
原文链接:https://developer.aliyun.com/article/727672

更多云原生相关资讯可关注阿里巴巴云原生技术圈

0. 前言

云原生的时代已经到来,云原生技术正在重塑整个软件生命周期,阿里巴巴是国内最早布局云原生技术的公司之一。

容器服务团队在过去的几年时间内帮助很多用户成功把业务云原生化并迁移上云,其中有现在已经是我们 TOP10 的大客户,也有需要在国内开展业务的海外用户,有些是从其他云厂商迁移过来的用户,有些是从 IDC 里迁移上云的用户,而且越来越多的用户开始咨询如何对自己的应用做云原生化改造、如何把业务平滑地迁移到云上。每个用户的业务场景都是不同的,有些差异化的业务场景对容器平台也有一些定制化的需求,我们在帮助这些用户落实迁云方案的同时也在不断思考如何把这些案例中共性的东西做一些沉淀,总结出一些优秀的解决方案、最佳实践以及开发一些工具来帮助用户快速完成迁云的这件事情。这些解决方案、最佳实践以及迁云工具就是今天这篇文章想要分享的内容。

在帮助用户落实迁云方案之前,我们首先必须要回答至少 3 个问题:(1)ACK(阿里云容器服务Kubernetes)如何能保证用户业务的可靠性、稳定性、安全性和灵活性;(2)如何设计迁云方案把业务平滑地迁移到 ACK;(3)应用如何做进一步改造来适配 ACK 提供的更强大的扩展能力。

1. ACK 如何保证用户业务的可靠性、稳定性、安全性和灵活扩展性

image.png

首先,ACK 是以阿里云可靠稳定的 IaaS 平台为底座的,有最大的弹性化与低廉成本和全球化接入的优势;其次,ACK 本身处于阿里云的安全体系架构之下并从基础设施到容器运行时环境对容器集群有全维度的安全加固;过去几年我们很好地支撑了成百上千家大小企业的业务运行,有海量用户经验总结并经过 双11 验证;除此之外。ACK 是在标准的 Kubernetes 基础上,对与用户息息相关的能力做了大幅提升,用户完全不需要担心会被某一家厂商绑定。

image.png

在我们过去帮助用户业务上云的案例中,绝大部分是自建 Kubernetes 集群迁移到 ACK 集群,与自建 Kubernetes 集群相比较,ACK 在成本、弹性、IaaS 高度融合、性能、安全加固以及实践经验等方面都有非常巨大的优势。

image.png

另外,ACK 与阿里云的所有 region 保持一致,除了国内多个区域开服外,在东南亚、中东、欧洲、美东美西都有开服,完全可以满足用户开展全球业务的需求。

2. 整体迁云方案设计

用户业务整体迁云的方案设计会涉及到集群规划、数据搬迁、监控切换、日志切换以及最终的生产流量切换或并网操作。

image.png

迁云到 ACK 需要做涉及到哪些组件、搬迁哪些数据、切换哪些服务等,都是需要需要在迁移上云之前设计好的。
首先需要做集群规划,用户需要根据自己业务场景的不同来选择不同的机器类型,比如 CPU 机器还是 GPU 机器,比如虚拟服务器 ECS 还是神龙裸金属服务器等等,网络规划这部分会涉及到容器集群基础设施选择 vpc 内网网络还是经典网络,集群内 pod 之间进行通信模式是 flannel 模式还是 terway 模式等,在容量规划这部分,用户可以根据自己的成本以及预算规划一个可满足初期业务正常运行的容量即可,随后可以配置动态扩缩容随时弹缩集群规模;在安全防护提升这部分,有基础架构安全比如设置合理的安全组规则,有镜像安全比如使用私有镜像并定义镜像安全扫描,K8s 应用安全管理比如设置不同服务间互相访问的网络安全策略等;监控切换这部分相对于用户自建 Kubernetes 会更加全维度和立体,从基础设施到容器运行时监控一应俱全,并可根据阈值设定触发报警通知;用户一般也会把自建的日志收集方案切换成阿里云上企业级的日志产品 SLS;数据迁移是非常重要的一部分,这些数据包括数据库数据、存储数据、容器镜像等,我们会对接阿里云上企业级的粗出产品以及迁移工具,目的是为了保证数据迁云的可靠性、安全性;应用改造主要涉及的内容包括镜像地址的更新、服务暴露方式的优化以及存储盘挂载方式的更新适配;最后提供一个满足用户快速迭代上线产品的 CICD 方案。以上各个组件调试完毕后,我们就可以进行一部分生产流量的切换。
以上从集群规划到生产流量切换便是用户业务迁移上云所需要涉及到的方方面面。

image.png

我们提供了一个企业容器化生命周期模型,这个模型是根据时间阶段和用户侧各个业务角色来划分的,比如业务架构师角色需要关心的是业务上云能给公司带来什么价值,在 TCO 和场景上会带来哪些优化,云平台在安全性以及计算、存储、网络能力上是否能满足当前业务需求;IT 架构师负责规划当前业务需要的集群容量和规模以及网络选型等问题,剩下的就是系统管理员与应用管理员把迁云方案的各个细节落实下来。这个模型的主要核心关注点是让用户的业务上云后能更稳定、成本更低、效率更高。

image.png

全栈迁云架构思路分两种,一种是整体迁移,一种是平滑迁移。整体迁移是指用户应用全部迁移上云后,各个组件调试完毕、测试验收通过后,可以整体切换生产流量到线上集群,待线上集群上的业务稳定运行一段时间后再下线原有环境。平滑迁移是指用户可以使用线上 ACK 集群纳管线下节点,或者线上集群与线下集群混合组网对外提供服务,逐步改造业务组件上云后将原有环境下线。这两种方式相比,整体迁移更简单,平滑迁移响度复杂但对业务影响小,所以也需要根据用户的实际场景做选择。

image.png

容器化整体迁云这部分还有两个小场景,一个是用户从自建 Kubernetes 集群迁移到 ACK,此场景下用户的应用已经做了很大一部分的云原生化改造,迁移工作相对来说会简单些,还有一部分用户的应用是传统应用,直接运行在虚拟机或者裸金属服务器上,没有做过任何云原生化的改造,对于这部分场景,我们也提供了相关工具或方案帮助用户进行云原生化的迁云改造,比如使用 derrick 项目可以自动检测源码项目类型并生成 Dockerfile 和用于应用部署编排的 yaml 文件,比如我们正在联合 ECS SMC(迁云中心)开发的虚拟机转换容器镜像并运行在 ACK 集群中的能力。

image.png

为了帮助用户提高迁云的效率,我们也在持续积累和开源一些迁云工具。比 ack-image-builder 为用户提供创建 ACK 集群节点自定义镜像的模板并通过校验模块检查自定义镜像是否满足 ACK 集群要求;sync-repo 能够帮助用户快速完成容器镜像批量迁移至 ACR(容器镜像仓库服务); velero 能够帮助用户快速把其他云厂商后者自建 Kubernetes 集群下的完整应用迁移至 ACK 集群。

Velero 迁移 Kubernetes 应用到 ACK 视频 DEMO

image.png

在数据搬迁部分,可靠迁移是关键,根据用户数据类型的不同,我们会使用与之匹配的企业级迁移工具,比如数据在线迁移服务 DOMS,比如 OSS 的迁移工具,还有离线海量数据迁移方案闪电立方等。

image.png

数据、应用迁云完成后,需要进一步适配监控、日志等组件,待各个组件调试完毕通过验收后,可以使用智能 DNS 进行生产流量的切割。

3. 应用改造和优化

image.png
image.png

对于应用改造和优化这部分,K8s 到 K8s 的场景下,需要优化的是去适配自动扩容等自建 K8s 不具备的那些能力,在传统应用迁移到 ACK 的场景下,这部分的工作量会更大些,所以我们针对这个场景也输出了一些方案,比如类似于异地多活的方案,我们把用户传统应用环境,通常是虚拟机或者裸机环境集成到线上 ACK 部署的 Istio 网格中,逐步改造应用直至业务全部切换到线上 ACK 集群。

image.png

在应用逐步改造的这个过程中,会涉及到应用如何容器化、网络环境如何迁移以及数据迁移的问题,应用容器化这个问题,我们可以使用前面我提到过的一个服务叫做 SMC 迁云中心来完成虚拟机转换为容器镜像的过程,网络这部分可以通过 iptables,External,CoreDNS PrivateZone 等方式对 IP 地址 DNS 域名做处理,保持原先的逻辑IP和域名不变,并通过 Istio 实现网络虚拟路由和可观测性的管理。

4. 案例和总结

image.png

最后列举的是部分迁云案例,其中有对高性能网络有特殊需求的用户,有做深度学习相关业务对大规模 GPU 机器有需求的用户,也有要求裸金属机型服务器的用户等等。

以上这些不同用户的不同业务场景在云原生化迁云方案的设计和落实上都有各自的差异性,不尽相同,需要结合 ACK 团队沉淀下来的最佳实践来快速做出评估和计划,并借助已有的一系列迁云工具快速完成业务从线下迁移上云的过程。

5. 其他

Velero 迁移 Kubernetes 应用到 ACK 视频 DEMO

ack-image-builder

sync-repo 能够帮助用户快速完成容器镜像批量迁移至 ACR(容器镜像仓库服务)

velero 能够帮助用户快速把其他云厂商后者自建 Kubernetes 集群下的完整应用迁移至 ACK 集群。

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4天前
|
Cloud Native 安全 持续交付
云原生技术在现代企业中的应用与挑战
本文探讨了云原生技术的基本概念、主要特点以及其在现代企业中的应用和面临的挑战。通过分析云原生技术如何提高应用的灵活性、可扩展性和开发效率,揭示了其对企业数字化转型的重要性。同时,文章也讨论了企业在采用云原生技术时需要克服的技术难点和文化转变问题。
|
5天前
|
Kubernetes Cloud Native 开发者
云原生技术:打造弹性、可扩展的现代应用
【9月更文挑战第13天】在这篇文章中,我们将探索云原生技术的核心概念及其对现代软件开发的意义。通过实际代码示例,我们会深入理解如何构建和部署在云端的应用,确保它们能够自动扩展、自我修复,并在全球任何地方无缝运行。文章将揭示云原生技术如何赋能开发者和组织,以应对不断变化的市场需求。
|
1天前
|
Kubernetes Cloud Native Linux
云原生入门:Kubernetes的简易部署与应用
【8月更文挑战第49天】在云原生的世界里,Kubernetes(K8s)是一颗璀璨的星。本文将带你走进K8s的世界,从安装到简单应用,轻松驾驭这个强大的容器编排工具。让我们一起探索云原生的奥秘,解锁新技能!
|
1天前
|
运维 Cloud Native Devops
探索云原生技术:构建现代应用的全新方式
本文将深入探讨云原生技术的核心理念和实际应用,揭示其在现代应用开发和部署中的重要性。我们将从云原生的定义开始,逐步解析其关键技术如容器化、微服务、DevOps等,并通过具体案例展示这些技术如何帮助企业实现高效、灵活和可扩展的应用架构。无论是开发者、运维人员还是企业决策者,本文都将为您提供有价值的见解和实用的建议。
|
4天前
|
Cloud Native Devops 持续交付
云原生技术:构建现代应用的新范式
本文深入探讨了云原生技术的核心理念、关键技术和应用实践。首先,文章阐述了云原生的定义和特点,强调其利用云计算优势来构建和运行可扩展应用的能力。接着,详细介绍了容器化、微服务架构、DevOps实践等关键技术,并通过具体案例展示了这些技术在实际应用中的效果。最后,讨论了云原生技术的发展趋势和未来前景。本文旨在为读者提供关于云原生技术的全面理解,帮助其在数字化转型过程中做出明智的决策。
|
4天前
|
运维 Cloud Native 持续交付
云原生技术:构建弹性、高效和可扩展的现代应用
在当今数字化浪潮中,企业面临着日益复杂的技术和业务需求。传统的单体架构已经难以适应快速变化的市场需求,而云原生技术正以其独特的优势成为现代企业构建弹性、高效和可扩展应用的首选。本文将深入探讨云原生技术的基本原理、核心组件及其在实际应用中的案例,揭示其如何帮助企业实现数字化转型和业务创新。
18 3
|
6天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
16 3
|
5天前
|
Cloud Native Devops 云计算
云原生技术:构建现代应用的新范式
在当今数字化时代,企业面临着日益复杂的业务需求和不断变化的市场环境。为了保持竞争力,企业需要快速、高效地构建和部署应用程序。本文将探讨一种新兴的软件开发架构——云原生技术,它能够帮助企业实现这一目标。通过采用微服务、容器化、DevOps等理念和技术,云原生架构为企业提供了一种灵活、可扩展且易于管理的方式来构建、部署和运行应用程序。本文将从云原生技术的基本概念入手,深入探讨其核心组件以及如何利用这些组件构建现代化的应用架构。
|
5天前
|
运维 Kubernetes Cloud Native
云原生技术在现代软件开发中的应用与挑战
本文探讨了云原生技术在现代软件开发中的重要性,包括其定义、核心原则以及在实际应用中的优势与挑战。通过具体案例分析,展示了云原生技术如何帮助企业实现高效、灵活和可扩展的软件解决方案。同时,也指出了在实践中面临的常见问题及应对策略。
18 1
|
6天前
|
Cloud Native 持续交付 开发者
云原生技术在现代应用开发中的角色与实践
【9月更文挑战第12天】本文将探索云原生技术的核心概念及其在现代软件开发中的应用。通过分析容器化、微服务架构、持续集成/持续部署(CI/CD)和DevOps文化的融合,我们旨在揭示如何利用这些技术提升软件的可靠性、可扩展性和交付速度。同时,文章还将展示一个简化的代码示例,以直观地说明云原生技术的实际应用。