客户需求是什么?
owned by Rico (2015-9-10, )
基本需求汇总
- DevOps (开发、测试、部署、运维一条龙服务)
- 基于docker instance/container 的计算节点的autoscaling
- 基于docker instance/container 的 autohealing(docker有个restart参数;更高级的是在另外的docker engine上创建该故障节点的另外instance)
- dockerhub的国内本地化支持(被墙、速度慢):策略是封装CLI从国内public repository上pull。而push可以放到我们自己的repository上。这些repository在国内主要的IaaS服务商的IDC中部署,走内部网络。
- cloud computing越来越复杂了,企业需要对复杂环境的监控:资源消耗,状态监控,性能衡量、摄前式干预、基于模型的成本估算、安全与数据备份、业务健壮性评估。从资源到应用,从内部到外部end user,从基础架构到应用内部错误,从单实体到事物拓扑。
- 企业对各种应用的监控需求越来越多,而且要求层次不同。比如Foreman
- 裸机上的docker化和云上(openstack)docker化,彼此优缺点?
- 容器的监控问题也花了我们很多精力。监控、告警是运营系统最核心的功能之一
- 每个容器内部会运行一个代理,从/proc下面获取CPU、内存、IO的信息,然后上报公司的监控告警平台。但是,默认情况下,容器内部的proc显示的是Host信息,我们需要用Host上cgroup中的统计信息来覆盖容器内部的部分proc信息。我们基于开源的lxcfs,做了一些改造实现了这个需求。
- 我们更关注提供一个高效的容器资源调度管理平台,然后以API的方式对外
- 第一个大的挑战就是网络的问题,Docker默认使用NAT方式,这种方式性能很差,而且容器的IP对外不可见。一般来说,游戏业务对网络实时性和性能要求较高,NAT这种方式性能损失太大,根本不能用于实际业务中。另外,腾讯内部的很多程序对IP都是很敏感的,比如只有特定的IP才能拉取用户的资料,如果这些服务没有独立的IP,是无法正常运行的。
每个容器都有一个独立可以路由的IP,网络性能大幅提高,基本能满足业务的需求。而且,每个容器都可以携带IP在同一个核心交换机下任意漂移,业务通过IP漂移可以做很多有意义的事情,比如Host故障快速恢复等。
另外,我们针对一些对网络性能要求高的应用,直接使用SR-IOV,可以完全达到物理机的网络性能。
- 安全性: 不用sudo而直接运行Docker命令所存在的安全漏洞,并强烈建议通过设置sudo规则作为暂时的解决方法
- 隔离性的问题还是给我们带来了很多麻烦。性能监控我们通过lxcfs基本解决,但是还是有一些问题无法解决,比如内核参数的问题。
- Docker daemon进程升级的问题,现有Docker实现下,Docker daemon一退出,所有容器都会停止,这会给大大限制Docker本身的升级。
- 如何面对跨host的场景、如何实现分布式Docker Container的管理
- 从150个容器开始,开始出现不可用,无反应或者无法杀掉的僵尸容器(Zombie)。升至200时我们平均录得6个僵尸容器。