k8s与caas--容器云caas平台的落地实践
前言
在移动互联网时代,新的技术需要新技术支持环境、新的软件交付流程和IT架构,从而实现架构平台化,交付持续化,业务服务化。容器将成为新一代应用的标准交付件,容器云将帮助企业用户构建研发流程和云平台基础设施。缩短应用向云端交付的周期,降低运营门槛。加速向互联网技术和业务的双转型。容器云将对接各类代码托管库,实现自动化持续集成和DOCKER镜像构建,为新一代应用交付和开发运维一体化奠定了基础。容器云将支持应用的一键式部署交付,提供负载均衡,私有域名绑定,性能监控等应用生命周期管理服务。是微服务架构,轻量级应用部署和运维的理想平台。未来IT界会以容器化应用作为交付的标准。容器云为开发者和企业提供了一个快速构建、集成、部署、运行容器化应用的平台,从而提高应用开发的迭代效率,简化运维环节,降低运维成本。
对于企业来说,容器云价值体现在:
- 作为内部技术纽带,多应用统一部署平台,提高开发效率,减少运维成本。
- 平台产品化过程中,投入少且产出价值高。可依托现有的IaaS平台资源,相对于传统的承接项目获益的方式,容器云会积累宝贵的客户资源及数据资源,这些无形资产最终会为公司赢得巨大战略价值。
- 增加云企业辨识度,如果只具有IaaS层服务的云平台是不完整的,对用户的云服务是不充分的,应该具有为用户提供全方位的云服务体系,应该具有先进且高附加值的云平台。
应用功能架构
基于Kubernetes实现的容器云平台,就功用而言可以分为四大部分:
- 自动化容器的部署、升级和复制;
- 随时扩展或收缩容器规模,实现容器的弹性扩展;
- 以集群的方式运行、管理跨机器的容器,并且提供容器间的负载均衡;
- Kubernetes的自我修复机制使得容器集群总是运行在用户期望的状态。
未来容器云也可能会成为云管理平台的统治者,也还会有更多的应用在容器云上原生运行起来。因为对于容器云,它可以把很多分散的物理计算资源抽象成一个大的资源池,利用这些资源来执行用户的计算任务。对于用户来说,操作一个分散的集群资源就像在使用一台计算机。人工智能的集中式爆发,机器学习的训练过程对于快速迭代的高要求,让能够轻量级接入,并且可以对用户提供秒级响应的容器云发挥了巨大的优势。师出同门的Google Tensorflow项目很早也进行了与Kubernetes的集成,人工智能平台上实现了Spark on Kubernetes和 Hadoop on Kubernetes。无论是容器技术,还是DevOps和微服务,都说明灵活、弹性、轻量化的IT应用模式逐渐形成。而这种模式的形成对于复杂产品的快速开发有着积极意义,谷歌等IT巨头对产业的贡献,让初创企业与大型IT企业之间的差距缩短,迎来最好的IT时代。容器云架构方案,具有六大功能模块,每个部分包含对应的容器技术栈。具体架构如下
存储方案
后端存储主要采用 Ceph 驱动。Ceph 独一无二地用统一的系统提供了对象、块、和文件存储功能,它可靠性高、管理简便、并且是自由软件。 Ceph 的强大足以改变贵公司的 IT 基础架构、和管理海量数据。 Ceph 可提供极大的伸缩性——供成千用户访问 PB 乃至 EB 级的数据。 Ceph 节点以普通硬件和智能守护进程作为支撑点, Ceph 存储集群组织起了大量节点,它们之间靠相互通讯来复制数据、并动态地重分布数据。Ceph在容器云中主要应用场景是有状态服务。包括关系型数据库和nosql数据库等数据需要持久化的业务。
网络方案
底层容器网络我们最初使用的是Calico。 Calico基本架构图 Calico是一个纯三层网络,没有引入一个DP,没有封包。在主机内部做另外一个容器,可以三条到达终端,你可以知道是谁出了问题,调试的时候很容易,很好管理。容器内的应用数据传出来,和二层完全隔离,对于我们绝大多数的应用来讲只需要三层就够了,很少有应用处理二层。而且Calico支持丰富的网络策略,可以实现多租户管理,对于未来对外提供容器云服务至关重要。
容器编排方案
Kubernetes是谷歌开源的容器集群管理系统,是Google多年大规模容器管理技术Borg的开源版本,主要功能包括:
- 1.基于容器的应用部署、维护和滚动升级
- 2.负载均衡和服务发现
- 3.跨机器和跨地区的集群调度
- 4.自动伸缩
- 5.无状态服务和有状态服务
- 6.广泛的Volume支持
- 7.插件机制保证扩展性
Kubernetes发展非常迅速,已经成为容器编排领域的领导者。Kubernetes提供了很多的功能,它可以简化应用程序的工作流,加快开发速度。通常,一个成功的应用编排系统需要有较强的自动化能力,这也是为什么 Kubernetes 被设计作为构建组件和工具的生态系统平台,以便更轻松地部署、扩展和管理应用程序。用户可以使用Label以自己的方式组织管理资源,还可以使用Annotation来自定义资源的描述信息,比如为管理工具提供状态检查等。此外,Kubernetes控制器也是构建在跟开发人员和用户使用的相同的API之上。用户还可以编写自己的控制器和调度器,也可以通过各种插件机制扩展系统的功能。这种设计使得可以方便地在Kubernetes之上构建各种应用系统。目前整个kubernetes集群采用高可用部署,架构如下图:
性能监控方案
容器监控的对象主要包括 Kubernetes 集群(各组件)、应用服务、Pod、容器及网络等。这些对象主要表现为以下三个方面: 1.Kubernetes 集群自身健康状态监控(5个基础组件、Docker、Etcd、Calico等) 2.系统性能的监控,比如:CPU、内存、磁盘、网络、filesystem 及 processes 等; 3.业务资源状态监控,主要包括:rc/rs/deployment、Pod、Service 等; 针对容器的整体运行状况及性能状况监控,采用了自研的监控系统实现整体IT资源的统一监控。
日志收集方案
容器平台的日志系统一般包括:Kubernetes 组件的日志,资源的事件日志及容器所运行的应用的日志。本容器云平台,使用fluentd(以DaemonSet的方式启动)来收集日志,并将收集的日志发送给统一日志平台。
CI/CD方案
CI/CD(持续集成与部署)模块肩负着 DevOps 的重任,是开发与运维人员的桥梁,它实现了业务(应用)从代码到服务的自动上线,满足了开发过程中一键的持续集成与部署的需求。本容器云平台,对接持续集成&发布系统。除此之外,实现服务扩缩容,弹性伸缩(HPA)、负载均衡、灰度发布等,也加入了代码质量检查(Sonar)、自动化测试及性能测试插件等,这些都是 CI/CD PaaS 平台的重要组成部分。
云平台功能
通过可视化界面,可以简单方便的实现对资源的部署、管理与监控,包括:资源编排。可以实现以下功能: 1.全面监控:主机、路由器、硬盘、公网IP、负载均衡器都具备完整全面的历史监控和实时监控信息。 2.开放式的图形化操作: 直观展示主机及其相关资源,并可以直接操作图形,所有改动自动更新。 3.操作日志记录: 记录下用户所有重要操作历史,方便定位和查找。 4.网络拓扑结构展示: 用图形展示复杂的网络拓扑结构,连接私有网络和主机更加方便直观。 5.备份链可视化操作: 对于备份各节点一目了然,同时可直接操作新建备份及回滚到之前的状态。 6.自动伸缩策略: 根据资源监控信息定义自动伸缩策略,调节资源配置或集群规模,无需人工介入。 7.通知列表: 用于接收监控告警通知、定时器任务或自动伸缩策略的执行结果。 8.快速的系统构建: 使用资源编排,可以在短短几分钟内迅速复制一套已存在的拥有复杂拓扑的系统;或者迅速规划您的系统架构并评估成本;还可以实现资源拓扑的跨区域复用。 9.丰富的模板创建方式: 在控制台中,用户可以从无到有构建模板;也可以从系统推荐的常见模板入手创建,或基于已经创建的模板继续完善;还可以将已经存在的资源抽取出一套拓扑关系成为模板。
总结
caas平台衍生出来的整个devops体系是至关重要的。最终实现打通日志,监控和apm数据,算法实现根因分析,也就是AIOPS。能够快速定位故障。快速反馈到运维和开发,形成一个闭环。
Gartner定义的AIOps平台拥有11项能力,包括历史数据管理( Historical data management) 、流数据管理( Streaming data management )、日志数据提取( Log data ingestion) 、网络数据提取( Wire data ingestion )、算法数据提取( Metric data ingestion )、文本和NLP文档提取( Document text ingestion )、自动化模型的发现和预测( Automated pattern discovery and prediction )、异常检测( Anomaly detection )、根因分析( Root cause determination )、按需交付( On-premises delivery )和软件服务交付( Software as a service )等。当然这是后续和正在做的工作。