• 1. 新浪SCE Docker最佳实践赵海川 weibo:wangzi19870227
  • 2. 内容为何支持Docker技术 Docker支持实践的方方面面 实践经验&踩过的坑 后续计划
  • 3. SCE新浪研发中心主推私有云产品 基于openstack定制 整合公司通道机、CMDB 为公司内部全产品线提供IaaS服务 公有云近期内测
  • 4. 为何做Docker支持这件事Openstack与Docker天生互补 Openstack面向IaaS,以资源为中心,打包OS;能够提供成熟的资源限制与隔离能力;多OS系列支持; Docker面向PaaS,以服务为中心,打包service;轻快好省; 产品线需求旺盛 快速部署; 快速起停、创建与销毁; 一致的开发测试环境; 演示、试用环境; 解决设备成本,充分利用资源; 技术方案快速验证; ......
  • 5. IaaS厂商Docker支持概况aliyun 私有registry+alioss 第三方提供ubuntu14.04+docker1.2镜像 ustack coreos镜像 qingcloud coreos镜像
  • 6. 内容为何支持Docker技术 Docker支持实践的方方面面 实践经验&踩过的坑 后续计划
  • 7. SCE Docker支持实践SCE registry hub 镜像 日志 网络 存储
  • 8. registry+hub方案registry后端存储方案探索 docker registry sinastorage driver + sina S3 优点: 后端存储安全可靠 缺点: 依赖storage driver,调试及维护麻烦 更新后还需要自动构建新镜像 localstorage + SCE云硬盘 优点: 后端存储安全可靠 不依赖任何storage driver,省去了调试及维护工作 支持snapshot、resize 缺点:
  • 9. registry+hub方案与微博平台合作,提供公司公共hub 支持repo、tag、详细信息、dockerfile的查看、检索与管理等 自动同步Docker官方镜像库 不保证hub官方镜像的安全性,建议产品线最好使用SCE官方发布的image或构建自己的baseimage 权限管理 产品线私有registry+hub解决方案 私有registry自动构建工具 私有hub自动构建工具
  • 10. centos7+Docker镜像docker1.5 docker-ip、docker-pid、docker-enter docker-compose1.2 rsyslog-kafka plugin 与DIP合作 解决日志监控检索问题 muti-if-adapter 与微博平台合作 解决同一宿主机相同服务端口冲突的问题 more ......
  • 11. SCE上使用Docker123登录vm 使用公司内/外网通道机创建docker vm 使用"CentOS 7.0 64bit Docker"镜像登录SCE sce.sina.com4使用docker sudo docker run -it registry.docker.sce.sina.com/centos
  • 12. 日志方案app打container logfile app打stdout,stderr 开发测试环境 对日志不敏感 app+agent打远端 业务环境 对日志持久化、检索、监控、告警等方面有强需求
  • 13. app+rsyslog-kafka方案日志流 app >>> container rsyslog-kafka >>> kafka >>> logstash >>> elasticsearch >>> kibana
  • 14. app+rsyslog-kafka方案业务流 产品线走DIP实时日志分析服务接入 DIP审批 config_web基于docker swarm api动态扩展logstash集群 给出用户接入所需数据,如kafka broker、topic 产品线依据接入数据创建container docker run -d -e KAFKA_ADDR=... -e KAFKA_TOPIC=... -e LOG_FILE=... -v $(pwd)/kafka_config.sh:${SOME_DIR}/kafka_config.sh ... 遵守SCE log接入规范,container中的run.sh需要调用SCE提供给的日志配置工具docker/tools/rsyslog_config.sh rsyslog_config.sh会按需自动配置rsyslog,接入过程对产品线透明
  • 15. 网络模式bridge docker默认网络模式; 存在最大连接数限制。在服务有大量链接的场景下,会出现大量拒绝链接的现象;微博已踩过此坑; 适用于小规模; host 需要用户管理端口,避免可能会出现的端口冲突情况; 适用于较大规模 后续 上面两种网络模式已基本能满足产品线小规模开发测试需求 大规模docker集群下,现有网络方案面临挑战,需要调研pipework/ovs/weave/Flannel libnetwork driver除了平移过来的bridge、host、null,还提供了remote,以支持分布式bridge;后续计划提供更多driver以解决目前的网络问题,值得重点关注
  • 16. 存储驱动选型aufs Docker最初采用的文件系统,一直没能合入内核,因此兼容性差,仅有Ubuntu支持。需要用户自己编译,使用起来比较麻烦; btrfs 数据并没有直接被写入而是先是被写入到日志,在有连续地写入流的情况下,性能可能是原先的性能的一半; overlayfs 一种新的unionfs,需要kernel 3.18+; devicemapper 默认driver。目前一般情况下的最佳方案; 注意此模式的坑; SCE采用此driver。
  • 17. 集群管理shipyard 支持跨主机的container集群管理 轻量级,学习成本低 支持简单的资源调度 支持GUI图表展示 支持实例横向扩展 swarm docker官方主推的集群管理方案 相对轻量级,学习成本较低 支持多discovery backend 丰富的资源调度Filter Rest API,完全兼容docker API 尚有一些坑 目前产品线最易接受,且使用率最多的方案 kubernetes Google Brog/Omega开源实现 更新迭代太块,架构及实现相对复杂,学习成本、改造成本较高 资源调度 扩容缩容 故障自动恢复 多实例负载均衡 对Openstack支持较好 跟进中
  • 18. 与OpenStack集成进展nova + docker driver 存在的问题 把container当作VM处理 牺牲了docker的高级特性 heat + docker driver 存在的问题 没有资源调度 创建container时必须指定目的节点 magnum openstack CaaS项目 Gantt资源调度 将会与kubernetes深度集成 跟进中
  • 19. 内容为何支持Docker技术 Docker支持实践的方方面面 实践经验&踩过的坑 后续计划
  • 20. 实践经验&踩过的坑镜像制作方面 建议用Dockerfile build镜像,镜像文档化; Dockerfile中,value千万别加""。因为docker会把你的""作为value的一部分; 最小化镜像大小,分层设计,尽量复用; 运行容器方面 一容器一进程,便于服务监控与资源隔离; 不建议用latest 对于提供服务的container,建议养成加--restart的习惯 数据存放方面 建议采用volume挂载方式 不依赖host目录,便于共享与迁移; 资源限制方面 cgroup允许进程超限使用,即:在有空余资源的情况下,允许使用超出资源限制的更多资源。 cgroup仅在必要时(资源不足时)限制资源使用,比如:当若干进程同时大量地使用CPU。 cpu share enforcement仅会在多个进程运行在相同核上的情况下发生。也就是说,即使你机器上的两个container cpu限制不同,如果你把一个container绑定在core1,而把另外一个container绑定在core2,那么这两个container都能打满各自的核。
  • 21. 实践经验&踩过的坑资源隔离方面 user ns是通过将container的uid、gid映射为node上的uid、gid来实现user隔离的; 也就是说,你在node上只能看到container的uid,而看不到uname,除非这个uid在container和node上的uname相同; 也就是说,你在node上看到的container上的进程的所属用户的uname不一定是container上运行这个进程的uname,但uid一定是container上运行这个进程的uid; swarm & compose使用方面 注意swarm strategies尚不成熟,binpack strategy实现存在一些问题,会导致最后调度出来的node不是你预期的。 注意compose尚不成熟,可能会遇到单个启container没问题,放到compose启就失败的问题。如:部署启动时间依赖性强的容器很可能会导致失败; container方面 注意dm默认pool及container存储空间大小问题。container默认10G,pool默认100G,你可能需要通过dm.basesize、dm.loopdatasize按需扩容; 注意nsenter进容器,看不到配置在container里的env变量;查看env建议用docker exec或docker inspect; 注意docker daemon、docker daemon的default-ulimit和docker run的ulimit三者间的继承关系; ......
  • 22. 内容为何支持Docker技术 Docker支持实践的方方面面 实践经验&踩过的坑 后续计划
  • 23. 后续计划提供CI & CD解决方案 探索大规模集群网络方案 pipework/ovs/weave/Flannel libnetwork 持续跟进大规模集群管理方案 kubernetes 深入调研Openstack与Docker整合方案 magnum murano Solum
  • 24. 谢谢
  • 25. (本页无文本内容)