基于 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 發布!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41734.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41734.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41734.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RestTemplate

RestTemplate介紹 RestTemplate是Spring提供的用于訪問RESTful服務的客戶端,RestTemplate提供了多種便捷訪問遠程Http服務的方法,能夠大大提高客戶端的編寫效率。RestTemplate默認依賴JDK提供http連接的能力(HttpURLConnection),…

js拼接字符串

在js中,你可以使用字符串拼接的方式創建新的字符串。 下面是一些常用的方法: 1、使用運算符: var str1 "Hello"; var str2 "World"; var result str1 " " str2; console.log(result); // 輸出&#xf…

【數據結構】鏈表常見題目

文章目錄 鏈表合并兩個有序鏈表反轉鏈表復制帶隨機指針的鏈表環形鏈表環形鏈表II相交鏈表移除鏈表元素鏈表中倒數第k個節點鏈表分割鏈表的回文結構鏈表的中間節點旋轉鏈表鏈表排序鏈表求和 (逆序求)鏈表求和II (正序求)重排鏈表奇偶鏈表反轉鏈表II <==> 鏈表內指定區間反…

(二)掌握最基本的Linux服務器用法——Linux下簡單的C/C++ 程序、項目編譯

1、靜態庫與動態庫 靜態庫(Static Library)&#xff1a;靜態庫是編譯后的庫文件&#xff0c;其中的代碼在編譯時被鏈接到程序中&#xff0c;因此它會與程序一起形成一個獨立的可執行文件。每個使用靜態庫的程序都會有自己的庫的副本&#xff0c;這可能會導致內存浪費。常用后綴…

opencv簡單使用

cv2庫安裝&#xff0c; conda install opencv-python注意cv2使用時&#xff0c;路徑不能有中文。&#xff08;不然會一直’None’ _ update # 處理中文路徑問題 def cv_imread(file_path): #使用之前需要導入numpy、cv2庫&#xff0c;file_path為包含中文的路徑return cv2.imd…

idea入門與maven配置的一些介紹

idea入門與maven配置的一些介紹 1.確保Java和Maven已安裝2.創建一個新的Maven項目3.導航到要創建項目的目錄配置Maven4.配置項目的pom.xml文件5.配置其他Tomcat和設置jdk6.構建和運行項目 關于idea入門基礎配置 步驟1&#xff1a;安裝IntelliJ IDEA 首先&#xff0c;從IntelliJ…

腳本語言與編譯語言的區別

文章目錄 一、語法差異二、執行方式差異三、應用領域差異四、總結 一、語法差異 腳本語言&#xff1a;腳本語言通常使用解釋器逐行執行&#xff0c;不需要事先編譯。它的語法相對簡單&#xff0c;易于學習和使用。常見的腳本語言有Python、JavaScript和Ruby等。 編譯語言&…

上海市青少年算法2023年2月月賽(丙組)

上海市青少年算法2023年2月月賽(丙組)T1 格式改寫 題目描述 給定一個僅由拉丁字符組成字符序列,需要改寫一些字符的大小寫,使得序列全部變成大寫或全部變成小寫,請統計最少修改多少個字符才能完成這項任務。 輸入格式 一個字符序列:保證僅由拉丁字符構成 輸出格式 單個整…

golang環境搭建

1. 下載、安裝 wget -O go.tar.gz https://golang.google.cn/dl/go1.21.0.linux-amd64.tar.gz sudo rm -rf /usr/local/go && sudo tar -zxvf go.tar.gz -C /usr/local2.創建工作目錄 cd mkdir -p go/{bin,pkg,src}3.添加環境變量 sudo vim /etc/profile寫入以下…

計算機競賽 python+大數據校園卡數據分析

0 前言 &#x1f525; 優質競賽項目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于yolov5的深度學習車牌識別系統實現 &#x1f947;學長這里給一個題目綜合評分(每項滿分5分) 難度系數&#xff1a;4分工作量&#xff1a;4分創新點&#xff1a;3分 該項目較為新穎&am…

記錄一個編譯TubeTK時的報錯:at_check問題

在使用如下命令安裝TubeTK的cuda_nms時&#xff0c;報了一個錯誤&#xff0c;記錄一下這個錯誤和解決辦法 (base) redmeryredmery:~/Desktop/MOT/TubeTK/post_processing/nms$ python setup.py build_ext --inplace因為這個命令是在/home/redmery/Desktop/MOT/TubeTK/install/…

Talk | ACL‘23 杰出論文獎上海交通大學吳蔚琪:預訓練語言模型對本體知識的記憶與理解

本期為TechBeat人工智能社區第523期線上Talk&#xff01; 北京時間8月17日(周四)20:00&#xff0c;上海交通大學碩士研究生—吳蔚琪的Talk已準時在TechBeat人工智能社區開播&#xff01; 她與大家分享的主題是: “預訓練語言模型對本體知識的記憶與理解”&#xff0c;分享了預訓…

Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實戰、 TCP編程的實現、TCP雙向持續通信】(二十七)

&#x1f44f;作者簡介&#xff1a;大家好&#xff0c;我是愛敲代碼的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列專欄&#xff1a;python入門到實戰、Python爬蟲開發、Python辦公自動化、Python數據分析、Python前后端開發 &#x1f4e7;如果文章知識點有錯誤…

【c語言】通訊錄(動態版+文件+背景音樂)含源碼

開飯了&#xff0c;之前寫的通訊錄&#xff0c;是否會有人覺得申請1000人的空間是不是有點用不上呀&#xff0c;怎么才能做到要多少申請多少個呢&#xff1f;&#xff1f;我們學完動態內存管理&#xff0c;和文件的相關操作&#xff0c;終于可以繼續完善我們的通訊錄了 船新版本…

機器學習基礎(三)

邏輯回歸 場景 垃圾郵件分類 預測腫瘤是良性還是惡性 預測某人的信用是否良好 正確率與召回率 正確率與召回率(Precision & Recall)是廣泛應用于信息檢索和統計學分類領域的兩個度量值,用來評價結果的質量。 一般來說,正確率就是檢索出來的條目有多少是正確的,召回率就…

salesforce創建定時任務時明明implements the Schedulable interface卻提示不是的解決方法

Apex類&#xff1a; global class TimesheetWeeklyJob implements Schedulable{global void execute( SchedulableContext SC ) {WeeklyTimesheetProcess.markSubmitted();WeeklyTimesheetProcess.createNewSheets();} }卻提示&#xff1a; Error: You must select an Apex cl…

數據結構:二叉樹的遞歸實現(C實現)

個人主頁 &#xff1a; 個人主頁 個人專欄 &#xff1a; 《數據結構》 《C語言》 文章目錄 前言一、樹的概念二、二叉樹二叉樹的概念二叉樹的性質 三、二叉樹鏈式結構實現二叉樹節點定義創建二叉樹節點遍歷二叉樹先序遍歷二叉樹(BinaryTreePrevOrder)中序遍歷二叉樹(BinaryTree…

Air780EG —— 合宙4G定位解決方案

定位模式&#xff1a; 外部單片機控制模式(常見于AT固件客戶)&#xff1a; 開機 -> 搜星 -> 定位成功 -> 上報 -> 關機 780E自行控制模式(常見于二次開發客戶&#xff0c;AT用戶也可以使用): 開機 -> 搜星 -> 定位成功 -> 模塊休眠&#xff0c;關閉GP…

億發創新中醫藥信息化解決方案,自動化煎煮+調劑,打造智能中藥房

傳統中醫藥行業逐步復興&#xff0c;同時互聯網科技和人工智能等信息科技助力中醫藥行業逐步實現數字化轉型。利用互聯網、物聯網、大數據等科技&#xff0c;實現現代科學與傳統中醫藥的結合&#xff0c;提供智能配方顆粒調配系統、中藥自動化調劑系統、中藥煎配智能管理系統、…