写在前面
这是奇点云全新技术专栏「StartDT Tech Lab」的第4期。
在这里,我们聚焦数据技术,分享方法论与实战。一线的项目经历,丰富的实践经验,真实的总结体会…滑到文末,可以看到我们的往期内容。
本期由奇点云运维体系建设负责人「黑白」带来:
作者:黑白
中国互联网发展至今也不过二十余载,各种技术层出不穷、百花齐放,主流基础设施也从IDC服务器、虚拟化、云计算发展到现在的容器化。
在单一服务的环境中,传统的系统架构具备快捷启停的优势,但是在微服务、多环境、高并发、弹性伸缩的挑战下,传统的架构模式明显力不从心。
那如何解决这些问题呢?容器化!
简介
为什么需要容器化应用?容器化是什么?
了解容器化,那就不可避免的需要了解Docker。Docker是一个虚拟环境容器,可以将开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。
比如,在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意想部署到的环境。
那为什么需要容器化应用呢?总结来说,在传统架构模式下遇到的问题主要为部署繁琐,日志不规范、采集困难,资源使用不完全,扩容成本高,环境管理困难。这个时候,为了解决上述问题,奇点云决定使用容器化部署应用。
容器化方案
企业使用容器化,可以清晰发现有如下好处:
01 持续CI/CD
CI/CD即持续集成持续交付。容器消除了线上线下的环境差异,保证了应用生命周期的环境一致性标准化。开发人员使用镜像实现标准开发环境的构建,开发完成后通过封装着完整环境和应用的镜像进行迁移,由此,测试和运维人员可以直接部署软件镜像来进行测试和发布,大大简化了持续集成、测试和发布的过程。
02 可移植性
云计算的一个显而易见的缺点是:一旦你迁入某云服务提供商,随着数据的累积和系统的建设,就很难再进行迁移。然而,利用容器化,当需要迁出服务提供商时,企业不再需要在缓慢的WAN链路上迁移庞大的虚拟机。相反,小巧的容器使它在云上的迁入和迁出非常简单。
03 环境标准化和版本控制
基于容器镜像,相较于基于程序代码进行版本控制来说,最明显的优势就是,对整个应用运行环境实现版本控制,一旦出现故障可以快速回滚。相比以前的虚拟机镜像,容器压缩和备份速度更快,镜像启动也像启动一个普通进程一样快速。
04 高资源利用率与隔离
容器化没有管理程序的额外开销,与底层共享操作系统,性能更加优良,系统负载更低,在同等条件下可以运行更多的应用实例,也可以更充分地利用系统资源。同时,容器拥有不错的资源隔离与限制能力,可以精确地对应用分配CPU、内存等资源,保证了应用间不会相互影响。
当然,单纯的使用docker容器化还是不够的,需要考虑:
如何管理成百上千的容器
如何方便地横向扩展
当容器down(异常停止)后,如何自动恢复
如何更新容器而不影响业务
如何去追踪和监控容器
如何调度容器的创建
如何保护隐私数据
这时候,就用到了容器编排工具。
目前市场上包含了Swam、Fleet、Mesos、Kubernetes等主流容器编排工具,奇点云选择了当前最热门、契合度最高的容器化编排工具 - Kubernetes(K8s) 。
Kubernetes主要特点表现为:
自动化部署和回滚
自动可伸缩性和可控性
隔离容器
跟踪服务运行状况的能力
服务发现和负载均衡
充当提供服务的平台
它的优势如下:
提供完整的企业级容器和集群管理服务
有据可查且可扩展
调整工作负载而无需重新设计应用
降低资源成本
部署和管理的灵活性
由于容器隔离,增强了可移植性
许多云提供商使用Kubernetes来提供托管解决方案,因为它是容器编排工具的标准
(左滑看看)
组件选型
在设计K8s集群环境时,我们充分考虑了异地冗余高可用,在多个地区进行多集群跨域部署,并在部署工具、集群管理工具、数据存储、集群网络、CI/CD、Edge Router、监控、日志系统、Repository等方面进行丰富的选型。可以看以下图示:
图源:黑白
(可戳上图放大看)
经过一个多月的反复实验考量,我们最终确定了整体的应用架构框架:
图源:黑白
下图为K8s集群的基本网络应用架构框图。
图源:黑白
K8s集群CNI网络采用了Flannel。Flannel是容器编排系统中最成熟的网络结构示例之一,旨在实现更好的容器间和主机间网络。与其他方案相比(Calico、Canal、Weave),Flannel相对容易安装和配置,默认和推荐的方法是使用VXLAN,因为VXLAN性能更良好并且需要的手动干预更少。
流量访问通过负载均衡指向K8s worker node节点的Traefik(Traefik为HostNetwork网络模式,端口为80)。Traefik通过IngressRoute,解析访问域名,指向访问目标。Prometheus集群则负责监控K8s集群及微服务健康情况(微服务暴露Node-Exporter端口),同时通过Skywalking Agent监控微服务的访问链路情况。Zookeeper为JAVA微服务的注册中心。每一个微服务都伴随一个Sidecar容器 - Filebeat客户端收集容器日志,将日志传输至ELK。
数据开发与管理平台的容器化难点
奇点云数据开发与管理平台DataSimba的逻辑视图从上到下分为:展示层、网关、应用服务、基础服务、计算层、数据存储。
从运维的角度看DataSimba架构
我们可以看到,前四层的容器化其实跟正常微服务容器化相似,容器化方案实现起来相对较简单一点。最困难的还属后两层:计算层和数据存储。消息中间件Kafka、关系数据库Mysql等大部分都是有状态数据,数据实时性和可用性要求高,容器化改造实现难度大,但在整个数据平台部的不断推进下,DataSimba越来越多的组件实现了容器化。
总结
容器化技术不仅具备技术优势,也带来了商业价值:
更小的计算开销,节约了大量的成本;
可移植性,增加了跨平台部署的方案;
低风险的快速部署,使服务部署更简单,业务风险更低。
在容器化技术的推动下,相信我们的云原生数据中台产品会更进一步。
关于作者 | 黑白
奇点云数据平台运维工程师,奇点云运维体系建设负责人,数据中台云原生运维负责人。