基于微服务架构,实解容器级DevOps平台的建设

简介: 本文作者为普元软件产品部主任架构师顾伟,文章分享了基于微服务架构,建设可以同时运行在公有云和私有云上的容器云平台的实践经验,以及容器技术栈和架构等。
导读:本文以“实践过程中问题与思考”为主体,与大家分享其中的过程和经验,希望大家在后续的工作中能够避免相关问题,形成更佳实践。

首先简单说下我们要做什么,不谈理念,不谈哲学,我们要做一款基于微服务架构,可以同时运行在公有云和私有云上的容器云平台,以DevOps为目标,提升协作效率,快速交付。

为什么选择阿里云

现在的公有云如雨后春笋,国外如AWS、Azure、Bluemix,国内如阿里云、腾讯云、DaoCloud、goodrain等,都可以给大家提供丰富的云基础设施和上层服务,那为什么选择阿里云呢?主要有三点想法:
1. 我们使用阿里云的服务已经有5年了,从企业级PaaS平台合作开始,再到帮助我们的一些客户逐步迁云,对阿里云的能力还是比较熟悉的。
2. 因为要做的是容器,国外AWS,Azure虽然有,但AWS在中国一直没“正规”数据中心(唯一的一个前几天还被查了),Azure是微软体系(也许是心里作祟,总感觉不对口...);而国内虽然一些公有云有容器能力,但规模普遍偏小;再者,阿里云反正也开始做容器了,说明人家底层还是有支持能力的。
3. 当然,还有一个做法,自建数据中心或租赁IDC,不过做事情还是得慢慢来(我们又不是暴发户...),不到一定规模,这个前期投入还是有点大的。

怎么用阿里云

有人问,在IT领域,现在跟10年前比,对技术人员或架构师要求有什么不同?
我是这么来看的,以前大多数是做加法 —— 每个领域就那几个产品或框架,需要的更多是集成能力;现在是要做减法,因为技术栈太多了(全栈工程师不好当呀...),到底选哪些,这往往是最考验能力的。
我们最终选择了Kubernetes+CoreOS+Docker的组合,当然少不了辅助的Etcd、Flannel...,大家可能会问,为什么不用ubuntu、ranchar啊,为什么不用OVS啊,其实我们都是有理由的,这篇文章里不是重点,私下交流。
那紧接着要做什么也就明了了,在阿里云的ECS上先跑CoreOS(Docker反正自带了),然后去部署Kubernetes那一整套,验证验证技术可行性吧,可以的话,再做分布式存储,然后支持DevOps,自动化运维,先后顺序也很好选。

没有问题是不可能的

大家可以到阿里云官网上去搜下Docker,或者KVM类似的,映入眼帘的是这个:
 
千万别气馁,因为都有CoreOS镜像了,不支持Docker谁信(其实阿里云还是蛮务实的,没有经过严格测试不敢说支持),好歹也得试一试,于是就先买了几台CoreOS机器,接下来做的一些事情就不那么顺利了:
1. 先做系统升级(默认版本比较低了,681.2.0 64位),那大家都知道外网流量很贵,所以最好搭个内部升级服务器,在升级后发现网络有问题,进不去,内部进入发现原因是网络没起来,这工作只有先手工做了(systemctlrestart systemd-networkd.service)
2. 升级完了,最好的习惯是去打快照(当然,这个服务过些天就要收钱了,还挺贵的...),发现没打出来,这个问题排了好久,最后的原因是自作孽啊,删了个自认为没用的yunservice,后来想想也觉得自己幼稚了,都叫yun了,肯定是阿里云留下做事情的呀
3. kubernetes安装,一般来说有三种安装方式,命令型、服务型、容器型,技术成本考虑,最终我们先用了前两种的混合态,然后setup-network-enviroment辅助验证,还好没遇到大问题,容器间网络很快通了(我们用了container模式,端口映射出去)
4. 因为在VPC环境,我们使用了EIP,但IP资源实在是宝贵(20个),所以留了一个做堡垒机,其他的大部分给了计算节点,由kubernetes的service public IP消费了,这点告诉我们,宝贵资源大家前期一定要做好规划
5. 内部DNS能力,用了skyDNS,一个比较坑的问题,一定要用最新版本,之前哪怕是release版本都有问题,服务注册后进不去出不来的,反正挺诡异的,一直也没见说哪个版本修复的
6. 跑服务过程中遇到了棘手问题,大家都知道kubernetes的容器调度能力,会结合自身的一些分析,在运行时把pod做热迁,放到他认为合适的机器上,这就使得容器用宿主机本地磁盘不现实了,持久化数据没法迁移或共享呀(当然,有同学说可以通过label强制运行在某处,但好特性还是想用一用,不然什么都规划好,这和云的宗旨就貌合神离了),这怎么办?分布式存储是个好方案,但阿里的块存储服务还没发布,虽然我们一直是决定的自己搭,但那也是下个版本的事情了,这边先low了一下,只能先用NFS临时解决

最终架构和技术栈

问题就不详说了,这里再简单分享下我们的技术栈和架构,希望对大家有用。
刚才已经把容器技术栈给说了,接着就是容器里跑的微服务使用技术了:
1. springboot,让微服务编码、配置、部署、监控变得更简单
2. react+redux,让前端也可以微服务化
3. MetaCube(我们的产品),元数据,提供资源全图、驱动运营
4. Redmine,提供产品和服务管理
5. ElasticSearch、InfluxDB,运维监控能力
6. BPS(又是我们的产品),一体化的流程能力
其他还有好多,saltstack、gitlab、Jenkins、autoconfig、OAuth等等,不细说了。
平台是以DevOps为核心的,最终架构如下:
 
围绕统一接入,自动化协作,运营反馈等,建设了完整的企业级云平台,后面我会分模块一一介绍,大家先概览一下就可以了。

还有一些其他的能力建设

包括高可靠、高性能、灰度发布、熔断、APIGateway、自动化、安全控制…,大家有兴趣可以一起交流交流,共同进步。

注:文中有两处提及阿里云产品,特此注解
1,ECS内不支持Xen,KVM,但支持Docker
2,单独的块存储服务没有发布,但有云盘,是块存储

关于作者:
 
顾伟 普元信息主任架构师

顾伟 现任普元软件产品部主任架构师,毕业于东南大学,先后参与华为,中信银行,工商银行,中航信,阿里云,兴业银行等客户定制项目;参与并负责公司多款内部产品研发工作,长期致力于IT项目管理,总体设计,用户体验及咨询工作 擅长OSGI,eclipse插件,web前端,云计算,CI/CD等领域技术,对新技术有着浓厚的兴趣。

如有技术问题,欢迎与文章作者沟通互动,如下为作者微信二维码:



相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
598 59
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
850 24
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
Kubernetes 安全 数据安全/隐私保护
云卓越架构:容器安全最佳实践
本次分享由阿里云智能集团解决方案架构师张玉峰主讲,主题为“云卓越架构:容器安全最佳实践”。内容涵盖容器安全的挑战、云原生容器安全架构及典型场景。首先分析了容器安全面临的问题,如镜像漏洞和权限管理。接着介绍了容器安全架构的五个维度:身份权限管理、配置安全检查、运行时防护、镜像安全检测及发布的安全管控。最后通过具体场景展示了容器身份与权限管理、密钥管理、运行时防入侵等最佳实践,强调了安全左移的重要性,确保从开发到运行的全生命周期安全覆盖。
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
804 6
|
6月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
439 3