Kubernetes 叢集的雲端託管服務能簡化 PaaS 平台建構,提供負載平衡器和網路磁碟等必要功能。本文假設已具備 Kubernetes 叢集且 kube-config
已設定,並已安裝 kubectl 和 HelmWave 工具。首先,利用 HelmWave 佈署 Envoy Gateway 作為平台閘道器,並建立 GatewayClass 以支援 Envoy Gateway 的流量管理。透過 Helm 圖表定義 Gateway、HTTPRoute 和 TCPRoute 等資源,設定流量路由規則。後續將整合 PaaS UI,並以 PostgreSQL 服務為例,說明如何建立服務模組、設定 TemplateStore,最終佈署 PostgreSQL 應用程式到平台上。
Kubernetes開發PaaS:零程式碼開發之最大可能性 (第一部)
Kubernetes不只是容器協調器,更是整合工具的生態系,能輕鬆建構無需編碼的PaaS平台。Helm、ArgoCD、Crossplane、Knative等工具簡化應用程式和基礎架構管理,讓開發自有平台變成設定而非程式設計的工作。我是台灣資深軟體工程師,在VK Tech團隊擔任技術主管,負責根據Kubernetes開發PaaS平台以簡化資料處理。本系列文章將逐步解說如何利用Kubernetes及其生態系建構PaaS。
要將Kubernetes轉變為PaaS,需要先有Kubernetes叢集。但本文目標不在於從零開始佈署Kubernetes,而是展示如何將其轉變成好用的PaaS。因此,建議您從雲端供應商取得託管式叢集。這能提供現成的解決方案,節省時間和精力:
- 負載平衡器 (Load Balancer): 將外部流量導向叢集內部。建立服務後取得IP位址即可存取。
- 網路磁碟: 永續性儲存空間 (Persistent Volumes) 已內建於基礎架構中。連線到Pod即可使用,無需額外設定NFS。
此方法能快速建立可運作的基礎,讓您可以專注於PaaS建構,而非調整裸機叢集。後續只需在基礎上新增PaaS元件即可。
準備工作
假設您的叢集已設定完成,且kube-config
位於您的家目錄中,準備開始作業。首先,確認並安裝必要的工具 (若尚未安裝):
- kubectl: Kubernetes管理的關鍵工具,如同叢集的萬用工具刀,可用於執行指令、檢查Pod狀態、佈署資源等。不可或缺。
- Helmwave: 方便管理Helm圖表並將其佈署到叢集的工具。我一開始考慮使用Terraform,但它在處理自訂資源 (CRD) 時會遇到問題,因為它並非總是能識別CRD,且速度也明顯較慢。Helmwave處理CRD更乾淨快速。
有了這些工具,我們可以繼續在叢集上構建平台。下圖顯示平台的主要組成元件:
此圖顯示
此圖將我們的平台劃分為三個主要區塊,以展現各部分的協同運作方式:
1. PaaS 系統: 平台基礎,包含所有使用者所需的核心元件:
- Gateway:負責將外部流量路由至叢集,所有服務請求皆由此進入。
- IAM:身份驗證與授權系統,決定使用者許可權。
- 可觀察性 (Observability):監控和分析工具群組:
- 儀錶板 (Dashboard):資料視覺化。
- 日誌 (Logs):收集和分析日誌,用於稽核和除錯。
- 指標 (Metrics):效能指標。 2. PaaS 運算元 (Operator): Kubernetes運算元所在位置,自動化資源和自訂物件的管理。圖中顯示三個運算元 (Operator 1, 2, 3),每個負責特定型別的應用程式。 3. 使用者 1 (Tenant-1): 特定使用者或團隊 (租戶) 的空間範例:
- PaaS 使用者介面 (UI):簡潔的使用者介面,讓使用者無需使用終端機即可管理應用程式。
- 應用程式 1 和 2 (App 1 和 App 2):租戶執行的應用程式或服務,例如ETL管道或資料儀錶板。
Gateway
我選擇使用Envoy Gateway 作為平台的Gateway,原因如下:
- 想嘗試看看。對最新的Kubernetes Gateway API和Envoy的功能感到好奇,之前沒用過。
- Kubernetes Gateway API (Envoy Gateway的最新標準) 是新版Kubernetes Gateway API (預計於2023年達到GA 1.0版本) 最佳實作之一,用於取代舊版的Ingress。這為我們的平台提供了彈性的宣告式路由和流量管理。
使用Helmwave安裝Envoy Gateway
在工作目錄中建立helmwave.yml
檔案,並加入Envoy Gateway圖表的描述:
helmwave.yaml
project: kube-paas
version: "0.41.8"
registries:
- host: docker.io
.options-system: &options-system
namespace: paas-system
create_namespace: true
wait: true
timeout: 1m
max_history: 3
releases:
- name: "eg"
chart:
name: oci://docker.io/envoyproxy/gateway-helm
<<: *options-system
tags: [eg]
執行以下指令:
helmwave up -t eg --build --kubedog
此指令會建置 ( --build
旗標) 並套用 ( up
指令) 清單到叢集。說明如下:
-t
選項允許只執行指定的釋出。--kubedog
旗標允許在安裝釋出期間追蹤 Job、Pod、Deployment 等的狀態。
新增GatewayClass以支援Envoy Gateway
為了新增Gateway資源並透過Envoy Gateway管理流量路由,需要設定GatewayClass。我們將建立Helm圖表PaaS-system
,並加入gateway.yaml
範本:
- 建立Helm圖表
PaaS-system
:
helm create paas-system
- 在
paas-system/templates
資料夾中建立gateway.yaml
檔案,內容為Envoy Gateway的GatewayClass描述:
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: envoy-gateway-class
spec:
controllerName: gateway.envoyproxy.io/gatewaycontroller
此GatewayClass指定Envoy Gateway將管理我們的閘道。gateway.envoyproxy.io/gatewaycontroller
控制器將其與已安裝的Envoy Gateway連結。
- 將此圖表加入
helmwave.yml
,讓Helmwave將其佈署到叢集:
release:
...
- name: "system"
chart:
name: "./paas-system"
<<: *options-system
tags: [system]
- 執行以下指令:
helmwave up -t system --build
為定義如何將流量導向叢集內部,我們將建立一個專屬的Helm圖表。此圖表將新增Gateway進行路由、HTTPRoute用於存取PaaS UI,以及TCPRoute用於連線到已佈署的服務。
(以下內容因篇幅限制,將簡化並重點呈現後續步驟,詳細程式碼請參考原文)
後續章節將說明如何選擇並整合PaaS UI (例如Cyclops UI)、建立PostgreSQL服務模組、設定TemplateStore以及最終佈署PostgreSQL應用程式等步驟。 每個步驟都會包含必要的Helm chart組態以及#### 內容解密:
的程式碼說明。
總結: 本文詳細闡述了利用Kubernetes以及相關工具(Helm, Envoy Gateway, Cyclops UI等) 建立PaaS平台的第一步,著重於架構設計和核心元件的佈署與組態,為後續的IAM整合以及更多服務的加入奠定了堅實的基礎。 後續文章將繼續探討平台的擴充套件和最佳化。