小米生态云 李波:小米生态云应用引擎实践

柏清淑

2017/11/14 发布于 技术 分类

小米生态云是面向小米生态链及合作伙伴企业的一站式综合云服务平台,保护小米生态的线上业务和用户数据的安全,汇聚和挖掘数据的价值,并逐步发挥人工智能的力量。小米应用引擎是小米生态云的重要组成部分和核心功能之一,在小米生态云上提供应用部署,监控报警,日志采集分析,域名管理备案及SSL证书, 自动化安全扫描,并集成各种常用的存储和计算服务以及深度学习框架。​小米应用引擎已经经历了两代的发展,此次和大家分享小米应用引擎的设计思路和引擎架构的演进过程,期间遇到的问题和解决办法,以及未来的一些计划。

文字内容
1. 小米生态李波S云A,的C小C应米2生0用1态7引云 擎实践
2. 大纲 • 小米生态云简介 • 小米生态云应用引擎演进 • 未来规划 SACC2017
3. 小米生态云 • 为小米生态链及合作伙伴提供一站式云服务及解 决方案 • 完整的产品和服务 17– 20+ C20– 涵盖云计算 大数据 人工智能 C– 统一使用小米账号体系 SA• 效率 安全 自由 成本 大数据 人工智能 • 国际化布局
4. CLI 应用管理 小米生态云 用户管理控制台 认证与授权 (集成小米账号) 用户权限管理 (用户/组/角色) 计量计费 事件审计 应用引擎 应用1 (公司A) 应用2 (公司A) 应用3 (公司B) 应用n (公司N) 文件存储 (FDS) 消息队列(EMQ) SACC2017结构化存储(SDS) 数据处理(EMR) 数据库服务(RDS) 流式消息队列(Talos) RPC服务治理 缓存服务 日志采集与分析 监控报警 计划任务 第三方服务 大数据服务 人工智能服务 用户画像 推送推广 数据工场 数据通道 ……. 深度学习 智能语音 ……
5. 小米生态云区域分布 SACC2017
6. 小米生态SA云C应C用20引17擎演进
7. 应用引擎v1 • 基于Cloud Foundry • 集成小米账号,支持公司及部门隔离,用户和角 • • 色(支支管持持H理主Dero流ockk开uer发B应u语i用ld言Sp以Aac及Ck)静C态20页1面7和二进制文件 • 域名及证书
8. 优点和缺点 • 优点 – 开箱即用的PaaS平台 – 完整的权限和授权体系 – 成熟稳定,非常适用于无状态Web应用 17• 缺点 20– Buildpack机制和基础文件系统不灵活,定制难度大 C– 生态链公司开发测试逐步迁移到Docker平台,与生产环境 AC不一致 S– 无法限制应用的CPU绝对用量 – 不支持Cluster应用、UDP应用 – Docker支持不完整,非原生体验 – 自有体系,组件繁多,部署运维复杂 – 社区参与度和活跃度下降
9. 应用引擎v2 • 基于Kubernetes • 原生Docker体验 • 支持TCP/UDP应用 7• 原生计划任务支持 01• 配置和敏感信息管理 C2• CPU的绝对用量限制 SAC• 支持Cluster应用
10. 扩展 定制 • 高可用部署 • 认证授权 • • • • • 外容安应应器用用部全隔抽自直HT象连动离TP扩和/H容封T装TPSSA以C及TCC2P0/U1D7P服务 • 命令行工具 • 日志 • 监控报警 • 镜像安全扫描
11. Mi Account 整体架构 CLI Web Console APP Browser LAAoPgPII EACAAPPAII AAAPPPIII SchAeAdPuPlIeIr Controller- maAnAaPgPeIrI etcd SACC2017IngresnNsnggCgioinninxntxrxoller AAPPII Node MAA&PPAII 自动扩容 计量计费 镜像仓库
12. 高可用部署 API Server LB (DNS Name/IP) master-1 SACC2017etcd-1 node-1 node-3 master-2 etcd-2 node-2 node-4 etcd-3 node-N node-M az1 az2 kubectl label nodes node-1 failure-domain.beta.kubernetes.io/region=cn-bj-6 failure-domain.beta.kubernetes.io/zone=cn-bj-6a kubectl label nodes node-2 failure-domain.beta.kubernetes.io/region=cn-bj-6 failure-domain.beta.kubernetes.io/zone=cn-bj-6b
13. 多租户环境 • 安全 – 权限控制 – 网络隔离 • 资源公平分配 – CPU – 流量 SACC2017
14. 认证授权 Mi Account ECAA Kubernetes Xiaomi ID Org1 SACC2017/token User Role /authenticate 4 Group 12 3 Client o1-namespace1 o1-namespace2 o1-namespace3 Webhook Authn 5 role rolebinding RBAC Authz
15. 网络隔离 VPC对接 AA公A公公司司司应应应用用用 VPC安全组 ✗ SAC✗C2017AA公B公公司司司应应应用用用 VPC安全组 ✓✗ 应用引擎网络策略 VPC对接 应用引擎VPC 数据库 缓存 A公司VPC ✗ 数据库 缓存 B公司VPC
16. 网络策略实现 • 容器网络: Calico • Calico Policy – 优先级从高到低 17• 允许某公司的应用访问该公司的VPC网段(egress) 20• 允许同一公司的应用之间相互访问(egress+ingress) C• 允许所有应用访问kube-dns地址(egress) AC• 允许Nginx Ingress Controller访问所有应用(ingress) S• 禁止所有应用访问所有私有地址(egress) • 允许所有应用 – 访问所有地址(egress) – 被所有地址/应用访问(ingress)
17. Calico Policy • 允许同一公司的应用之间相互访问 SACC2017
18. Calico Policy • 禁止所有应用访问所有私有地址 SACC2017
19. 流量隔离 • 配置不同的LB – 独立IP – 独立带宽 SACC2017– 独立的Nginx(如果需要)
20. Web应用抽象和封装 Application SACC20170..1 Ingress 1 Deployment 1 ReplicaSet 1 Service 0..N Pod Kubernetes
21. 应用自动扩容 SACC2017
22. 容器直连 wss:// 直连服务 wss:// Kubernetes 7Web C201• wss://<apiserver>/api/v1/namespaces/<ns>/pods/<pod>/exec?stdo Cut=1&stdin=1&stderr=1&tty=1&container=<container>&command SA=%2Fbin%2Fsh&command=-i
23. 外部服务 • HTTP/HTTPS – LB+ Nginx Ingress Controller 017• TCP/UDP C2– EIP + Nginx (Stream Proxy) SAC– 端口规划和分配
24. 命令行工具 • 不使用kubectl – 暴露过多细节,功能过于强大 – 认证不便 • 自研工具 – ak/sk认证 – 有限功能 • 自动化运维 SACC2017 – 应用部署,更新,删除 – 应用水平扩容 – 资源指标(CPU,内存) • 实时日志
25. 日志 Fluentd Agent File NNNooodddeeesss Splunk 实时分析 SACC2017Kafka HDFS 实时日志 日志下载 FDS 离线计算
26. 监控 报警 • 监控 – Nginx Ingress Controller + Lua + Open Falcon – HTTP相关指标 17• 报警 20– Open Falcon CC– 短信 SA– 邮件
27. 镜像安全 • 镜像安全扫描 – Harbor + Clair SACC2017
28. 经验分享 • 资源限制 – ResourceQuota – LimitRange • CronJob 7– successfulJobsHistoryLimit, failedJobsHistoryLimit 1– concurrencyPolicy: Forbid/Replace 20– activeDeadlineSeconds C• Events C– 导出到外部存储 SA• Docker – log rotation: --log-driver json-file --log-opt max-size=100m --log-opt max-file=10 • Calico – AWS多AZ: CALICO_IPV4POOL_IPIP=always – 重命名策略: k8s-policy-no-match
29. 应用引擎未来规划 • 应用版本管理 • 多应用映射同一域名 • • • • 精限报应细警制用化服资容的源务器资监磁源控盘调大度小SACC2017 • 集群自动扩容 • Windows支持
30. SACC2017