云原生应用PaaS平台建设实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 蚂蚁金服数字课堂直播间
云原生应用PaaS平台建设实践
俞仁杰
SOFAStack 产品专家
www.aliyun.com/product/sofa
www.sofastack.tech
2. 云原生是业务快速变化背景下的必然技术趋势
从疑惑到成熟:云计算领域技术趋于成熟,市场空间、社区关注度提高
从稳态到敏态:业务亟待敏捷变革,需求趋于多样性,业务发展急需技术支撑
•
•
“云机房”Cloud-Based
外包托管机房
传统应用虚拟化
应用无状态化
运维自动化
服务规模化
•
•
“云就绪”Cloud-Ready
分布式去中心化部署
运维管控统一托管在PaaS层
容器化
微服务化
无服务器化
架构敏捷和运维精益的极致
开发测试运维体系融合
业务应用
业务应用
业务应用
•
•
“云原生” Cloud-Native
基础架构能力抽象&标准化
关注重心上移
中间件
中间件 & 平台服务PaaS 中间件 & 平台服务PaaS/CaaS
基础设施服务 IaaS 基础设施服务 IaaS 基础设施 IaaS
底层硬件 底层硬件 底层硬件
关注重心上移
3. 云原生容器技术的所带来的
是一种应用交付模式的变革
4. 所以今天关于云原生落地实践的分享将包括
•
•
•
•
•
•
•
•
Docker/K8S发展简史
DevOps CI/CD流程设计
容器网络规划方案
Dockerfile最佳实践
分布式存储对接
RBAC权限管控
日志监控对接优化
…
5. 所以今天关于云原生落地实践的分享将包括
•
•
•
•
•
•
•
•
Docker/K8S发展简史
DevOps CI/CD流程设计
容器网络规划方案
Dockerfile最佳实践
分布式存储对接
RBAC权限管控
日志监控对接优化
…
吗?
6. 一个Kubernetes平台
应用PaaS平台
K8S及其生态已经成为了各组件选型的事实标准
但还不够
7. 金融场景需要“稳妥创新”:
生产环境落地云原生需要着重考虑哪些挑战?
•成本:业务采用了云原生架构能否节省资源,提升工程效率?
风险:发现问题后如何做到快速止损,甚至线上零故障?
演进:能否和现有业务能无缝集成,如何做平滑升级?
…
容灾:如何做到业务跨机房地域多活的高可用容灾能力?
安全:采用了云原生平台能否保证和现有架构一致的安全性?
规模:云原生能否支撑大规模分布式系统的架构?
8. 本次分享核心内容:K8S体系下的应用变更与发布管控
风险:发现问题后如何做到快速止损,甚至线上零故障?
• 需求背景:变更“三板斧”
• Kubernetes 原生发布能力:Deployment / ReplicaSet
• 具备高阶发布策略的关键CRD扩展:CAFEDeployment
• Live Demo
• 更多能力介绍与发展规划
9. 需求背景:变更“三板斧”
技术风险保障基本要求 产品实现思路
可灰度: 分组灰度发布:
• 应用发布进程可控,允许灰度、分组和精细化验证 • 感知底层拓扑,按机房/部署单元进行发布
• 分批次发布、暂停、验证
可应急:
• 随时暂停、回滚,任何变更有据可查
• 跨可用区部署,保证双活和故障切换
可监控:
• 接入监控告警体系,全程保证可观测性
无损发布:
• 摘流保障和优雅下线
• 原地注入/平滑升级
过程追溯:
• 多应用有序发布
• 发布单变更追溯
10. Kubernetes 原生发布能力
•
•
•
•
Deployment 声明Pod模版和发布方式
ReplicaSet管理Pod数量
重建发布:先删干净,从头开始
滚动发布策略,根据步长,创建新Pod,销毁旧Pod
11. CafeDeployment:感知底层拓扑
Cluster View
Application View
CafeDeployment
CafeDeployment
Cell B
Cell A
InPlaceSet
Pod
Pod
Data Center A
InPlaceSet
Pod
Pod
Pod
Pod
Node
Node
Node
datacenter=dc-a
Data Center B
Node
Node
Node
datacenter=dc-b
• 提供跨部署单元的发布管理功能,声明最终Pod按底层拓扑需求作发布
• 使Pod均匀发布到各机房,也可按需求指定
• 部署单元是逻辑概念,通常可与以下节点拓扑属性映射:
可用区(AZ)
同城独立物理机房(DataCenter)
具备一定风火水电隔离能力的机架(Rack)
其他指定属性
…
kind: CafeDeployment
spec:
podSetType: InPlaceSet
replicas: 10
strategy:
upgradeType: Beta
batchSize: 4
needWaitingForConfirm: true
topology:
autoReschedule:
enable: true
# 是否启动Pod自动重调度
initialDelaySeconds: 10
unitType: Cell
# 部署单元类型:Cell,Zone,None
unitReplicas:
CellA: 4
# 固定某部署单元的Pod数目
values: # 部署单元
- CellA
- CellB
12. CafeDeployment:精细化分组发布扩容
关键特性:
CafeDeployment
• 精准分组,自定义拓扑
• 分组暂停,充分线上验证
• 按需回滚,及时降低变更风险
InPlaceSetController
以分三组为例,尽量让应用在每一组
都平均分布在每个部署单元
beta分组:
每个部署单元发布变更一个Pod,作
最小可用验证
Replica/Partition Allocator
InPlaceSet A
InPlaceSet B
Pod A-1 Pod B-1
Pod A-2 Pod B-2
Beta Group
1 st Group
Pod A-3 Pod B-3
Pod A-4 Pod B-4
2 nd Group
Pod A-5
Pod B-5
Pod
Upgrade
Pod
Provision
……
kind: CafeDeployment
spec:
podSetType: InPlaceSet
replicas: 10
strategy:
upgradeType: Beta
batchSize: 4
needWaitingForConfirm: true
topology:
- CellA
- CellB
可用区B
可用区A
分组发布策略:
13. CafeDeployment:优雅摘流无损发布
InPlaceSet
Controller
变更过程中:
• 由PaaS定义标准发布控制流程规范
• 配合外围网络组件进行流量切换&恢复检查
• 通过ReadinessGate 控制Pod上下线
Pod
添加Pod IP
添加finalizer
更新
删除Pod ip
注销 Pod IP
摘除 finalizer
等待3s
Service LB
Ingress
DNS
…
Other protection
Controllers
注册Pod IP
添加finalizer
发布完成
RPC
Mesh Sidecar
…
外部流量:
LoadBalancer
Controller
创建
ReadinessGate=true
ReadinessGate=false
内部流量:
Service/Endpoint
Controller
注销 Pod IP
摘除 finalizer
处理剩余请求
执行升级
升级完成
ReadinessGate=true
添加Pod IP
发布完成
注册 Pod IP
添加finalizer
注册 Pod IP
添加finalizer
14. Demo:一次典型的分组发布过程
• 阿里云 SOFAStack 控制台
应用服务配置 (复杂但强大的发布控制)
发布单管理 (追溯发布过程)
• CLI Console (略微硬核)
kubectl get pod -o custom-columns (监听Pod元数据信息而已)
kubectl get cafedeployment (查看前面介绍的cafed)
kubectl edit cafedeployment(分组暂停 – 确认 – 继续发布)
15. 开源版本介绍:OpenKruise - UnitedDeployment
• Kruise 项目源自于阿里巴巴经济体应用过去多年的大规模应用部署、
发布与管理的最佳实践
• 解决 Kubernetes之上应用的自动化,包括,部署,升级,弹性扩缩
容,Qos调节,健康检查,迁移修复等等
https://github.com/openkruise/kruise
• 一套增强版controller组件用于应用的部署和级和运维:
Advanced StatefulSet
Broadcast Job
SidecarSet
CloneSet
UnitedDeployment
• UnitedDeployment 核心贡献者吴珂来自SOFAStack团队,主导
CafeDeployment的设计和开发
• 正在努力减少商业版与社区版的差异,两者将趋于统一
16. Release Pipeline:通过工作流引擎对K8S变更操作卡点和干预
Monitor
前置参数检查
故障/变更前置冲突规避
基于算法与规则匹配的后置业务检查
场景案例:
前置风险:
高峰期自动规避
后置风险:
变更后业务下跌
调度层工作异常导致实际变更失败
Start
precheck
App check
Biz check
Rules check
…
Conflict check
Disaster check
POD
POD
PODs
pre
changing
POD
POD
PODs
post
变更防控
变更推进
17. 主流分布式云平台终将向云原生架构演进
经典运维体系
基于虚拟机的
微服务应用
存量应用与
新架构混合部署
规模化的
容器部署
云原生
应用架构
18. 实践参考:网商银行容器应用交付演进路线
经典运维体系
2014-2017
流水线交付物
应用程序包
经典PaaS 运维平台
虚拟机实例
技术栈脚本 / 运维管道
PaaS产品
• 上层交付运维体系保持不变
过渡期
• 应用与基础资源池解耦
2018
• 基础设施迈向K8S容器调度平台 云原生架构
2019-2020
应用程序包 容器
镜像
经典
运维体系
+
云原生
基础设施
业务应用
经典PaaS 运维平台
Kubernetes 容器引擎 AKE
Docker VM
技术栈镜像
虚拟机实例
技术栈脚本 / 运维管道
VM …
Docker VM
技术栈镜像
容器 Pod
…
弹性基础设施
虚拟化IaaS
物理机
云原生
运维体系
+
云原生
基础设施
• 云原生敏捷应用交付
• 极致弹性充分利用计算资源
• 拥抱生态享受技术红利
代码
函数
应用
程序包
Kubernetes 容器运维平台
容器组Pod
容器组Pod
应用镜像
MOSN
xflush
应用镜像
MOSN
xflush
单元化联邦集群管控
Service Mesh
Serverless
安全容器运行时
物理机 / 虚拟机
19. 双模PaaS:满足 PaaS 层平滑演进需求
传统兼容
应用
应用交付
Deliverable
双模PaaS
Application platform
弹性计算
Elastic Compute
基础设施
Infrastructure
统一集群管理
函数
前沿创新业务
原型实验系统
面向应用的交互模式
(双模交付)
应用包Buildpack
创新效率
Java Functions
(SOFA Ark Modules)
互联网应用
敏捷响应市场
容器镜像 Image
统一元数据
金融核心系统
传统架构资产
统一联邦发布能力
Python
Snippets
统一监控能力
Nodejs
Functions
统一运维能力
安全容器 Secure Container
虚拟机 Virtual Machine
弹性机房(计算、存储、网络)
20. SOFAStack 云原生单元化异地多活弹性架构
CDN & Global DNS
负载均衡 负载均衡
RZ00 UID: 00-15, 20-49 RZ01 UID: 50-65, 70-99
公共云/行业云
专有云
负载均衡
数据平面
RZ00A
A
RZ00B
B
中间件
安全容器
运行时
CZ00A
A
RZ01A
B
中间件
A
B
RZ01B
中间件
CZ00
C1
CZ00B
RZone
A
GZ00B
GZ00
RZ82B
A
CZ90A
CZone
B
中间件
C1
中间件
CZ90
C2
G1
中间件
中间件
G2
B
中间件
C2
G1
G2
GZone
Federated ApiServer with Operators
(跨集群资源管理,灰度/蓝绿发布,流量调拨,容灾切换/恢复,弹性建站/下站 …)
管控平面
Kubernetes Apiserver + SOFA CAFE
Extensions
Kubernetes Apiserver + SOFA CAFE
Extensions
基础设施
统一代码管理
统一研发流程
Kubernetes Apiserver + SOFA CAFE
Extensions
专线通道
Bare Metal
统一研发效能与技术风险
RZ82A
中间件
中间件
C2
集群联邦
管控
B
C1
中间件
GZ00A
A
RZ90 EUID: 16-19, 66-69
统一变更管控
统一监控分析
统一系统自愈
基础设施
统一应用巡检
…
21. Cloud Application Fabric Engine
云应用引擎
SOFAStack CAFE
SOFAStack CAFE 产品层
应用发布管控
经典应用服务
Serverless
应用服务
容器应用服务
研发效能
流水线对接
环境资源管理
Pod伸缩管理
容器镜像管理
容
器
层
业务实时监控
容灾服务
流程编排
权限认证
技术风险
平台对接
日志分析
OpenAPI
事件审计中心
安全容器
服务目录
蓝绿发布 灰度分组发布 中间件变配
(DRM/Scheduler/Message)
弹性建站/下站 容器腾挪/迁移 容灾切换和恢复
基础发布运维
批次发布
单元化混合云
PaaS基础核心服务
应用管理
核心
流程
监控分析平台
自动化运维
Mesh流调拨和治理
应急预案管理
…
跨集群管理
单元化能力
原生资源管理 变更管控 接入层流量调拨 应用层流量调拨 跨集群资源管理 跨集群状态
分发/汇聚
集群伸缩管理 配额管理 数据层流量调拨 压测/灰度
流量管理 跨集群发布策略 跨集群网络
运维原子操作 精细化调度 单元化
元数据管理 弹性流量管理 多集群管理 跨集群镜像管理
K8S API Server
容器运行时
(Docker/Pouch/安全容器)
CNI Plugins
(VLAN/VXLAN/VPC Router/ENI)
CAFE API Server Aggregation Layer
CSI Plugins
(NAS/OSS/Cloud Disk/Ceph)
网络接入
(SLB/ALB)
22. 阿里云 SOFAStack 金融分布式架构 已商业化发布
分布式金融核心套件
SOFAStack™(Scalable Open Financial Architecture Stack)
是构建金融级云原生架构的应用平台,提供“端到端”金融级能力
分布式平台
敏捷研发
分布式组件
研发效能
DevOps 消息队列 分布式事务
LinkE MQ DTX
任务调度 API 网关
TS GW
项目协作
代码托管
持续交付
容灾保障
数据
数据同步服务
中间件
DSS
分布式
数据库
数据访问代理 高阶运维保障 SRE
DBP CAFE + TraaS
分布式关系型数据库
OceanBase
微服务核心
微服务
中间件
微服务平台 服务网格
MS CloudMesh
监控
高可用应急
HA 容灾服务
Recovery
资金安全监控
CLRISK 流程编排
StepFlow
全链路压测
LOAD 单元化混合云
LHC
分布式链路跟踪
DST
测试平台
应用PaaS
CAFE
经典应用 容器应用 无服务器应用
CAS AKS SAS
Kubernetes 核心引擎
业务实时监控
RMS
https://www.aliyun.com/product/sofa
https://sofa.console.aliyun.com
23. 回顾与展望:打造具备技术风险保障能力的金融级PaaS
风险:发现问题后如何做到快速止损,甚至线上零故障?
应用变更与发布管控:“三板斧”、”发布策略”、“无损发布”
Cloud Application
Fabric Engine
演进:能否和现有业务能无缝集成,如何做平滑升级?
经典到云原生的过渡能力
容灾:如何做到业务跨机房地域多活的高可用容灾能力?
联邦管控、双活容灾方案与单元化异地多活弹性架构
24. THANKS!