美丽联合 张振华 - 美丽联合容器云平台建设的实战分享

真夜梅

2017/12/18 发布于 技术 分类

随着蘑菇街业务的高速发展,对基础平台的稳定性、可用性和性能提出了越来越高的要求。如何将容器技术在传统的数据中心落地,如何满足产品快节奏的版本迭代和业务快速扩容的需求,如何解决容器对原有运维体系的冲击和挑战,如何将容器和DevOps理念真正落地?这些是我们所面临的挑战。 蘑菇街从无到有建设容器平台的过程中,结合业务的实际场景不断的优化和完善。期间我们踩过不少坑,做过一些失败的尝试,得到了一些经验教训,也有了一些思考与沉淀。本次分享介绍在蘑菇街容器平台的落地过程,我们所遇到的问题以及应对方案,希望这些实践和思考能对大家有所启发。

文字内容
1. 美丽联合容器器云平台建 设的实战分享 张振华 (郭嘉) 美丽联合集团-基础平台 虚拟化
5. 张振华 (郭嘉) 美丽联合集团 ⾼高级技术专家 • 2014年年加⼊入美丽联合,虚拟化团队负责⼈人,带领团队从⽆无到有建设集团的私有 IaaS 平台和 PaaS 平台,⻅见证了了美丽联合集团从物理理机、虚拟机到容器器的技术 演进。 • ⽬目前聚焦在美丽联合集团容器器云平台的研发和基于容器器的 DevOps 项⽬目落地。 • ⼗十余年年软件研发管理理经验,在加⼊入美丽联合集团之前,曾在英特尔、思科等公 司⼯工作。
6. 1 2 美丽联合容器器平台的演进 稳定 & 效率 技术⽅方案 有状态业务 & 如何应对 3 DevOps 平台建设 经验 & 体会
7. 容器器云平台演进 多机房、多集群统⼀一管理理, 完善监控和⾃自动化运维⽔水平 云管理理平台上线 基于容器器的 DevOps 项⽬目建设 有状态业务接⼊入 2010 物理理机 2015 2016 OpenStack + Docker 2017 2018 Kubernetes + Docker • 传统的数据中⼼心 • 机器器分散管理理 • 运维、监控不不完善 • 发布、扩容⽐比较⼈人⾁肉 • 从零构建私有云平台 • 多机房多集群统⼀一管理理平台 • VM 化,静态资源分配 • 和运维、监控对接,逐步完善 • ⾯面向机器器的发布 • 演进⾄至 Kubernetes ⽅方案 • 多机房多集群统⼀一管理理平台 • 动态资源分配 • 与运维、监控对接,镜像发布 • 接⼊入有状态业务
8. OpenStack 时代 基于 OpenStack + Docker ⽅方案 ⾃自研多集群统⼀一管理理平台 Planck nova-docker OpenStack OVS(bond4) Container 蘑 蘑 菇 菇 街 街 Devicemapper 监 运 控 维 Linux 2.6.23 Docker 1.3.2 Container-tools
9. Web Portal — Planck
10. Kubernetes 时代 ?适合的才是最好的! 优点:先进的理理念、可 扩展性好、社区活跃 要引擎还是要汽⻋车? 缺点:⾃自建成本⾼高、仍 在⾼高速演进中 不不仅仅是 PaaS ! PaaS Build/Deploy Pipeline Private Container Service IaaS
11. 总体架构 ⽤用户 业务 应⽤用基线 Web Portal API SLB软负载 Code Build Docker Registry 镜像管理理 集群管理理 权限管理理 服务发现 测试 AZ Pod … Pod 预发 AZ Pod … Pod ⽣生产 AZ Pod … Pod 蘑 蘑 菇 菇 街 街 监 运 控 维 Ceph
12. Web Portal — Captain
13. 提升稳定性 来⾃自稳定性的挑战 硬件
 故障 软件
 问题 安全
 漏漏洞洞 ⼈人为
 事故 • 完善⽇日志,进程等监控 • 建⽴立⽇日常值班制度 • 故障演练,模拟硬件故
 障,⽹网络中断 • 冗灾预案演练 • 统⼀一集群配置,并不不断优化 • 和安全团队紧密合作评估 • ⾃自动化定期健康巡检 安全漏漏洞洞的影响 • 完善性能压测 • 核⼼心数据定期备份 • 完善⾃自动化测试 • 制定操作红线和规范 • 规范流程 • 账号体系
14. 提升效率 多维度提升效率 机器器 的效率 监控 效率 ⼈人的 效率 解决问题 效率 • CPU/内存动态扩缩容 • 动态资源申请 • 统⼀一资源池 • Docker Pool 监控 • 容器器 oom 监控 • TCP连接状态监控 • TCP重传率监控 • pod迁移时的⾃自动通知 • IM⾃自动应答(宿主机信息查 • 系统问题定位排查指南 询) • 系统问题分析定位平台 • ⼯工具化,体系化 • 知识库沉淀
15. 监控与告警 devicemapper docker pool使⽤用率监控 $ cat /sys/fs/cgroup/memory/docker// memory.oom_control oom_kill_disable 0 under_oom 0
16. 1 2 美丽联合容器器平台的演进 稳定 & 效率 技术⽅方案 有状态业务 & 如何应对 3 DevOps 平台建设 经验 & 体会
17. 版本演进的动机 更更好的隔离性 & 更更⾼高的稳定性 & 更更强的性能 Kernel v2.6.32 v3.10 v4.4.95 OverlayFS,network namespace和pid_max隔离 Docker v1.3.2 v1.10.3 Storage Devicemapper v1.13.1 OverlayFS Docker daemon 分离, ⽀支持OverlayFS v2 随机IO容易易被放⼤大, Storage pool 容易易出现 磁盘超配,社区趋势
18. 关键技术与创新 隔离性 CPU Set ⽀支持 ⽹网络QoS 异步IO隔离 稳定性&可⽤用性 集群⾃自身监控 定期检查 Cadvisor top hook ⽹网络 基于 OVS⾃自研的mogunet 多⽹网段⽀支持 Kubernetes Cluster 存储 DeviceMapper -> OverlayFS mount宿主机⽬目录的配额 ⾼高可⽤用 管理理节点 HA 有状态业务 Stateful Set 增强 调度 基于磁盘类型调度 基于业务/资源亲和性调度
19. Pod驱逐策略略 Node Controller Eviction Node Controller Node A NotReady Network loss conn 10.12.12.11 Node A Pod A Pod A was evicted by NC Kubelet Eviction • BestEffort • Burstable • Guaranteed 10.12.12.11 Node B Pod A
20. Pod驱逐策略略 参考《记⼀一次 k8s 集群单点故障引发的⾎血案》 Node A NotReady?? Node A Node Controller ⽹网络故障 Node B NotReady?? Node B
21. 有状态业务的挑战 应⽤用调⽤用的依赖 DNS等配置的依赖 数据持久层的依赖
22. 应⽤用依赖于服务端 IP 地址不不变 服务发现依赖于服务实例例的IP 地址不不变 2. 客户端查询服务端有哪些实例例 3. 服务中⼼心返回IP列列表 IP1 服务中⼼心 IP2 IP3 客户端 Inst 1 Inst N 4. 客户端选择⼀一个IP并发起TCP连接 1. 服务启动时,注册到服务中⼼心 服务端 Inst 1 Inst N
23. Flannel ⽹网络⽅方案 Flannel ⽅方案静态规划⽹网络资源,每个物理理节点独占⼀一个C类⽹网段。虽然简单易易⽤用,但缺点也很明显:
 • 容器器跨物理理机迁移时,IP⼀一定会变化 • Overlay 带来的性能开销 Node 0 Flannel 10.1.15.0/24 ETCD VXLAN Node 1 Flannel 10.1.16.0/24
24. ⾃自研⽹网络插件 mogunet 基于 Neutron/OVS ⾃自研 K8S ⽹网络 插件,统⼀一管理理 container,VM, baremental 的⽹网络资源分配。 Container VM Baremental mogunet 统⼀一⽹网络管理理⽅方案:Neutron (OVS + VLAN) 创建 Pod 的⽹网络流程 容器器通过 veth 连到 OVS br-int
 上,采⽤用 VLAN 模型。兼具隔离
 性和性能。 Orchestrator K8S Mogunet Neutron Ovs-agent CreatePod Return SetupPod Return CreatePort(name) Return(p, mac, gw) Setup peer vet SetupFlows Orchestrator K8S Mogunet Neutron Ovs-agent
25. OVS+Vlan Container 10.1.128.0/24 tap vlan 3 Container tap vlan 3 br-int Container 10.1.129.0/24 tap vlan 5 Container 10.1.128.0/24 tap vlan 3 br-int Host A eth0 br-100 OpenVSwtich eth1 10.1.15.0/24 Host B br-100 OpenVSwtich eth0 eth1 10.1.15.0/24 TOR TOR
26. 跨物理理机迁移时容器器 IP 保持不不变 1. 容器器创建时保持 port 和
 pod name 映射关系 Neutron 
 port:ns-pod0 ip:10.13.234.10 device_owner=node0 Source pod0 2. Stateful Set在迁移过程中保持
 ns pod name不不变。宿主机故障时,
 neutron port 和 ip 正常保留留 3. 查询是否存在已有port 4. 如果存在,则重⽤用IP并更更新 device_owner Destination pod0 ns
27. 指定IP删除pod • statefulset只⽀支持按序删除实例例,不不能满⾜足所有业务场景。 • 业务有状态依赖关系,或当某些实例例出现业务逻辑问题时,需要销毁。
28. 指定IP删除pod replicas=3 name=app name=app app-0 name=app app-1 Statefulset不不⽀支持删除某个pod name=app app-2
29. 指定IP删除pod replicas=3 name=app replicas=2 name=app app-1=deleted name=app app-1=deleted app-0 name=app app-1 name=app app-1=deleted app-2 Step 1. 添加⼀一个app-1=deleted的label Step 2. 更更新statefulset controller,也添加app1=deleted这个label,同时将replicas数量量减1
30. 指定IP删除pod replicas=3 name=app replicas=2 name=app app-1=deleted name=app app-1=deleted app-0 name=app app-1 name=app app-1=deleted app-2 Step 3. 通过删除pod接⼝口,将app-1这个pod删除
31. 指定IP删除pod replicas=2 name=app name=app app-0 name=app app-2 Step 4. 将app-1=deleted这个label清除掉
32. 容器器间异步 IO 隔离增强 存在什什么问题? Cgroup V1 or V2 ? 皆不不尽完美! User Write Kernel Cgroup VFS XFS Buffer IO Page Cache Writeback Direct IO Block Layer / IO Scheduler / Driver Disk Docker Docker Docker Linux Kernel (Writeback 线程) writeback线程⽆无法区分脏数据是 由哪个容器器产⽣生,⽆无法做到隔离
33. 基于 OverlayFS 的异步 IO 限速 Container Container Container VFS OverlayFS OverlayFS ……. XFS Buffer IO Page Cache Direct IO Block Layer / IO Scheduler / Driver Disk 每个容器器有独⽴立的 OverlayFS
34. 容器器间异步 IO 隔离 优化前 App1 App2 App3 Docker Docker 200 iops 40 iops total 100 iops Docker 10 iops 75 iops 20 iops Disk 5 iops 异步IO超出实 际能⼒力力 unhappy unhappy 优化后 App1 App2 App3 Docker Docker 200 iops 40 iops total 100 iops Docker 10 iops 40 iops 40 iops Disk 10 iops 限制了了40iops happy happy
35. 1 2 美丽联合容器器平台的演进 稳定 & 效率 技术⽅方案 有状态业务 & 如何应对 3 DevOps 平台建设 经验 & 体会
36. DevOps 平台建设 应⽤用 代码 Review Commit 代码仓库 Build 单元测试 Release 集成测试 Review 平台 发布系统 测试 线上 DevOps 平台 基线 基础信息 ⽣生命周期管理理 创建 删除 扩容 缩容 升级回滚 多集群管理理 服务发现 短时任务 负载均衡 镜像管理理 …… 资源池 & 资源调度 运⾏行行维护 监控 ⽇日志
37. IMAGE 镜像管理理 标准化的镜像分层⽅方案 应⽤用 应⽤用依赖 基础语⾔言环境(Java, Go) 基础软件包(OS,系统配置) 统⼀一的镜像管理理⽅方案 镜像管理理 权限 控制 ⾃自动化⽣生成 Dockerfile 测试机房 Registry 跨机房镜像 实时/定向同步 线上机房 Registry
38. 服务发现与健康检查 apiVersion: v1 kind: Service metadata: name:'>name: demeter labels: name:'>name: demeter spec: clusterIP: None selector: app: demeter Kube-apiserver List/Watch Pod, IP Service(endpoints) Pod0 app=demeter Pod1 app=demeter Radar Nginx readinessProbe: exec: command: - cat - /tmp/healthy SLB LVS DNS
39. 总结 & 体会 & 未来 总结过去 逐步推⼴广 农村包围城市 如何切⼊入 解决痛点问题 设定⽬目标 业务驱动 技术氛围 营造浓厚的团队技术氛围 展望未来 DevOps 微服务落地 在线离线 实例例混部 For AI GPU 资源调度