58集团私有云实践

姚远_58同城_58集团私有云实践
展开查看详情

1.58集团私有云实践 姚远 201811 让 生 活 简 单 美 好

2. 让 生 活 简 单 美 好 关于我 • 姚远 – 58集团-TEG-架构师 – 云计算平台技术负责人 – 中间件:消息队列 – 基础云平台架构与设计 – 服务的高可用、高并发

3. 让 生 活 简 单 美 好 目录 • 背景 • 整体架构 • 架构演进 • 复盘与反思 • 未来与展望

4. 让 生 活 简 单 美 好 解决的问题 • 资源利用率低 • 服务扩容周期长 • 上线流程不规范

5. 让 生 活 简 单 美 好 技术选型 • Docker vs Kvm – 性能好 – 应用快速分发部署 – 自动化运维 • Kubernetes vs Swarm vs Mesos – 功能强大 – 社区活跃 – 组件多

6. 让 生 活 简 单 美 好 云化历程 流量80%+ 服务100+ 项目启动 第一个版本发布 网络架构升级 服务1500+ 容器1000+ 技术探索 服务试接入 服务发现升级 容器8000+ 服务器60+ 服务器300+ 2017.1 2017.5 2017.12 2018.5 2018.11

7. 让 生 活 简 单 美 好 目录 • 背景 • 整体架构 • 架构演进 • 复盘与反思 • 未来与展望

8. 让 生 活 简 单 美 好 整体架构 Java PHP … C/C++ 服务发现 容器管理 缩扩容 回滚降级 镜像中心 上线发布 权限配额 资源池管理 统一 门户 日志中心 弹性资源调度 kubernetes docker agent 监控中心 基础设施 网络 存储 宿主机

9. 让 生 活 简 单 美 好 系统整合 项目管理 代码管理 中间件 服务治理 cmdb 服务树 私有云 监控系统 数据平台

10. 让 生 活 简 单 美 好 环境流转 build test pre-release release 发布流 构建环境 测试环境 沙箱环境 线上环境 镜像仓库

11. 让 生 活 简 单 美 好 目录 • 背景 • 整体架构 • 架构演进 • 复盘与反思 • 未来与展望

12. 让 生 活 简 单 美 好 核心组件 • 网络架构 • 服务发现

13. 让 生 活 简 单 美 好 网络的实际需求 • 容器有独立IP • 容器与容器、容器与宿主互通 • 现有框架改动小、平台友好交互 • 适应物理设备、可大规模扩展 • 网络故障快速跟踪调试

14. 让 生 活 简 单 美 好 模型对比 网络模型 优点 缺点 host docker自带 容器与宿主没有隔离 与宿主共享网络 端口冲突,需要服务发现来隔离 性能高、组网简单 无法做容器网络监控 bridge docker自带 ip消耗快 性能高、组网简单 多机ip防止冲突 使用宿主段可用ip 原生overlay docker自带,官方支持 多子网通信与隔离是个问题;组网 基于vxlan实现,容器可以任意指定子网 较复杂,不利于问题跟踪与调试 flannel 基于vxlan实现,容器有独立ip,并支持 性能损失稍大,与外部网络通信需 跨子网通信 要特定的解决方案,组网较复杂 calico 完全由三层路由实现,没有额外的ip转 网络中开启BGP协议,可能到达路 换,性能高 由器的路由容量

15. 让 生 活 简 单 美 好 选择:bridge+vlan • 优势 – 性能好,故障易于调试 – 组网简单,与现有网络无缝对接 – 满足云实例有独立IP,全网互通 – 现有服务治理体系改动较小 • 劣势 – IP利用率低 – 缺少网络限速

16. 让 生 活 简 单 美 好 地址复用 • CNM 管理平台 K8s kubelet Node master • 随机IP docker IP driver /58dockernet/containers/192.168.240.0/pool/ /58dockernet/containers/192.168.240.0/assigned/ ETCD /58dockernet/containers/hosts/

17. 让 生 活 简 单 美 好 网络架构升级 • 固定IP K8s 4 Node 管理平台 3 master kubelet • CNI 1 5 IP driver 7 • 全网漂移 IP Manager docker 2 6 /58dockernet/containers/192.168.240.0/pool/ /58dockernet/containers/192.168.240.0/assigned/ ETCD /58dockernet/containers/clusters/192.168.240.3

18. 让 生 活 简 单 美 好 网络限速 • 自研监控+tc 出口限速 • tc只能单向限速? – 对等网卡 出口限速 – 都做出口限速

19. 让 生 活 简 单 美 好 限速优化 • 动态限速 • 秒级限速 • 弹性限速 • 带宽复用

20. 让 生 活 简 单 美 好 服务发现的挑战 • 挑战 – IP动态分配 – 节点弹性伸缩 • 服务发现体系的冲击 – 以IP不变为假设 – nginx:手动配置 • k8s提供的服务发现 – 不适合58业务场景

21. 让 生 活 简 单 美 好 服务发现架构 nginx nginx • 业界典型的服务发现架构 reload reload watcher watcher • 修改web中间件快速实现 watch • 问题 – 调试问题 consul – 多语言扩展 register register web service web service

22. 让 生 活 简 单 美 好 服务发现演进 nginx nginx • 注册托管到云平台 reload reload watcher watcher • 业务代码无须修改 watch • 多语言支持 consul 域名/VIP register register register • 支持流量灰度 proxy • 支持其他策略 register register register java service php service node service

23. 让 生 活 简 单 美 好 目录 • 背景 • 整体架构 • 架构演进 • 复盘与反思 • 未来与展望

24. 让 生 活 简 单 美 好 技术复盘 • 容器云的设计考量 • 云化的共性问题

25. 让 生 活 简 单 美 好 设计考量 • 像容器一样vs像虚拟机一样 – 像容器一样 • 单进程vs多进程 – 单进程 • 去agent化 – 防止agent数量以几何倍数增长 – 降低系统负载

26. 让 生 活 简 单 美 好 业务云化 • 服务启动耗cpu过高 – 多分配cpu资源 – 客户端预热 – 服务端预热 • 监控维度深化 – 容器监控从随机采样->每秒采集上报最大值->每秒采集上报平均值 ->多维度监控体系

27. 让 生 活 简 单 美 好 业务云化 • 容器过载保护 – 系统负载没有隔离 – 容器最大线程数控制 – 容器动态均衡 • swap交换分区 – 导致服务间歇性抖动 – 交换分区必须关闭

28. 让 生 活 简 单 美 好 Centos7原生内核问题多多 • 频繁重启 – Kernel bug • 资源利用率异常 – 内核进程cpu突增 • 多核负载不均衡

29. 让 生 活 简 单 美 好 日志的反思 • 实时采集->离线上传 – 降低线上压力 X • 日志平台->取消 – 节约成本 • 离线查询->保留 – hadoop • 图形化日志回溯 – 当天日志