| 关键词: Docker Container 资源 云端 测试 服务 版本 一个 业务 nbsp |
今年的Container Summit 2015 实在是相当的精彩,这两天的研讨会着重在Container 技术在云端上的应用(Google、Azure、daocloud、Mesos、RANCHER、和信云端)、资源运用(微博) 、CI (贝格乐)、DevOps 、Docker 1.9.x、Docker swarm。 除了内容精彩、讲师阵容豪华之外,会议场地与餐点也都准备得相当不错!全天候咖啡与点心供应实在是太贴心了,难怪有人说办活动只要餐点准备好,评价就至少有80分!唯一的缺点大概就是会场的网路很烂,只好用自己的手机上网XD 这两天这么多的主题中,我最喜欢微博、Docker In CI、DevOps 这三场,这几场听起来超有感觉的,透过Container 技术可以让DevOps 更容易,省去了不少时间与资源成本,而这是采用docker 能够带来的实质改善。以下就是相关的笔记: ※Container的过去、现在与未来 docker 让 infar as a code 让开发与营运可以拥有共通的版本 从单一主机执行,跨入多主机架构,不再是单机开发或测试模式 ※Mesos 大建大规模 Container 平台 特点 resource management 把资源公平分散出去 将IP 给某一个Container ,你不需要知道这个Container 再哪一台机器,但是你可以用这个IP 找到该Container programming abstractions security monitoring , debugging , logging Mesos 提供 API 使用 各种不同的framework 都可以在Mesos这个平台上使用 Docker in CI:Cacoo与Backlog导入Docker的经验分享 日本人用台语自我介绍,超强! 公司业务介绍 Backlog (http://backlogtool.com/tw) Cacoo Typetalk 利用 Docker 的特性来做 CI 测试遇到的瓶颈 分支问题 太多开发人员、太多分支 需要经过单元测试后才可以 review 测试环境 不同开发环境,需要不同的测试环境与工具 速度 整合测试前必须先完成单元测试后才可以进行,需要等很久 使用 Docker 的优点 容易设定 slave 启动快速,只要启动docker 后就可以执行测试了 简化环境设定 只需要 dockerfile 就可以达到需求 加速 自己有架设 docker register 资源利用 测试完毕后就可以将container 移除,节省资源 权限问题 in some case , test should be run by non-root user owner of host directory inside container is indefinite writing build result to host directory by non-root user can fail change ownership to non-root user during build time copy build result from container no permission issue complicate Docker in CI good place to start docker ci becomes common practice installing docker in ci doesn't change many things we could have best practice in this area 日本在production 应用案例 ※新浪微博大规模基于Docker的混合云应用实践 业务背景 业务量变化非常大、瞬间的峰值很高,需要大量的设备以确保服务在尖峰期间能够正常 业务突发状况 突发事件、三节(元旦、春晚、耶诞节)、红包飞 日常推拨 资源浪费 每个业务单位有各自的设备,以确保尖峰期间服务能够正常 每个业务都有设备闲置,造成资源浪费 设备 申请周期过长 机房空间有限 目标 个业务除了有各自的保留空间外,有部分的空间如10%设备会共通用, 让共用的空间做灵活的弹性转移 大陆业界处理方式:12306 (类似台铁订票网站) 目前有两个资料储存中心,但是仍旧有问题 额外申请阿里云,用来应付尖峰流量 云端 使用阿里云 持续部属不会用在云端,单纯用来扛尖峰值 拉专线,两个机房各1G 专线,三节尖峰状态拉10G 专线 拉专线才可以降低延迟时间,使用公有云方式处理速度太慢 Docker Registry 有自己的Docker Registry 用来做版本管理 Docker 有升级过,额外用Nginx 做处理,得知目前服务请求要用V1 or V2 Registry 具有内部私有机房,并透过专线与阿里云沟通 docker swarm mesos (离线数据分析用) dispatch (自行开发任务系统) 后端服务为JAVA 前端服务 PHP 有一个共用的资源池,当其他系统有需要资源再做调配 大规模集群操作自动化 设备申请 内:共享池 外:阿里云 初始化 标准化 配置管理 安装、升级自动化、操作 API 化 RPM+Puppet MasterLess 业界可能透过CoreOS、RancherOS、Atomic、DCOS 来做初始化,但是对微博来说,这样成本过高,所以自己做初始化。 服务上线 容器动态调度 服务弹性扩充 各项业务有10%的设备提供做为共享使用 资源不足时进行申请,使用后归还 具有报警平台、业务监控 部属模式 优先调度内网共享 扩充容,单次操作时间 < 5min ※群晖科技运用Docker研发新世代产品之路 NAS 提供 Docker 服务遇到的困难 网路 NAT Port Mapping 使用 open vswitch 方式处理网路问题 储存空间 让 DMS 上共用同一份 docker image stateless data:like image or library stateful data:user data、documents、images 利用 DSM 升级,自动调整 config 档案 用BTRFS subvolume 的quote 机制,限制docker dsm 用量 支援 snapshot 、backup 安全性 cgroup capability apparmor namespace read-only sysfs sysfs 设定为唯读 procfs 部分路径唯读 内部使用案例 demo site:让每一个使用者资料隔离,不会读到前一个使用者看到的资料 QC 模拟多 client 情境效能测试 保存/还原测试问题环境 ※两大平台完整结合: 谈Windows Container & Azure Container service windows 世界的 container 技术 docker vm extension hyper-v containers visual studio tooling continuous integration with visual studio online docker trust repository 可以用 power shell 或是用 docker command MS自己的 container Server Core Nano Server 最佳化 for container 的 os 原生支援 docker command 使用 Apache Mesos Scale Apache Mesos on Windows Server ※拥抱或对抗?谈Docker对传统DevOps工具链的冲击 Slide DevOps How to recreate your system (如何在另外一个地方重新建立、从无到有) How to safely change your system (如何改变你的系统) When something has gone wrong (当系统发生状况,如何快速地知道与解决) detection recovery diagnosis 除了DB 之外,其他服务很难裸机,通常都用VM 来处理,但是使用VM一开始就会消耗硬体10%资源 Container OS 是否OS要不要这么肥? 作业系统瘦身 CoreOS Windows Nano Server Snappy Ubuntu Core VMWare Photon Red Hat Atomic container per vm 每一个 container 的用途是用来跑单一VM unikernel MirageOS、Boxfuse boxfuse 把东西convert 成image 并丢到AWS上run docker immutable image versioned image devlprod parity 以后电脑的功用是开好SSH、系统参数设定完后,剩下就交给Docker pets and cattle 差别 有名字 是否可以抛弃 传统 AP (宠物开发) 很难移植、必须好好照顾 牲畜开发法 由电脑帮你决定要丢到哪一台电脑上执行 可以容易复制与转移 参考12 factors docker swarm、Mesos.... kubernetes rolling upgrade canary deployment ※如何在Kubernetes上持续部署微服务型应用 simple microservice program language : go backend (json) frontend (html) kubernetes manage a cluster of lunux containers as a single system opensource 5 basic things cluster one master and at least one node kubernetes as a managed service pod (感觉就像docker一样) co-located docker containers containers share volumes and localhost pod.yaml (很像docker compose,给master 使用) Service abstraction to communicate with pods have frontend & backend services namespace have own resources Continuous Depolyment commit often deploy every commit validate and rollback deploys minimize human interaction code -> test -> commit -> push -> build -> test continuous deployment Jenkins workflow plugin docker image 要设定别名,这样之后才可以管理 ※深入理解Dockerfile、Docker映像档以及Docker容器 docloud 公司业务介绍(http://www.daocloud.io) daoship 持续交付流水线 daohub 可追朔的交付件仓库 突破城墙! Docker hub 镜像 daocloud 快云端网的容器集群管理 Agenda Docker introduction 容器技术:有效分配与管理物理资源,实现资源隔离 对容器来说,关注的点有没有linux kernel 资源隔离( 除了CPU、RAM、kernel 也是一种资源, 镜像技术 打破代码即应用的观念,从系统环境开始,自底至上打包应用 let infar as a code windows 对 ap 层实现容器技术 dependency、configuration docker 化实践 dockerfile -> docker image (can ship anywhere) -> docker container dockerfile 定义一切 Dockerfile cache 先看作这一步动作的时候Image 有没有变,没有变再看看 docker image 一个 image 由多个层来组合 一些资料不应该存入,如hosts、hostname、resolv.conf docker container 不存在传统的 init 进程 缺少基本的服务进程 与内和进程通信能力薄弱 docker 比较适合高层次的AP,如果是跟系统硬体设备比较相关,要管理和监控比较不足 cache docker 服务的最终交付 受到资源的隔离与控制 收到权限的控制 linux container & linux kernel 都是 root container 内部与container 外度的root 有巨大的差异 支撑用户应用的运行 docker engine 对于docker container 有比较好的管理 ※和信云端 Container 实战经验 container cluster scale full tolerance container 角度,增加 container instance benefits of collaboration cloud native computing more than just the container hybrid cloud ※深入了解 Docker Container Networks 网路处理机制 bridge (很久以前一开始 RUN 的版本) none (啥鬼都没有) host ( container和主机网路组态相同) container used-defined network 以前只有在同一台底下的container 可以互相沟通,现在不同台主机的container 可以互相沟通 docker network commands docker network create/connect/ls/rm/disconnect/inspect 不同 bride 的 container 不能相通 inspect 可以看到每个container 底下网路的状况 overlay network (让不同台主机的container 可以彼此互连) prepare a key value store add cluster options to each docker engine docker engine run 起来要加参数 --cluster-store=consul://ip:8500 --cluster-advertiser=eth1:2376 create on overlay network on one of the host host 上要create overlay network 所有有加入这个consul 的device 就可以看到 可以一台主机在Azure,另外一台在digital ocean ,两台再串起来 eth0 用来做 overlay network weave network plugin 有好用的介面让你看状况 ※用Docker Swarm打造多主机丛集环境 Slide 让一个 container 让多个 container 存取 docker machine 启动swarm master 再启动swarm node Port Allow 特种不同的云端平台需要开的PORT 不同 docker engine port (TCP 2375) VXLAN:UDP4789 注意Kernel版本 透过key-store 让swarm master node 知道彼此位置 ※Q&A docker 版本更新很快,该如何跟上步调? 参考云端服务者使用的版本 云端服务提供的版本一定不是最新版,但是该版本会和云端服务整合的最好才会提供该版本服务 知道每个版本的功能,升级上去并做测试,不要用xx0 的版本 微博经验 大量的测试、压测之后才上线 目前也只有用过1.3.x , 1.6.2 这两个版本 记忆体问题 JVM 如果要考量scale与稳定性,自己要做好记忆体管理,了解memory limit、heap size JCCONF 有人讲过相关的主题,可以参考连结 eBay 经验 主机装VM,每个VM 底下再装Docker or Container performance 对 eBay 不是考量 人的 development cost 比较高 结论:有钱真好 拥抱 docker 有什么 business model 是一个趋势 以前的程式只能在旧的OS执行,OS升级后程式还要继续支援,这样能够降低dependency 弹性调度资源、硬体资源的管理、自动化的安装 自我思考 思考开发、维护对现有工作可以带来的改变 调整开发思维 (宠物与畜生牲畜) 发明一个新的container 技术不是太困难,但是要做得像docker 一样好,拥有好的ecosystem 、并且把使用者从docker 转移到其他的container 技术才是困难的。 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|