基于 KubeSphere 的应用容器化在智能网联汽车领域的实践

公司简介

某国家级智能网联汽车研究中心成立于 2018 年,是担当产业发展咨询与建议、共性技术研发中心、创新成果转化的国家级创新平台,旨在提高我国在智能网联汽车及相关产业在全球价值链中的地位。

目前着力建设基于大数据与云计算的智能汽车云端运营控制中心平台。推进云端运营控制中心建设的过程中,运控中心平台的集成、部署、运维方案经历了 3 代的升级迭代过程。

第一代部署方案是直接将平台的前后端各个模块手动部署在自有物理机中,并将物理机托管在 ICT 的机房中。

第二代方案是将物理机集群用 Vmware ESXi 做了虚拟化,平台前后端各模块部署在虚拟机,提升了资源利用率,降低了资源使用量。

第三代,目前以容器化的方式部署在公有云的 KubeSphere 集群中。购买公有云的服务器资源,使用 KubeKey 安装 KubeSphere 集群,应用级服务采用 DevOps 流水线一键以容器化方式发布到 KubeSphere 集群中,真正实现了持续集成持续发布。应用研发工程师只需要在自己本地实现 feature 或者 fix bug,然后 commit 代码到 GitLab,之后通过 KubeSphere 的 DevOps 流水线一键发布到测试环境或者生产环境。通过使用 KubeSphere 以容器化的方式部署服务,减轻了各位研发工程师的发布工作负担,释放了研发资源。

目前团队组成:1 名架构师负责架构设计、项目管理等全局工作,4 名研发工程师负责研发工作,1 名 DevOps 工程师负责 DevOps 建设和运维工作,这样的一个小团队就可以高效顺利完成大系统的建设工作。

背景介绍

云计算的发展已经逐渐成熟,基于云计算的大数据、人工智能行业发展的越来越成熟,汽车领域与云计算、大数据、人工智能的融合创新发展势不可挡,自动驾驶已经在全球范围内陆续落地。我国汽车科学家基于我国国情和汽车行业发展趋势,提出了自动驾驶汽车的中国方案,也即车路协同方案,以弥补国际上单车智能方案的不足。

在这种行业发展背景下,推进建设车路协同的自动驾驶云端运营控制中心是亟待突破的行业共性关键技术。

在建设自动驾驶云端运营控制中心的过程中,面临许多的实际困难,比如软硬件资源比较紧张,研发人员非常少,建设任务特别繁重,运控中心平台对车辆侧、道路侧物理基础设施的依赖比较种等方面的因素,为了提高有限的存储、计算、网络等硬件资源的利用率和减轻有限研发人员工作负担、高质高效完成运控中心平台的建设任务,建设团队的集成和部署经历了物理机部署、虚拟机部署直到当前的基于 KubeSphere 的容器化部署方案的迭代和升级过程。

选型说明

在研究上云过程中,想过直接购买阿里云的 K8s 集群,但是由于公司本身有一些物理服务器要利用起来,所以就继续调研,最终选择 KubeSphere 作为容器化的解决方案。

我们选择 KubeSphere 的原因有以下几点:

  • 得益于 KubeKey 这个安装工具,安装起来更加方便,比以前单纯安装 K8s 要简便、容易的多。
  • KubeSphere 相当于给 K8s 做了图形界面,从 web 界面打开查看集群状态,对集群进行运维非常方便,比在命令行下敲命令简单明了的多。
  • KubeSphere 支持流水线功能,在不安装额外的软件的情况下就可以实现持续发布功能,持续发布和 K8s 结合在一起,工作起来减轻很多繁琐的操作。

实践过程

由于使用 KubeSphere 和 K8s 以容器化方式部署应用对项目组成员来说都是第一次,无论是比较资深的专家架构师,还是各位研发和运维人员来说,都是在做了基本调研和学习后首次使用,所以,我们的应用容器化之路是学习中使用、使用中提高的一个过程。

为了保障最后生产环境的服务容器化后能更加稳定可控,所以我们采取了 2 步走的战略:

  • 第一步,私有云测试环境部署运行以积累经验。先在测试环境搭建 Harbor、KubeSphere、K8s、Docker,建设测试环境的发布流水线将测试环境的各个服务以容器化的方式部署,让前后端的六十多个服务在测试环境先以容器化的方式稳定运行,这样通过测试环境的运行积累经验,等测试环境的容器云运行比较稳定,各种坑都趟过以后,再开始做生产环境的容器化。
  • 第二步,私有云生产环境服务部署。首先在物理机上部署了所有服务,让物理机上的运控中心平台稳定运行,以便领导随时检查线上平台运行情况,其次,再做了一份 KubeSphere、K8s、Docker,以容器化方式部署运控中心平台。这样双份的生产环境运控中心平台,当生产环境容器化的运控中心平台运行稳定以后,再将运控平台对外的域名绑定到容器化的运控中心平台上,逐步停用物理机中部署的运控中心平台。

基础设施与部署架构

测试环境和生产环境的 KubeSphere 部署架构基本是一样的。

集群规划:

节点 IP节点角色组件
192.168.16.70kp-master01kube-apiserver
kube-Scheduler
kube-controller-manager
Etcd
192.168.16.80kp-master02api-server
Scheduler
controller-manager
Etcd
192.168.16.100kp-node01Kubelet
kube-proxy
Docker
192.168.16.110kp-node02Kubelet
kube-proxy
Docker
192.168.16.120kp-node03Kubelet
kube-proxy
Docker
192.168.16.140kp-node05Kubelet
kube-proxy
Docker

具体部署架构图如下图所示:

线上环境参考:

  • 有状态服务主要是一些基础设施服务,比如 MySQL、Redis、ClickHouse 等这种,对于这些有状态服务还是采用虚拟机部署。
  • 无状态服务在 KubeSphere 中的服务如下图所示,包括应用层的前端模块、后端模块,都是采用容器化部署的方式部署。

存储与网络

运控中心平台的一些常规的业务数据采用 MySQL 存储,为了做数据的聚合 OLAP 分析采用 ClickHouse 存储分析性的历史数据,采用 Hadoop 和 Flink 对数据仓库中的数据做分布式的分析处理。采用 ELK 采集了容器集群中的服务日志。

DevOps 方案

测试环境和生产环境都在私有云中搭建,两套环境基本是完全一致。

项目代码统一使用 GitLab 进行配置管理,Docker 镜像采用 Harbor 进行存储,KubeSphere 中建立 DevOps 项目,在 DevOps 项目中为每一个模块建立发布流水线。流水线中的每一个环境都由一台发布服务器上的 shell 脚本具体执行。

使用效果

通过使用 KubeSphere 明显地减轻了工程师们的发布部署工作负担,提升了人员生产力和研发效能。研发工程师只需要在本地实现 feature 或者修复 bug,之后 commit 代码到 GitLab,然后在 KubeSphere 的 DevOps 流水线上点击运行,发布到测试环境或者生产环境的部署工作就彻底完成了,非常轻松简单。

通过使用 KubeSphere 以容器化的方式部署服务,最明显的收益如下:

  • 研发工程师在软件的部署上唯一需要做就是登陆 KubeSphere,点击运行流水线,极大地减轻了部署工作量,再也不用记忆各种奇怪的命令,省心省力。
  • 使用 KubeSphere 和 K8s 的进行应用容器化部署后,优化了硬件的资源利用率,降低了成本。

未来规划

通过 KubeSphere 的应用实践,发现 K8s 确实解决分布式微服务系统的很多问题,比如负载均衡、自动扩展等,DevOps 流水线功能尤其实用。

在未来,我们计划进一步改进运控中心平台的容器化,将有状态服务也尽量容器化,并将自动化测试加入到发布流水线中。

本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/77217.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

边缘智能聚焦嵌入式世界

没有什么超出了我们的想象力的极限,我们习惯于在间谍电影中看到的东西需要进行大规模升级,以超越现在认为的标准。 德国纽伦堡—一切都超出了我们的想象范围,而且我们习惯于在间谍电影中看到的东西需要进行大规模升级,以超越现在认…

段错误核心转储

在linux下运行可执行文件的时候出现了以下错误: error:segmentation fault core dumped解决方法: #查看core文件大小判断是否可写 $ ulimit -a real-time non-blocking time (microseconds, -R) unlimited core file size (blocks, -c) …

30W IP网络有源音箱 校园广播音箱

SV-7042XT是深圳锐科达电子有限公司的一款2.0声道壁挂式网络有源音箱,具有10/100M以太网接口,可将网络音源通过自带的功放和喇叭输出播放,可达到功率30W。同时它可以外接一个30W的无源副音箱,用在面积较大的场所。5寸进口全频低音…

初始C语言(6)——详细讲解表达式求值以及其易错点

系列文章目录 第一章 “C“浒传——初识C语言(1)(更适合初学者体质哦!) 第二章 初始C语言(2)——详细认识分支语句和循环语句以及他们的易错点 第三章 初阶C语言(3)——…

GaussDB 实验篇+openGauss的4种1级分区案例

✔ 范围分区/range分区 -- 创建表 drop table if exists zzt.par_range; create table if not exists zzt.par_range (empno integer,ename char(10),job char(9),mgr integer(4),hiredate date,sal numeric(7,2),comm numeric(7,2),deptno integer,constraint pk_par_emp pri…

Python程序设计——列表

一、引言 关键点:一个列表可以存储任意大小的数据集合。 程序一般都需要存储大量的数值。假设,举个例子,需要读取100个数字,计算出它们的平均值,然后找出多少个数字是高于这个平均值的。程序首先读取100个数字并计算它…

C语言刷题训练DAY.6

1.进制AB 解题思路&#xff1a; 这里我们按照备注的提示&#xff0c;调整输入格式。 注意&#xff1a;%x是十六进制的数字 %o是八进制的数字 解题代码&#xff1a; #include<stdio.h> int main() {int a 0;int b 0;scanf("0x%x 0%o", &a, &b);pri…

自定义Android滑块拼图验证控件

自定义Android滑块拼图验证控件 拼图认证视图默认策略工具类参考 1、继承自AppCompatImageView&#xff0c;兼容ImageView的scaleType设置&#xff0c;可设置离线/在线图片。 2、通过设置滑块模型&#xff08;透明背景的图形块&#xff09;设置滑块&#xff08;和缺省块&#x…

sql server 存储过程 set ansi_nulls set quoted_identifier,out 、output

SQL-92 标准要求在对空值(NULL) 进行等于 () 或不等于 (<>) 比较时取值为 FALSE。 当 SET ANSI_NULLS 为 ON 时&#xff0c;即使 column_name 中包含空值&#xff0c;使用 WHERE column_name NULL 的 SELECT 语句仍返回零行。即使 column_name 中包含非空值&#xff0c…

python列表笔记,python列表用法及基础操作

列表的介绍 定义100个变量&#xff0c;每个变量存放一个学生的姓名可行吗&#xff1f;有更好的办法吗&#xff1f; 答&#xff1a; 列表 一、列表的格式 定义列的格式&#xff1a;[元素1, 元素2, 元素3, ..., 元素n] 变量tmp的类型为列表 tmp [xiaoWang,180, 65.0] 列…

亿赛通电子文档安全管理系统任意文件上传漏洞复现

0x01 产品简介 亿赛通电子文档安全管理系统&#xff08;简称&#xff1a;CDG&#xff09;是一款电子文档安全加密软件&#xff0c;该系统利用驱动层透明加密技术&#xff0c;通过对电子文档的加密保护&#xff0c;防止内部员工泄密和外部人员非法窃取企业核心重要数据资产&…

【人工智能124种任务大集合】-集齐了自然语言处理(NLP),计算机视觉(CV),语音识别,多模态等任务

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能124种任务大集合&#xff0c;任务集合主要包括4大类&#xff1a;自然语言处理&#xff08;NLP&#xff09;、计算机视觉&#xff08;CV&#xff09;、语音识别、多模态任务。 我这里整理了124种应用场景任…

FPGA_学习_14_第一个自写模块的感悟和ila在线调试教程与技巧(寻找APD的击穿偏压)

前一篇博客我们提到了&#xff0c;如果要使用算法找到Vbr&#xff0c;通过寻找APD采集信号的噪声方差的剧变点去寻找Vbr是一个不错的方式。此功能的第一步是在FPGA中实现方差的计算&#xff0c;这个我们已经在上一篇博客中实现了。 继上一篇博客之后&#xff0c;感觉过了很久了…

.net连接mysql,提示找不到请求的 .Net Framework Data Provider。可能没有安装

开发完成的.net程序需要连接mysql数据库&#xff0c;在个人电脑上运行没问题&#xff0c;别人运行时提示“提示找不到请求的 .Net Framework Data Provider。可能没有安装”。经过查询&#xff0c;安装Connector/NET 8.1.0&#xff0c;下载地址如下所示&#xff1a; https://d…

AI抢饭碗!新闻集团将使用生成式AI,每周自动写3000篇新闻丨IDCF

作者&#xff1a;AIGC开放社区 8月1日&#xff0c;英国卫报消息&#xff0c;全球最大新闻媒体公司之一的新闻集团&#xff0c;将使用生成式AI每周自动创建3000篇澳大利亚本地新闻。 据悉&#xff0c;新闻集团在内部成立了一个名为“Data Local”的部门只有4名员工&#xff0c;…

c语言操作文件

1、文件存储 文件存取格式 从用户或者操作系统使用的角度&#xff08;逻辑上&#xff09;文件可以分为文本文件、二进制文件 文本文件&#xff1a;存储时&#xff0c;是将字符的ascii码值存在磁盘中&#xff0c;取的时候将ascii码翻译成对应的字符&#xff0c;这个翻译器就是…

ubuntu下gif动态图片的制作

Gif图片比视频小, 比静态JPG图片形象生动, 更适用于产品展示和步骤演示等。各种各样的gif动图为大家交流提供很大的乐趣. 这里简单介绍ubuntu系统下gif图的制作。 一、工具安装: kazam和ffmpeg kazam是linux下的一款简单但是功能强大的屏幕录制工具. 它可录制声音并选择全屏录…

【C++】一文带你初识C++继承

食用指南&#xff1a;本文在有C基础的情况下食用更佳 &#x1f340;本文前置知识&#xff1a; C类 ♈️今日夜电波&#xff1a;napori—Vaundy 1:21 ━━━━━━️&#x1f49f;──────── 3:23 …

数据库--SQL关键字的执行顺序

数据库相关链接&#xff1a; 数据库--数据类型&#xff1a;http://t.csdn.cn/RtqMD 数据库--三大范式、多表查询、函数sql&#xff1a;http://t.csdn.cn/udJSG 数据库--MySQL增删改查&#xff1a;http://t.csdn.cn/xkiti 一、一条sql语句通常包括&#xff1a; select fro…

[PaddlePaddle] [学习笔记] [上] 计算机视觉(卷积、卷积核、卷积计算、padding计算、BN、缩放、平移、Dropout)

1. 计算机视觉的发展历程 计算机视觉作为一门让机器学会如何去“看”的学科&#xff0c;具体的说&#xff0c;就是让机器去识别摄像机拍摄的图片或视频中的物体&#xff0c;检测出物体所在的位置&#xff0c;并对目标物体进行跟踪&#xff0c;从而理解并描述出图片或视频里的场…