1基于容器的CI以及CD卢丹2016/05/242Agenda•唯品会现状•唯品会PaaS功能点•唯品会PaaS选型•唯品会PaaS架构•唯品会构建部署流程•唯品会PaaS定制•遇到的问题•唯品会PaaS使用情况3唯品会现状•一个应用对应一个域,有1000+个域,各个域间依赖复杂,部署发布困难•无统一持续集成和部署流程•多套测试环境部署升级以及管理复杂•目前支持VIP电商业务的有物理机1w+,物理机模式下,资源无法共享,导致物理机的利用率大部分都比较低,即使在7周年大促的高峰时段,60~80%的物理机利用率也都低于10%4•构建•部署•测试集•空间管理•镜像管理唯品会PaaS功能点5•K8s虚IP的概念符合唯品会应用模型•K8s功能完善开发工作量相对少•K8s社区活跃•团队已有成员参与k8s社区提交代码唯品会PaaS选型6唯品会PaaS架构DashboardSecurityImageMangementResourceQuotaLog(fluentd+kafka+ELK)CloudFrameworkK8sproviderSwarmProviderAnycloudproviderMessage(GNATS)Monitor(Prometheus)ServiceDiscorvery(skydns)APIServerServiceGateway(nginx+tomcat)7唯品会构建部署测试流程DeployandRunBuild•Package•BakeImageK8scluster(build)jenkinsk8spluginK8sclientUploadvipregistryandciderTest(VTP)jenkinsk8spluginK8scluster(deploy)Labelpackageandimage8唯品会PaaS定制–Docker网络1.创建vethpair2.从IPAMcontroller拿到IP/Tag设置到容器中3.在stop容器将容器IP保留至config.json以保证重启容器IP不变9唯品会PaaS定制-Kubernetes•JenkinsKubernetesPlugin–jenkinsslave容器调度策略•不同环境对外域名负载均衡–gorouter10•网络替换Flannel+VXLAN,修改kubelet直接使用Docker网络方案OVS+VLAN唯品会PaaS定制-Kubernetes11•使用HAProxy+KeepAlived替换kube-proxy唯品会PaaS定制-Kubernetes12•DockerRegistry改造–认证以及授权–PushNotification自动触发部署–镜像信息存入数据库进行index以及search–记录用户对于DockerRegistry操作唯品会PaaS定制–Registry13•使用nodeagent方式监控单个pod实例•Promethus监控收集监控集群数据–定制Promethus实现基于Swarm的服务发现唯品会PaaS定制–监控14唯品会PaaS定制–Log&Alert•日志收集处理–Fluentd->Kafka->Logstash->ElasticSearch•日志告警–ElasticAlert(应用日志)15•Devicemapperloopback性能问题–Production使用direct-lvm•Startingcontainerfailswith'Systemerror:readparent:connectionreset...