~xdavidwu/cskloudv3-thesis

1c37b34599b914fa35c47c2a4ae745d6aba3b3b4 — Pinghao Wu 3 months ago 0ed5c9f
Backgrounds: add helm
2 files changed, 14 insertions(+), 0 deletions(-)

M Sections/2.Backgrounds.tex
A assets/helm.png
M Sections/2.Backgrounds.tex => Sections/2.Backgrounds.tex +14 -0
@@ 40,3 40,17 @@ Kubernetes 主要透過兩個機制達成使用者的存取控制,其一是 RB
另一個機制為 admission controllers,在 RBAC 後執行,可以根據被創立或更新的 resources 內容進行控制,又分為 mutating 與 validating 兩種。Mutating admission controllers 可以修改 resources 內容,常用於對 resources spec 中的特定欄位賦予預設值。以 mutating admission controllers 賦予預設值的方法,比起在實做 resources 的 controller 定義預設行為,以使用者的立場更為明確,使用者可以觀察創建或修改後的 resource 內容得知其行為,對於平台提供者,也可以透過這個機制實做平台特定的預設值。Validating admission controllers 則無法修改 resources 內容,只能做出允許或拒絕操作的決策,為了能夠驗證最終的 resources 內容,編排在 mutating admission controllers 後執行,常用於執行特定設定上的政策。由於 Kubernetes 功能上的廣泛,不適合將每個功能都規劃成獨立的 resources 類別,用 RBAC 針對 resources 類別進行存取控制有時會顯得不足,admission controllers 便補足了這方面的彈性。

Kubernetes 內建許多 admission controllers,其中一些用來實做基本功能並預設啟用,例如資源配額的部份邏輯即是以這個機制實做。另外也有些預設停用的 admission controllers,提供給管理者進行平台加固或者調整行為使用。對於內建的邏輯不敷使用的場合,Kubernetes 提供兩個機制讓管理者進一步自訂邏輯:webhooks 與 Common Expression Language (簡稱 CEL)。Webhooks 透過呼叫管理者提供的 HTTPS API 達成,支援 mutating 與 validating,可以透過任何能架設 HTTPS API 的語言編寫,在生態系上已經有多個框架可以協助開發,例如:Open Policy Agent 與 Kyverno 等。CEL 為一結構資料處理語言,常用以使軟體功能可程式化,以 Kubernetes 1.31 而言,目前只有 validating 進入穩定狀態,對 mutating 的支援仍在測試階段 (alpha)。相對於 webhooks,使用 CEL 可以直接在 kube-apiserver 上執行邏輯,省略了呼叫 HTTPS API 的網路溝通,減少造成的延遲影響與管理負擔,但能夠進行的操作受限於 Kubernetes 對其執行環境提供的函式庫。

\section{Helm}

Helm 是用來簡化 Kubernetes 上的應用部屬流程的工具,其手段是透過模板化,使得部屬上的設定可以透過更貼近應用本身的角度撰寫。在 Kubernetes 上,典型的部屬應用流程會牽涉多個 resources,例如:Deployment\footnote{Deployment: Kubernetes resources 種類,提供高層次的 Pod 管理,以實做 Pod 的更新與複製等。} 用以管控 Pods、Service 將 Pods 提供的服務集結做負載均衡、Ingress\footnote{Ingress: Kubernetes resources 種類,配置叢集的 HTTP 反向代理,將多個網頁服務集中提供外界存取。} 為 Service 的網頁服務設立反向代理至公網公開等。多個 resources 使得應用部屬有一定的複雜程度,Helm 可以提供更高層級、以應用為中心的單一設定界面,藉此簡化 Kubernetes 的使用。

Helm 用來產生 Kubernetes resources 的模板稱為 Helm Chart,Helm Charts 會集中在 Helm Repository 裡提供使用,Helm Chart 的模板參數稱為 Helm Values,由 Helm 安裝起來的一套應用稱為 Helm Release。透過模板產生的 resources 定義除了套用到 Kubernetes 上之外,Release 會對 resources 額外進行版本紀錄,用以實做更新、回滾、解除安裝等操作。Release 的版本追蹤資訊通常以 Secrets\footnote{Secret: Kubernetes resources 種類,提供資料儲存,本身並不帶有任何功能。} 的形式儲存在叢集內。

\begin{figure}
    \centering
    \includegraphics{assets/helm.png}
    \caption{Helm 原理示意圖}
\end{figure}

Helm 使得在 Kubernetes 叢集上安裝軟體變得相當簡便,Helm Chart 已經成為相當常見的軟體交付手段。在生態系上,軟體開發者通常會於自己架設的 Helm Repository 提供產品的 Helm Chart。另外也存在第三方的業者對常見的開放原始碼軟體進行包裝,大量的提供 Helm Charts。

A assets/helm.png => assets/helm.png +0 -0