Kubernetes Logo。圖/Kubernetes
用過 Hadoop 或 Spark 嗎?相信與巨量資料處理為伍的朋友們都不陌生,透過分散式的計算,可以大幅降低程式運算時間,讓推薦系統、搜尋等服務能在短時間內,根據使用者行為,快速地做反應與變化。應付這麼大量的資料,背後的機器肯定是數以千計,無法透過人工來監控機器的狀態。因此,本文將介紹 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
其實在官方網站上已經有詳細的互動式教學與指引文件,並在網頁介面上提供虛擬機器視窗讓你快速上手 Kubernetes的基本指令,同時也附上許多範例,比如想要建立一個部落格,可以架設 WordPress與 MySQL,或是想要開發網站服務,可以建立 Node.js與MongoDB的容器叢集。
透過 GCP建立一個 Spark叢集
前面提到分散式系統,必須要有一個可靠的監控機制,來處理異常狀況,而對於 Spark這樣的數據運算架構,分散的節點若有些損毀或無法回應時,勢必浪費計算資源,因此透過 Kubernetes,將可以改善這種情形,就讓我們在 GCP上實際架設吧!
進入 GCP後,請選擇 Container Egine建立容器叢集,建立三個容器為示範。另外,有沒有發現上面寫著「用於執行 Kubernetes」呢!我們在 GCP開的容器都是受到 Kubernetes管理唷。
打開下方的指令介面,先從 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上的指引文件。
最後順利的進入Spark,看到可愛的Logo,你就能盡情操作囉。
面對瞬息萬變的世界,只有 Docker是不行的,需要搭配 Kubernetes這樣的管理工具,才能讓容器獲得保障,避免服務中斷或是資源浪費。如果不想要立即搬上雲端,可以採用 Minikube這套單機版本,進行操作練習,當一切就緒後,在尋求雲端服務供應商,使用 Kubernetes相容的容器部屬服務。希望透過本次的介紹,能讓大家對於Kubernetes有基本概念,有興趣的話,可以多嘗試官方提供的案例,體驗 Kubernetes帶來的好處,若有雲端相關問題需要協助,歡迎與我們聯繫。
(本文來自合作部落客 李振皓:傑瑞窩在這,iKala Cloud 授權轉載。)