吴小伟-Kubernetes 管理复杂异构应用在端点Dice平台中的实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. Kubernetes 管理理复杂异构应用用在端点 Dice 平台中的实践
吴小小伟(一一啸)
2. 公司介绍
端点 新商业软件提供商
3. 企业应用用架构的复杂性
销售系统 数据库
供应链系统 缓存
办公系统 中间件
生生产管理理系统 搜索 (ElasticSearch)
会员管理理系统 实时计算 (Spark/Flink)
实时数据大大屏 数据同步 (全量量/增量量)
数据平台 ⻓长时服务
短时任务
4. 企业应用用的研发痛点
业务复杂,甚至至历史业务系统需要梳理理
需求多变,客户自自己己可能都不不完全清楚需要什什么
基础软件运维复杂、时间成本高高
系统上线后,稳定性差,问题难排查
5. 一一个高高效的平台,将助力力力
一一个 Application PaaS
企业数字化应用用的研发
6. 系统架构
Web UI、CLI、OpenAPI、WebHook
容器器管理理 代码托管 CMDB 数据平台 日日志服务 AddOn 平台 监控平台
集群管理理 应用用管理理 多租户 项目目管理理 中间件 云产品集成 marketplace
平台核心心能力力力
CI/CD
大大数据
Ops
流水水线
异构调度引擎
dcos
kubernetes
Spark
阿里里里云 / AWS / Azure / 专有云
Flink
Edas
7. 为什什么需要引入入异构调度
一一个 Application PaaS
引擎这一一层架构设计?
8. 异构调度引擎重点解决的两大大核心心问题
屏蔽底层的具体物理理集群
实现以应用用为中心心的部署定义
9. 异构调度引擎实现了了对底层集群的屏蔽和抽象
屏蔽底层集群:DC/OS、
Kubernetes、edas、spark、flink
支支持多集群调度,比比如:开发测
试集群,生生产集群
10. 异构调度引擎定义了了以应用用为中心心的自自动化部署
立立足足开发者,而而不不是运维
以为应用用为中心心,而而不不是基础设施
实现真正的 DevOps
11. 首首先,看看 Kubernetes 部署一一个简单的 Web 应用用
ingress
deployment
service
endpoint
request / limit
Statefulset
Operator
PV / PVC
12. Kubernetes 的例例子子
F deployment.yaml
F ingress.yaml
B deployment.yaml
太复杂
B service.yaml
MySQL master statefulset.yaml MySQL slave statefulset.yaml
MySQL master service.yaml MySQL slave service.yaml
13. 我们认为应用用部署应该的样子子
需要多少 CPU
需要多少 内存
服务依赖关系
对外公开访问
需要一一个数据库 MySQL
服务要部署几几个实例例
14. 用用代码定义一一个应用用的部署
15. 遵循设计理理念: Infrastructure as code
用用代码的方方式明确定义应用用的基础设施和架构,这样做的好处是研发可控、持续沉淀、
可复制迁移
CPU
内存
服务依赖
环境变量量
基础软件服务,包括数据库,缓存,中间件,云服务等
等等
16. 无无状态服务
有状态服务
短时任务
成本管理理
目目录
17. 无无状态服务
如图,部署 MySQL -> 后端服务 B -> 前端
服务 F -> 对外公开访问
deployment
MySQL 访问信息通过环境变量量配置给服务
B;服务 B 的访问地址通过环境变量量配置给
服务 F。
无无状态服务,直接采用用 kuberntes
deployment + service 部署
容器器技术天生生就对无无状态应用用部署友好,
出生生的一一天就是为无无状态而而生生的
deployment
18. 无无状态服务
有状态服务
短时任务
成本管理理
目目录
19. 有状态服务:基于 StatefulSet 管理理(old)
在异构调度引擎里里里,我们基于 StatefulSet 去实现
了了每一一款有状态服务的部署,直接将自自动化部署
逻辑内置到了了调度引擎里里里。
问题:
1、数据库和中间件这类有状态服务实在太多了了,
即使是常用用的,也非非常不不少。
2、有状态服务的架构,部署方方式完全没有一一个通
用用的解决方方案
20. 有状态服务:基于 Operator 管理理(new)
Operator 让我们有机会去定制化的、针对性的管理理有状态服务
社区的基础软件,已经开始出现大大量量的 Operator 可供使用用;开源共享共建是基础软
件的趋势,没必要自自己己从 0 开发
使用用社区、回馈社区、共建社区,然后再做一一些集成创新
21. 有状态服务:我们使用用的 Operator
我们的对接层调度器器,逻辑可以设计得更更简单了了,只
需要通过 kubernetes api 去操作对应的 operator 即
可
每一一个有状态服务的运维管理理逻辑都可以独立立维护
22. 有状态服务:存储管理理
存储计算分离的架构实在太好了了
作为小小公司,小小团队,我们是否应该采用用
远程存储?
glusterfs、ceph
我们在生生产环境并不不采用用远程存储来管理理有状态服务的数据,除非非有商业存储
23. 无无状态服务
有状态服务
短时任务
成本管理理
目目录
24. 短时任务
Job 用用来完成一一些一一次性的短时任务
cron job 完成短时任务的定时执行行行
broadcast job (Openkruise)
25. 无无状态服务
有状态服务
短时任务
成本管理理
目目录
26. 资源成本管理理
我们通过 超卖 来提高高资源的利利用用率,降低成本
limit = request
request = request / 超卖比比 (超卖比比 > 1)
要非非常注意控制超卖比比
内存超卖比比 cpu 更更加危险,生生产环境我们
已经放弃内存超卖了了
27. 流水水线,平台不不可或缺的
一一个 Application PaaS
一一个核心心能力力力
28. 流水水线 (Pipeline)
Pipeline 服务架设在了了异构调度器器之上,由异
构调度器器提供 JOB 等基础能力力力接口口给
Pipeline 使用用
每一一条流水水线并不不是严格线性串串联的,我们采
用用的是 DAG 串串联,所以从架构上可以看出,
接收到一一个执行行行请求后,首首先做的是 DAG 解
析
每一一个 job 里里里,内置了了一一个 agent 程序,它
是 job 容器器的第一一个进程,由它来运行行行具体的
action 任务; agent 帮我们解决了了上下文文传
递,存储屏蔽等
29. 流水水线 - CI/CD
支支持 Git,可以自自由扩展其他代码库
编译、打包、单元测试、代码质量量扫
描、做 docker 镜像、自自动发布部署
30. 流水水线 - 数据应用用
数据离线计算有着较强的流水水线模式,我们将数
据的 ETL 过程开发成了了对应的 Action,最终整个
数据 ETL 作为一一个 pipeline 运行行行
spark 任务由 action job 提交给 spark 运行行行;
spark 集群也是运行行行在 kubernetes 里里里面面。
31. 流水水线 - Ops
集群机器器节点的扩缩容
一一键从阿里里里云购买资源,并创建集群
定时巡检集群状态以及机器器节点
…
32. 以流水水线和异构应用用管理理
一一个 Application 为核心心,打造企业数字化
PaaS
平台产品
33. 数字化平台三大大体系
基于容器器服务
的多云管理理
以微服务为
核心心的研发支支撑
体系
数据治理理及计
算平台
34. 企业数字化平台 - Dice
35. 产品架构图
解决方案
业务产品
业务中台
+
数据中台
领域能力
用户
中心
会员
中心
营销
中心
物流
中心
采购
中心
产品
中心
仓储
中心
商家
中心
低代码平台 设计系统
DevOps 研发体系
驱动模型
会员
领域 营销
领域 物流
领域 采购
领域 产品
领域 仓储
领域 商家
领域 …
同人
模型 需求
模型 价值
模型 标签
工厂 推荐
引擎 诚信
模型 开放
服务 …
分析引擎/AI
微服务治理
流程引擎平台
应用网关
用户
画像
规则引擎平台
数据开发
基础服务
数据
库
用户
领域
…
应用治理
应用开发
技术中台
领域模型
数据抽取
缓存
搜索
引擎
分库
分表
分布式 消息
事务 队列
配置
中心
数据治理
任务开发
…
数据采集
数据集成
模型开发
数据质量
主数据管理
数据地图
数据标准
异构调度引擎
基础实施
服务
任务
批处理引擎
混合云集群
实时计算引擎
36. 产品展示
37. THANKS
Thanks
2019