一、项目背景和原因1.1 什么是容器云1.2 容器和虚拟机的区别1.3 为什么要建设容器云1.4 我们的建设目标1.5 建设过程可能存在的风险二、容器云PaaS平台构建2.1 总体技术架构2.2 设计原则2.3 总计规划三、容器云平台关键技术选型3.1 容器核心技术3.2 容器编排技术3.3 容器网络技术3.4 其他四、可行性评估结果及建议
原创 橘右京 DevOps运维实践
一、项目背景和原因
目前我司开发测试环境是基于VMware技术完成的IaaS(Infrastructure as a Service)虚拟化建设,通过对基础架构资源的云化和池化,一定程度上降低了运维复杂性,提升了资源的使用率,但是这些资源并不能被直接消费,在日常使用使用过程中仍面临如下问题期待解决,也可以说是我司的痛点:
1.资源利用率问题;除了OS本身的资源占用,不同业务场景对资源需求也不一样,例如cpu密集型、内存密集型、网络密集型等。
2.扩缩容效率低;环境不易复制,搭建繁琐,无法满足大规模快速弹性部署的要求。
3.混合部署交叉影响;单台机器多个服务,可能存在互相影响。
4.测试环境不稳定;多个项目同时开发测试,造成测试环境不稳定。
5.不支持快速迭代,业务上线效率低;不支持在线应用环境申请和配置及切换、频繁发布升级浪费人力且低效。
随着容器技术的不断发展和完善,容器云的价值逐渐被发掘,使我们看到构建基于容器技术的轻量化PaaS--容器云平台的可行性。
1.1 什么是容器云
容器云,是轻量化PaaS平台的一种容器化实现方式,是基于容器技术、容器调度编排技术和支撑容器运行操作系统技术、分布式技术上构建的云计算平台。
从PaaS功能来说,容器云可以提供从应用的开发、部署,到运维的全流程生命周期管理,实现应用的自动伸缩、弹性扩展、灰度发布以及监控告警、故障分析、自动迁移、自动恢复;提供丰富的预集成服务, 把通用的软件能力服务化,使得应用能快速拥有分布式的高可用性、高可扩展性;通过对底层资源的抽象和资源层的隔离,尽可能地共享或平摊资源,以提高资源整体使用率,从而降低基础设施的投入。
1.2 容器和虚拟机的区别
容器虚拟化是在操作系统层面上实现的虚拟化,直接复用本地主机的操作系统;而传统虚拟机则在硬件层面上实现。
容器比虚拟机具有如下优点:
1)更快速的交付和部署,可以实现一处创建,处处使用;
2)更高效的虚拟化,属于内核级虚拟化,不需要额外的虚拟机管理器,性能和效率更高,启动时间为秒级;
3)更轻松的迁移和扩展,容器几乎可以在任意平台上运行,这种兼容性可以满足用户平台迁移和扩展的需求;
4)更简单的管理,容器中所有修改都是增量方式进行分发和更新,能够实现自动化的管理。
1.3 为什么要建设容器云
我们提出建设容器云平台也是基于现实的挑战,容器云可以从本质上更好的契合新形势下金融公司所面临的问题,给我们带来以下好处:
1.标准化应用的部署和交付:采用容器镜像的方式实现运行环境的标准化,屏蔽应用部署过程中针对不同环境需要的环境配置、安装步骤等复杂过程。
2.促进Devops的落地实施:容器build、ship、run的理念及其技术特点,更够更好的与CI/CD技术进行融合,促进CI/CD理念的落地。
3.有效整合现有资源:容器可实现对企业已有异构基础资源的统一化管理,屏蔽环境差异性,降低系统运维难度;
4.提升资源利用率:容器是基于操作系统的轻量级虚拟化技术,可有效节省操作系统级资源开销,通过容器密度的提升更好的利用资源;
5.微服务架构支持:提供微服务应用的应用注册中心、日志中心、监控中心、容器调度及编排服务,为客户中心、服务中心等这类按照微服务架构开发的应用提供基础环境支持。
6.加速企业软件资产积累:镜像仓库有利于更好的沉淀和积累企业软件资产,从而更加快速高效的提供各种运行环境。
7.可以让应用真正意义上弹性扩缩容。容器云环境下,应用和基础环境资源是解耦的,应用的扩缩容不需涉及基础环境资源的扩缩容,仅仅需要修改应用部署模板文件中的副本数,整个扩容或缩容流程可以在数秒到数十秒内完成。这样当应用面临突发业务量增长,需要紧急扩容的时候,就可以非常快的完成,实现了真正意义上的弹性扩容。与时俱进。
1.4 我们的建设目标
容器云的建设以服务应用开发为中心,将业务应用中的功能性需求如高可用、弹性伸缩、灰度发布、监控告警、日志存储等,通过容器云平台统一实现,并解决应用全生命周期管理、中间件云服务、基础资源利用率等问题,从而降低基础设施的投入。
最终,我们希望通过容器化平台的建设,一方面逐步建立标准化的开发、测试、运维环境,满足业务快速开发和迭代的需求,提升IT对业务变化需求的快速响应能力;另一方面通过采用标准化的容器技术和标准化的镜像输出,为开发测试提供一致性的环境,提升自动化运维的水平。
1.5 建设过程可能存在的风险
容器云虽有诸多好处,但采用和实施容器云也存在不少风险。
容器技术是近年新兴开源技术,发展变化快。
首先存在技术风险,因为容器云技术涉及众多的组件,众多的技术,不仅仅是Docker+ Kubernetes,网络、存储、日志、监控、安全、微服务等等,要想一下子全部掌握很难,存在一定的技术风险。
其次是人力风险,发展变化快意味着很多人可能跟不上技术的变化,技能和经验不足,缺乏深入的认知。
再者容器是弱安全的,在建设容器平台时,除了要具备市场上大多数容器平台产品的能力,还要重视满足金融行业严苛的监管和安全要求。
二、容器云PaaS平台构建
2.1 总体技术架构
2.2 设计原则
(1)先进性和成熟性
(2)开放性和标准化
(3)可靠性和安全性
(4)可维护性和易用性
2.3 总计规划
VMware虚拟和容器并存,按照试点先行、分步推进的原则,容器云平台建设计划分为4个阶段:
第一阶段:容器云基础平台建设。
架构设计、集群设计、资源分区 搭建容器云PaaS基础平台和容器云管理平台 打通容器云PaaS平台与IaaS层资源管理接口
第二阶段:中间件容器化改造
基础组件改造(redis、mysql、rabbitmq、zookeeper等)容器化设计、改造和迁移部署。
第三阶段:部分应用项目容器化改造、迁移
部分非核心非实时应用的容器化设计、改造 分批分阶段迁移和部署 验证运行稳定性,积累迁移经验 建立标准化的镜像打包规范,开发规范,管理规范,运维手册等
第四阶段:统一管理、持续运营
结合DevOps管理流程实现持续集成和持续部署。
通过对以上四个阶段的分步实施、效果评估和持续改进,为我们容器PaaS平台落地提供一个快速可行的路径。
三、容器云平台关键技术选型
3.1 容器核心技术
目前典型的容器虚拟化技术主要有Docker公司的docker引擎和CentOS的rkt引擎,rkt理论上在安全性和兼容性方面更好,但缺乏生产实践,目前用户大部分使用Docker,Docker社区也更活跃,目前大部分容器厂商都首选Docker支持,rkt的成熟度仍显不足,因此容器引擎我们选择Docker引擎。
3.2 容器编排技术
光有能装应用的容器还不够,如果还是人工管理那么多容器,那也发挥不出容器的优势,所以我们需要一个容器编排系统。容器编排能提供以下功能:
1.应用调度:应用部署、无缝升级、弹性扩展、自愈等。
2.资源管理:内存、CPU、存储空间、网络等。
3.服务管理:命名空间、负载均衡、健康检查等。
4.以及很多其他功能,如日志、监控、认证、授权等。
当前容器编排领域最主要的三个调度框架是:Docker Swarm、Mesos和Kubernetes。
Swarm:是Docker原厂编排引擎,但功能过于简陋,比较适合小型的集群管理。
Mesos + Marathon:是一个成熟的解决方案,但是社区不够活跃,而且使用起来需要熟悉两套框架,学习曲线过于陡峭;Kubernetes:k8s是专门针对容器技术提供的调度管理平台,更专一,社区非常活跃,配套的组件与解决方案较多,使用其的公司也越来越多,通过和一些公司沟通,他们也在逐步的将Docker应用从Mesos迁移到Kubernetes上。下面表格为我们关注点的一些对比情况:
通过以上对比,考虑到技术的快速变化和后期升级维护的需要,Kubernetes是目前最好的选择。
3.3 容器网络技术
网络模型是任何云环境都必须面对的问题,因为网络规模一旦扩大之后,会带来各种问题。网络选型这块,针对Docker和Kubernetes的特性,暂时对六种组网方式进行了对比,如下所示
根据集群规模,建议采用flannel或calico,或其他开源网络组件。
3.4 其他
四、可行性评估结果及建议
基于以上的分析评估,我们建议可以采用容器云技术实施容器云,以尽快搭建公司私有容器云基础设施平台,建设持续集成、持续部署、持续反馈的闭环应用研发流程。提升公司自主研发能力,提高对业务需求的响应能力。
Ps.本文大体完成于2020-2021年左右,文中引用到的技术可能已略显陈旧,请谨慎参考,及时技术迭代。