快速上手!使用 Kubernetes 建立 Spark 服務

kubernetes Kubernetes Logo。圖/Kubernetes 作者:李振皓(現就讀於台大電機所) 用過 HadoopSpark 嗎?相信與巨量資料處理為伍的朋友們都不陌生,透過分散式的計算,可以大幅降低程式運算時間,讓推薦系統、搜尋等服務能在短時間內,根據使用者行為,快速地做反應與變化。應付這麼大量的資料,背後的機器肯定是數以千計,無法透過人工來監控機器的狀態。因此,本文將介紹 Kubernetes 容器管理工具,並透過簡單範例,告訴你如何在 GCP上建立一個 Spark叢集。

甚麼是 Kubernetes?

Kubernetes源自於 Google的專案 Borg system,是一套開源軟體,俗稱 K8S,目的希望改善 Docker上的排程管理、負載平衡以及系統擴展性。簡單的說,它就是一個監控程式,當叢集中有個容器因發生問題而停止運作,Kubernetes會偵測到這樣的異常狀況,並在短時間內重新佈署資源。此外,如果資源存取的流量會根據使用者的行為而有大量起伏,也能透過 Kubernetes的設定,針對不同流量情形做數量調整,讓系統保持穩定運作。

運作方式

這裡我們介紹 Kubernetes最主要的三個構成要素,分別是 Pod、Replication controller(RC)與Service。Kubernetes 主要的控制核心是 RC,可以根據設定去控管 Pod的運作,而每個 Pod 可以存放一個或多個容器。當使用者發出請求時,這些請求會經過 Service進行負載平衡,根據分配演算法分至不同的 Pod存取資源。
  • Pod:Kubernetes的最小單位,每個 Pod可以放置一個或多個容器
  • Replication controller:管理 Pod 的控制器,讓指定數量的Pod 能同時順利執行
  • Service:對外的窗口,其實就是一個負載平衡器,將外部流量導向至 Pod
運作流程如下圖所示,如果想要深入了解運作原理,歡迎前往官方教學頁面
kubernetes-architecture
Kubernetes 的基本架構。圖/截圖自 Kubernetes

學習 Kubernetes

其實在官方網站上已經有詳細的互動式教學指引文件,並在網頁介面上提供虛擬機器視窗讓你快速上手 Kubernetes的基本指令,同時也附上許多範例,比如想要建立一個部落格,可以架設 WordPress與 MySQL,或是想要開發網站服務,可以建立 Node.js與MongoDB的容器叢集。
kubernetes-tutorials
Kubernetes 官方教學課程。圖/截圖自 Kubernetes

透過 GCP建立一個 Spark叢集

前面提到分散式系統,必須要有一個可靠的監控機制,來處理異常狀況,而對於 Spark這樣的數據運算架構,分散的節點若有些損毀或無法回應時,勢必浪費計算資源,因此透過 Kubernetes,將可以改善這種情形,就讓我們在 GCP上實際架設吧! 進入 GCP後,請選擇 Container Egine建立容器叢集,建立三個容器為示範。另外,有沒有發現上面寫著「用於執行 Kubernetes」呢!我們在 GCP開的容器都是受到 Kubernetes管理唷。
k8s-cluster
在 GCP上建立容器叢集。圖/截圖自 GCP
k8s-cluster2
建立容器叢集,包含 3個容器。圖/截圖自 GCP
打開下方的指令介面,先從 GitHub 下載 Spark範例檔案 git clone https://github.com/kubernetes/kubernetes.git 透過 kubectl 指令,載入模板文件,建立 namespace kubectl create -f examples/spark/namespace-spark-cluster.yaml 開啟 Master服務 kubectl create -f examples/spark/spark-master-controller.yaml kubectl create -f examples/spark/spark-master-service.yaml 開啟 Worker服務 kubectl create -f examples/spark/spark-worker-controller.yaml 可以透過 Zeppelin UI開啟新的 Spark Job kubectl create -f examples/spark/zeppelin-controller.yaml 完成後,叢集中的三個容器,一個分配為 Master節點,剩餘兩個則為 Woker,透過 get pods指令,會看見這三個容器目前都正常執行中,顯示「Running」與存活時間。其他詳細的步驟請參考 GitHub上的指引文件
k8s-cli
檢查容器叢集狀態。圖/截圖自 GCP
最後順利的進入Spark,看到可愛的Logo,你就能盡情操作囉。
k8s-cli2
開啟 Spark。圖/截圖自 GCP
面對瞬息萬變的世界,只有 Docker是不行的,需要搭配 Kubernetes這樣的管理工具,才能讓容器獲得保障,避免服務中斷或是資源浪費。如果不想要立即搬上雲端,可以採用 Minikube這套單機版本,進行操作練習,當一切就緒後,在尋求雲端服務供應商,使用 Kubernetes相容的容器部屬服務。希望透過本次的介紹,能讓大家對於Kubernetes有基本概念,有興趣的話,可以多嘗試官方提供的案例,體驗 Kubernetes帶來的好處,若有雲端相關問題需要協助,歡迎與我們聯繫。

連絡我們