Docker在企业落地需要考虑的重要因素
了解了Docker的build 、ship、run以后,就可以让一个容器运行起来,在虚拟机普及以后,企业的服务器数量就开始了快速增长,容器在企业中普及以后,容器的轻量级决定了容器的数量也将出现爆发增长,容器多了以后会出现一系列的问题,是否要通过集群来管理主机?容器在不同主机上怎么调度?容器需要配置管理吗?怎么实现负载均衡?怎么自动扩容?容器中应用的日志如何管理?怎么支撑CICD?容器状态怎么监控?如何定义容器间的逻辑关系?由于这些问题,提出了容器编排技术,这样的编排泛指广义的编排,用于管理容器下的主机,管理容器以及容器间的逻辑关系,即应用架构。
Orchestration
集群管理:容器平台是由一系列的主机来提供计算资源,通过集群管理技术将这些主机管理起来,获取这些主机的配置信息,实时资源使用情况,并可以快速增加主机节点并且需要保证整个集群的高可用性。(配置管理,资源视图,节点增删,高可用)
容器调度:集群管理让我们知道每一个主机的资源使用情况,我们可以将容器平均的部署到各个主机上去,并且可以在某个主机资源紧张的情况下可以让容器在其他主机上跑起来,还可以设定调度策略来实现将某几个通信紧密的容器总在同一个主机上运行,或者某些资源消耗大的容器总是运行在不同的主机上,这是所谓的互斥。(容器部署,调度决策,互斥)
故障恢复:容器平台需要具备对主机和容器的健康性检查。当主机出现问题的时候,需要在其他主机上将容器启动起来,并做好相关的服务注册;当容器出现问题的时候,需要将容器重启或重新部署来保证容器的健康运行。(主机检查,容器检查)
应用编排:容器时代,应用是一个个细微的容器来组成,每一个容器之间具有一定的逻辑关系,需要使用简单明了的编排语句将这些容器关联起来,如容器之间的端口访问,容器的启动顺序等,从而实现整个应用的逻辑架构。(应用编排)
三大Orchestration工具
当前主流的三大编排工具是Swarm、Mesos、Kuvernetes。
负载均衡与服务发现
有了编排工具,还需要结合一些工具来实现负载均衡和服务发现。
负载均衡:请求到达负载均衡器后,负载均衡器将请求平均分配到每一个容器上,常用的负载均衡技术有haproxy、LVS、F5、Nginx。
如果后面容器新增加了或减少了,负载均衡器时如何知道的?这里涉及到服务发现相关技术。如下图,服务发现技术将自动把容器的配置信息上传给配置中心,包含了容器的IP、端口、对外域名等。负载均衡器会周期性地从配置中心获取相关配置信息,并将容器加装到负载均衡器访问架构中。常用的服务发现技术有Etcd、Zookeeper、Consul。
日志管理
在容器时代,对日志管理工具要求很高,包含了集中化管理、实现海量存储、能够灵活过滤、快速查询等,可伸缩、可扩展、高可用,以及具备强大的UI来进行使用。
当前成熟流行的开源日志管理平台ELK可用满足容器平台日志管理的需求。ELK包含三个组件:
LogStash:用于手机各种各样的日志
ElasticSearch:用于存储和搜索日志
Visualize:用于界面展示的管理工具
Docker监控
对于完整的Docker平台而言, 通常还有考虑监控的问题,包括从主机、镜像、容器、应用等几个维度进行监控,并构建监控、相关告警、跟踪、相关监控等这样的流程体系,即WANT原则。当前常用于容器平台的监控工具:Zabbix、Nagios、cAdvisor、Datadog、Scout。
Docker平台架构
首先是平台层。底层需要对计算、网络、存储等资源进行管理,结合容器引擎和容器编排工具实现容器化应用的落地。其次是能力层,需要实现容器化应用的弹性架构、负载均衡等,需要实现对平台的统一监控和统一日志管理,需要有严格的权限体系实现对用户、租户的管理。平台还要提供应用的Web UI 和功能齐全的API服务。
Docker平台技术体系
编排、持续集成、日志和配置管理
集群管理、数据库、监控