T3 出行云原生容器化平台实践
公司简介
T3 出行是南京领行科技股份有限公司打造的智慧出行生态平台,由中国第一汽车集团有限公司、东风汽车集团有限公司、重庆长安汽车股份有限公司发起,联合腾讯、阿里巴巴等互联网企业共同投资打造。公司以“成为最值得信赖的出行服务企业”为品牌愿景,“科技引领 愉悦出行”为使命,倡导“可信,更自由”的出行理念,致力为用户提供“可信、安全、品质”出行服务,让用户感受更加自由的出行体验。
背景介绍
随着 T3 出行业务体量持续上涨,服务的稳定性需要系统化的保障。容器化改造将提供标准化的环境,基于应用运行环境实现完整的版本控制,消除开发到生产的环境差异,保证应用生命周期内环境一致性和标准化。同时容器化环境可以让服务共享计算资源,并通过混部方式来提高整体计算资源的利用率,降低企业应用的基础设施运营成本。
容器化之前 T3 出行是传统的虚拟机模式,所有业务都部署在虚拟机上,全体产研通过堡垒机、传统的监控系统、日志平台等进行日常应用的运维。而一旦服务容器化开始,我们必然需要一个云原生的容器化管理平台,让 T3 出行全体产研从传统的虚拟机操作模式转变为云原生操作模式。同时,之前日常的应用运维模式需要使用多个平台进行协作,产研定位一个应用性能问题往往需要来回切换多个平台。所以我们希望容器化平台可以集成周边的配套,如日志查看、监控系统,让产研尽量在一个平台内完成日常运维的工作;也可以作为平台工程的一部分,让产研在开发环境可以拥有足够的权限创建、更新、删除非基线环境,而无需了解底层架构知识,通过自助化的环境能力可以让研发并行开发测试,最终让业务可以快速、高效增长。
选型说明
我们的选型思路基本上是根据功能、UI 体验、社区活跃度、学习成本这 4 点来的。首先必须要满足我们对容器平台的需求(在背景介绍中已经描述),其次是社区活跃度以及生态,最后是 UI 体验,在 UI 体验中包含了用户的学习成本,我们希望以低学习成本的方式让 T3 出行的研发更够快速上手容器平台,同时也具备运维视角,如此就既满足了研发的应用视角纬度,也满足了运维的集群视角维度。
我们在选型期间对比了 Rancher、Openshift、KubeSphere,最终选择了 KubeSphere 作为 T3 出行云原生容器平台。KubeSphere 定位是以应用为中心的容器平台,提供简单易用的操作界面,帮助用户屏蔽掉那些技术细节,一定程度上降低了学习成本。同时 Kubesphere 具备优秀的容器管理能力、多集群支持能力、多租户能力、天然集成的可观测能力等,让我们可以在一个平台上满足了日常运维所需。
实践过程
多集群统一管理
KubeSphere 多集群中角色分为主集群和成员集群,由 1 个主集群和多个成员集群组成,与我们原先的集群规划不谋而合。主集群我们作为成员集群的控制面存在,通过主集群下发不同的管理策略给到成员集群。对于成员集群而言,我们根据不同的环境、不同的租户性质也会划分到不同集群。如根据环境区分,我们会有开发集群、测试集群、预生产集群、生产集群;而根据租户性质,我们会有一些对接三方业务的集群。

项目管理
在很多传统的 DevOps 平台中,并没有与项目进行联动,服务往往只是关联了组织架构,当组织架构变动,服务的元信息就不准确了。而且,对于一个项目来说,经常会有跨部门合作的情况,而业务发布的视角却是在各自的部门下的,项目成员无法在一个视图下看到项目的所有业务,在项目的协作过程中自然就增加了许多沟通成本。而 KubeSphere 就是基于项目维度对容器服务进行管理的,在 KubeSphere 中一个项目对应的就是 Kubernetes 一个 Namespace,租户之间的视图是隔离的,日常只需要在自己的项目视图下进行协作即可。
我们的 DevOps 平台正在逐步的往项目集成方向发展,目前我们是按照业务域进行统一管理,一个业务域代表了一个 KubeSphere 中的一个项目,业务域下会有多个相关的业务服务,无论组织架构如何变换,业务域始终不变。

多租户管理
KubeSphere 中的多租户管理是基于企业空间维度来完成的,企业空间是用来管理项目、DevOps 项目、应用模板和应用仓库的一种逻辑单元。我们可以在企业空间中控制资源访问权限,也可以安全地在团队内部分享资源。企业空间可以关联多个集群中的多个项目,并对企业空间中的成员进行权限管理,引用 KubeSphere 官方配图便于大家直观的理解:

我们是以业务域为项目维度进行统一管理,那么企业空间作为 KubeSphere 最小的租户管理单元自然是被我们按照业务域进行划分。所以 T3 当下的多租户管理逻辑就是:企业空间(业务域)→ 集群(开发、测试等)→ 项目(业务域)。同时在企业空间中,我们也抽象出了部门管理纬度,使用 KubeSphere 的部门管理,便于我们给不同的人员赋予不同集群(环境)操作权限。
内部 DevOps 平台与 KubeSphere 的结合

T3 容器化之前已有一套 DevOps 平台,这套 DevOps 平台交付的制品是部署在虚拟机上的。而容器化项目开展的前置条件就是必须支持容器发布,如果让现有的 DevOps 平台改造成云原生化的 DevOps 平台工作量巨大,项目风险不可控,所以我们最终选择了 DevOps 平台与 KubeSphere 的结合。内部 DevOps 平台新增容器发布功能,只进行容器服务的发布和 Pod 副本数的扩缩容操作,由 KubeSphere 对发布后的容器进行接管,给研发人员展示容器发布后的应用状态,让研发人员自助式的与容器进行交互。
可以说,KubeSphere 接管了 T3 容器化发布的后半场,研发人员执行发布后,便会来到 KubeSphere 上进行与容器的交互操作,如日志查看、监控查看、进入容器控制台、查看容器事件等。

效果
- T3 出行的业务已经全面容器化,所有的集群已被 KubeSphere 纳管,产研的日常应用维护工作都需要基于 KubeSphere 平台进行开展。
- 得益于 KubeSphere 的以应用为中心的设计,帮用户屏蔽了底层技术细节,目前 T3 出行全体产研都可以自助式的使用 KubeSphere 进行日常的工作,也让 T3 产研从传统的应用维护模式成功的转向了云原生应用维护模式。
- KubeSphere 集成了监控、日志、事件,提高了 T3 产研日常的人效。
- KubeSphere 集群级别的可观测,是我们提升集群资源利用率的参考依据。
未来规划
- 内部 DevOps 平台与 KubeSphere 深度融合,给 T3 产研带来更好的体验。
- 基于 T3 的业务场景采用更多优秀的开源项目,与社区共同成长。
- FinOps 与 Serverless 的探索与实践。
本文由博客一文多发平台 OpenWrite 发布!
T3 出行云原生容器化平台实践的更多相关文章
- 用户案例 | 腾讯小视频&转码平台云原生容器化之路
作者 李汇波,腾讯业务运维高级工程师,目前就职于TEG 云架构平台部 技术运营与质量中心,现负责微信.QQ社交类业务的视频转码运维. 摘要 随着短视频兴起和快速发展,对于视频转码处理的需求也越来越多. ...
- AMS 新闻视频广告的云原生容器化之路
作者 卓晓光,腾讯广告高级开发工程师,负责新闻视频广告整体后台架构设计,有十余年高性能高可用海量后台服务开发和实践经验.目前正带领团队完成云原生技术栈的全面转型. 吴文祺,腾讯广告开发工程师,负责新闻 ...
- Coding-Job:从研发到生产的容器化融合实践
大家好,我是来自 CODING 的全栈开发工程师,我有幸在 CODING 参与了 Coding-Job 这个容器化的编排平台的研发.大家对 CODING 可能比较了解, Coding.net 是一个一 ...
- 成本降低40%、资源利用率提高20%的 AI 应用产品云原生容器化之路
作者 郭云龙,腾讯云高级工程师,目前就职于 CSIG 云产品三部-AI 应用产品中心,现负责中心后台业务框架开发. 导语 为了满足 AI 能力在公有云 SaaS 场景下,服务和模型需要快速迭代交付的需 ...
- 最佳案例 | QQ 相册云原生容器化之路
关于我们 更多关于云原生的案例和知识,可关注同名[腾讯云原生]公众号~ 福利: ①公众号后台回复[手册],可获得<腾讯云原生路线图手册>&<腾讯云原生最佳实践>~ ②公 ...
- 最佳案例 | 游戏知几 AI 助手的云原生容器化之路
作者 张路,运营开发专家工程师,现负责游戏知几 AI 助手后台架构设计和优化工作. 游戏知几 随着业务不断的拓展,游戏知几AI智能问答机器人业务已经覆盖了自研游戏.二方.海外的多款游戏.游戏知几研发团 ...
- Java 服务 Docker 容器化最佳实践
转载自:https://mp.weixin.qq.com/s/d2PFISYUy6X6ZAOGu0-Kig 1. 概述 当我们在容器中运行 Java 应用程序时,可能希望对其进行调整参数以充分利用资源 ...
- Kubernetes容器云平台建设实践
[51CTO.com原创稿件]Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署.大规模可伸缩.应用容器化管理.伴随着云原生技术的迅速崛起,如今Kubernetes 事实上已经 ...
- 【转帖】使用容器化和 Docker 实现 DevOps 的基础知识
使用容器化和 Docker 实现 DevOps 的基础知识 https://www.kubernetes.org.cn/6730.html 2020-02-24 15:20 灵雀云 分类:容器 阅读( ...
- 【原创】一层Nginx反向代理K8S化部署实践
目录: 1)背景介绍 2)方案分析 3)实现细节 4)监控告警 5)日志收集 6)测试 一.背景介绍 如下图所示,传统方式部署一层Nginx,随着业务扩大,维护管理变得复杂,繁琐,耗时耗力和易 ...
随机推荐
- vscode配置远程项目开发
0. vscode中安装remote development插件 (略) 1. 客户端进行配置 按键:ctrl+shift+p 在输入框中输入: Preferences: Open User Sett ...
- 【共建开源】手把手教你贡献一个 SeaTunnel PR,超级详细教程!
Apache SeaTunnel是一个非常易于使用的.超高性能的分布式数据集成平台,支持海量数据的实时同步.每天可稳定高效同步数百亿数据,已被近百家企业投入生产使用. 现在的版本不支持通过jtds的方 ...
- 基于 token 的登陆系统的实现
这是一段防爬代码块,我不介意文章被爬取,但请注明出处 console.log("作者主页:https://www.cnblogs.com/Go-Solo"); console.lo ...
- SMU Summer 2024 Contest Round 1
SMU Summer 2024 Contest Round 1 Dice and Coin 题意 给个 n 面骰子和一枚硬币,初始投骰子,若骰子的值在 1 到 \(K-1\) 之间则反复投硬币,硬币为 ...
- kubernetes中集成istio出现拉取配置中心数据失败导致服务启动失败
荐
由于在k8s使用了grpc,所以这里我们集成istio来实现http2的自动发现以及负载均衡,但是随着节点增加,istio之前同步配置时间边长导致第一次启动时,服务启动拉取配置时istio却还没初始化 ...
- docker生产环境jvm性能优化
1.xmx与xms设置多大合适 docker获得的mem_usage的大小是从外部得到的java进程的内存大小,不仅仅是 -Xmx设置的大小,如果 -Xmx和docker分配的内存一致的话,由于jav ...
- shell脚本中$0 $1 $# $@ $* $? $$ 的各种符号意义详解
一.概述 shell中有两类字符:普通字符.元字符. 1. 普通字符 在Shell中除了本身的字面意思外没有其他特殊意义,即普通纯文本: 2. 元字符 是Shell的保留字符,在Shell中有着特殊的 ...
- Linux下错误解决方案
错误 "E: Unable to correct problems, you have held broken packages."这种问题包破坏问题,可能是由于镜像源与系统版本不 ...
- 【Jmeter】之批量处理多接口压力测试
一.需求前提 1.有以下三个步骤: ①创建单据 ②审核单据 ③确认单据 让三个相关接口进行一连串批量请求操作,直到所有批量数据确认单据成功. 二.测试计划 需要说明的是,因为每个接口可能处理的不太一样 ...
- python requests 报错 Caused by ProxyError ('Unable to connect to proxy', OSError('Tunnel connection failed: 403 Tunnel or SSL Forbidden'))
背景:访问https接口,使用http代理 版本:requests: 2.31.0 从报错可以看出,是proxy相关的报错 调整代码,设定不使用代理,将http与https对应的proxy值置空即可( ...