利用 Kubernetes 降本增效?EasyMR 基於 Kubernetes 部署的探索實踐

来源:https://www.cnblogs.com/DTinsight/archive/2023/11/17/17838125.html
-Advertisement-
Play Games

Kubernetes 是用於編排容器化應用程式的雲原生系統。最初由 Google 創建,如今由 Cloud Native Computing Foundation(CNCF)維護更新。 Kubernetes 是市面上最受歡迎的集群管理解決方案之一。它自動化容器化應用程式的部署、擴展和管理,允許管理和 ...


Kubernetes 是用於編排容器化應用程式的雲原生系統。最初由 Google 創建,如今由 Cloud Native Computing Foundation(CNCF)維護更新。

Kubernetes 是市面上最受歡迎的集群管理解決方案之一。它自動化容器化應用程式的部署、擴展和管理,允許管理和協調跨多個主機的容器集群,提供容錯性和可伸縮性等服務。

簡單點說,如果你的應用程式可以容器化(例如,藉助 Docker),那麼絕對應該使用 Kubernetes 來運行和管理這些應用程式。在 k8s 的支持下,可以大大提高本地或雲托管基礎架構的利用率,所有計算資源都可以在多個應用程式之間動態而合理地共用。

Kubernetes 負責在整個應用生命周期中調度並自動執行與容器相關的任務,包括部署、運維、服務發現、存儲配置、負載均衡、自動擴展、自我治愈實現高可用性等等。

如今,Kubernetes 和更廣泛的容器生態系統日益成熟,成為通用的計算平臺和生態系統,可與作為現代雲基礎架構和應用基本構建塊的虛擬機 (VM) 一爭高下,甚至大有後來居上之勢。但是 Kubernetes 本身是一個比較複雜的平臺,一個運維或者開發人員如果要說快速精通 Kubernetes 是不可能的,所以這就提高了傳統運維開發人員使用其的門檻。

EasyMR 作為一款提供一站式可視化組件安裝部署可觀測運維管理能力的大數據計算引擎產品,我們自然也基於 Kubernetes 部署進行了實踐探索。

EasyMR 基於 Kubernetes 部署的探索

之前我們討論的 EasyMR 都是基於主機集群的模式下,需要部署服務就需要先接入主機,然後部署對應產品包服務從而完成應用集群的快速搭建。但是隨著雲原生相關技術棧(容器、微服務、服務網格等)和 Kubernetes 近些年的流行,傳統模式也急需更新換代以適應大趨勢的發展。所以我們決定在 EasyMR 原有的基於產品包部署的產品模式基礎上,全新打造一個容器化部署的版本。

前面我們說過,由於 Kubernetes 自身的複雜性,一般開發運維人員使用起來是比較費力的,比如控制器(Deployment/Daemonset/Statefulset/Job/CronJob),存儲(PVC/PV/StorageClass)等等,所以我們還是將複雜性交給平臺去解決,暴露給用戶的交互則是通俗易懂的。

在主機集群模式下,部署服務的步驟為下載包->解壓縮安裝包->配置下發->服務啟動,EasyMR 自身的 easyagent 可以做到服務的全生命周期管理。基於 Kubernetes 的架構下,我們再去開發對應版本的 agent 也是可以做到的,但是經過對市面上一些開源服務的調研,我們發現 kubevela 正好可以彌補我們這部分能力。

kubevela 使用 OAM(Open Application Model),本質是根據軟體設計的關註點分離原則對負責的 DevOps 流程的高度抽象和封裝,一個以應用為中心的 Kubernetes API 分層,這種模型旨在定義雲原生應用的標準。

作為 EasyMR 平臺,基於 kubevela,我們只需要提供多種可擴展的組件類型,便可以對上層用戶屏蔽 Kubernetes 的底層複雜實現邏輯。使用 EasyMR 部署 Kubernetes 服務的用戶只需要關註服務類型以及修改應用配置,便可以實現服務的部署,關於 kubevela/OAM 更詳細的部分我們會在後面的文章中介紹,本文便不多贅述。

對 EasyMR 而言,部署服務的維度始終是產品包,這點我們並沒有去做更改,產品包的核心就是 schema 文件。因此,我們擴展了一些欄位以適應 Kubernetes 部署的要求。

file

上述表格的 workload 表示服務類型,比如說平臺內置主從 MySQL 的 workload,那麼只需要在產品包中聲明服務類型是 MySQL 以及鏡像的名稱,當執行部署的時候,平臺會自動創建 MySQL 的有狀態應用 statefulset、配置文件 configmap、服務 service、存儲 pv/pvc 等等 Kubernetes 底層資源。大大節省了人力成本,提升了交付效率,後續如果需要擴展組件類型也可以在平臺迭代中逐步完善。

EasyMR 雲化部署架構如下圖所示:

file

架構圖中 vela-core 是核心部署組件,config-reloader 會動態監測 Pod 使用的 configmap 的更新狀態從而重啟應用 Pod。

EasyMR 基於 Kubernetes 的未來探索

EasyMR 作為基於雲原生技術和 Hadoop、Hive、Spark、Flink、Hbase、Presto 等開源大數據組件構建的彈性計算引擎,做到能部署大數據組件只是里程碑中的第一步,未來我們的目標會投向更長遠的地方——存算分離

● 使用 Kubernetes 替代 Yarn 作為調度組件

以 Flink 和 Spark 為代表的分散式流批計算框架的下層資源管理平臺逐漸從 Hadoop 生態的 YARN 轉向 Kubernetes 生態的 Kubernetes原生 scheduler 以及周邊資源調度器,比如 Volcano 和 Yunikorn 等。

● 使用對象存儲+緩存加速

隨著雲計算技術的成熟,企業存儲又多了一個選項——對象存儲。最早從 AWS 開始,後來所有的雲廠商都在向這個方向發展,用對象存儲去替換 HDFS。

但是對象存儲用於支持 Hadoop 這樣複雜的系統,會出現以下問題:文件 Listing 性能較弱;對象存儲沒有原子 Rename 從而影響任務的穩定性;對象存儲數據最終一致性的機制會降低計算過程中的穩定性和正確性。所以我們還需要 Alluxio/Juicefs 這樣的緩存加速層來提升我們使用對象存儲的性能。

《數棧產品白皮書》:https://www.dtstack.com/resources/1004?src=szsm

《數據治理行業實踐白皮書》下載地址:https://www.dtstack.com/resources/1001?src=szsm

想瞭解或咨詢更多有關袋鼠雲大數據產品、行業解決方案、客戶案例的朋友,瀏覽袋鼠雲官網:https://www.dtstack.com/?src=szbky

同時,歡迎對大數據開源項目有興趣的同學加入「袋鼠雲開源框架釘釘技術qun」,交流最新開源技術信息,qun號碼:30537511,項目地址:https://github.com/DTStack


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 慎用遞歸 起因: 在學習Rust的時候,有一道語法練習題是計算斐波那契數列的第N項的值,這是一道非常簡單的題,但是引發了一個使用遞歸性能問題,考慮到用Rust的人不多,後面的代碼都是C#的,因為C#的語法更大眾一些,更好看懂 第一次解 public static ulong FibonacciNum ...
  • 什麼是Keyed service Keyed service是指,為一個需要註入的服務定義一個Key Name,並使用使用Key Name檢索依賴項註入 (DI) 服務的機制。 使用方法 通過調用 AddKeyedSingleton (或 AddKeyedScoped 或 AddKeyedTrans ...
  • 這是我打的第一次比賽,主打的pwn方向,紀念我的成長 需求:一定的linux系統的命令指令知識,基礎的彙編代碼,配置好了的虛擬機(打pwn建議是ubuntu),pwntools的使用,python的使用,ROPgadget的使用 每次把文件拖入IDA前記得用Exeinfope進行檢查一下,看是x86 ...
  • 一、簡介 1.1 Mongodb MongoDb是一個基於分散式文件存儲的資料庫,官方地址 https://www.mongodb.com/ 1.2 資料庫 資料庫(DataBase)是按照數據結構來組織、存儲和管理數據的應用程式。 作用:資料庫的主要作用就是管理數據,對數據進行增(c)、刪(d)、 ...
  • SELECT 關鍵字 SQL的SELECT語句用於從資料庫中選擇數據。SELECT語句的基本語法如下: SELECT column1, column2, ... FROM table_name; 其中,column1, column2,等是您要從表中選擇的欄位名稱,而table_name是您要選擇數 ...
  • 使用Redis Enterprise與Oracle共同用作企業級緩存或副本資料庫,Oracle與Redis Enterprise合作,解決了使用Oracle時的問題。Redis Enterprise提供實時性能、降低成本、解除數據限制,並與Oracle協同工作,用作記憶體資料庫或緩存,提升性能和現代化... ...
  • 近日,2023金融街論壇年會在北京成功舉辦。由華為雲GaussDB參與支持的工商銀行傳統集中式資料庫平滑遷移解決方案和華夏銀行借記卡系統分散式資料庫改造創新研究與實踐,均獲得“十佳卓越實踐獎”。 ...
  • 在剛剛過去的北京Doris Summit Asia 2023,玖章算術技術副總裁陳長城受邀參加並做了《NineData面向Doris實時數倉集成的技術實踐》報告。 ...
一周排行
    -Advertisement-
    Play Games
  • 當使用Autofac處理一個介面有多個實現的情況時,通常會使用鍵(key)進行區分或者通過IIndex索引註入,也可以通過IEnumerable集合獲取所有實例,以下是一個具體的例子,演示如何在Autofac中註冊多個實現,並通過構造函數註入獲取指定實現。 首先,確保你已經安裝了Autofac Nu ...
  • 本篇將分享Prometheus+Grafana的監控平臺搭建,並監控之前文章所搭建的主機&服務,分享日常使用的一些使用經驗本篇將配置常用服務的監控與面板配置:包括 MySQL,MongoDB,CLickHouse,Redis,RabbitMQ,Linux,Windows,Nginx,站點訪問監控,已... ...
  • 使用Aspirate可以將Aspire程式部署到Kubernetes 集群 工具安裝 dotnet tool install -g aspirate --prerelease 註意:Aspirate 正在開發中,該軟體包將作為預覽版進行版本控制,--prelease 選項將獲得最新的預覽版。 容器註 ...
  • 前言 本文要說的這種開發模式,這種模式並不是只有blazor支持,js中有一樣的方案next.js nuxt.js;blazor還有很多其它內容,本文近關註漸進式開發模式。 是的,前後端是主流,不過以下情況也許前後端分離並不是最好的選擇: 小公司,人員不多,利潤不高,創業階段能省則省 個人開發者,接 ...
  • 在.NET中,Microsoft.Extensions.Logging是一個靈活的日誌庫,它允許你將日誌信息記錄到各種不同的目標,包括資料庫。在這個示例中,我將詳細介紹如何使用Microsoft.Extensions.Logging將日誌保存到MySQL資料庫。我們將使用Entity Framewo ...
  • chatgpt介面開發筆記3: 語音識別介面 1.文本轉語音 1、瞭解介面參數 介面地址: POST https://api.openai.com/v1/audio/speech 下麵是介面文檔描述內容: 參數: { "model": "tts-1", "input": "你好,我是饒坤,我是ter ...
  • 前面兩篇文章主要是介紹瞭如何解決高併發情況下資源爭奪的問題。但是現實的應用場景中除了要解決資源爭奪問題,高併發的情況還需要解決更多問題,比如快速處理業務數據等, 本篇文章簡要羅列一下與之相關的更多技術細節。 1、非同步編程:使用async和await關鍵字進行非同步編程,這可以避免阻塞線程,提高程式的響 ...
  • 大家好,我是棧長。 Nacos 2.3.0 前幾天正式發佈了,新增了不少實用性的新功能,真是史上最強版本。 Nacos 2.3.0 還真是一個比較重要的大版本,因為它涉及了太多重大更新,今天棧長給大家來解讀下。 Nacos 先掃個盲: Nacos 一個用於構建雲原生應用的動態服務發現、配置管理和服務 ...
  • IDEA的遠程開發功能,可以將本地的編譯、構建、調試、運行等工作都放在遠程伺服器上執行,而本地僅運行客戶端軟體進行常規的開發操作即可,舊版本IDEA目前不支持該功能.,本例使用的是IDEA2023.2.5版本 下麵介紹如何在IDEA中設置遠程連接伺服器開發環境並結合Cpolar內網穿透工具實現無公網 ...
  • 本文解釋為啥會有響應式編程,為什麼它在開發者中不太受歡迎,以及引入 Java 虛擬線程後它可能最終會消失。 命令式風格編程一直深受開發者喜愛,如 if-then-else、while 迴圈、函數和代碼塊等結構使代碼易理解、調試,異常易追蹤。然而,像所有好的東西一樣,通常也有問題。這種編程風格導致線程 ...