在雲原生時代,資源管理的複雜性日益提升,仰賴單純的手動操作或指令碼維護已不合時宜。Crossplane 作為一款開源的雲原生控制平面,提供強大的資源管理能力。然而,直接管理底層資源仍然需要一定的專業知識,與容易產生孤立資源,增加管理負擔。本文將探討 Crossplane 組合的應用,從刪除孤立資源到定義高階抽象服務,逐步建構簡潔高效的雲原生資源管理平台。首先,刪除 Crossplane 管理的資源時,系統會自動協調期望狀態與實際狀態,確保雲端資源同步移除。但需注意,某些雲端供應商的子資源可能並非由 Crossplane 直接管理,例如 AWS 中由 Ingress 控制器產生的 ELB 負載平衡器,即使移除 Kubernetes 叢集,ELB 仍可能殘留。因此,在設計 Crossplane 應用時,務必考慮孤立資源的清理機制。接著,我們將探討 Crossplane 組合如何定義高階抽象服務。直接管理底層資源如同操作基礎元件,而組合則允許我們定義更具體的「事物」,例如一個包含 RDS、VPC、子網路和閘道的完整資料函式庫服務。這就好比提供預先組裝好的模組,讓開發團隊無需深入理解底層細節,即可快速佈署和管理所需資源。透過組合,我們可以將專業知識編碼,並將服務公開為更高層次的抽象,實作左移,賦能開發團隊自主管理基礎設施。最後,我們將解析 Crossplane 組合的組成部分:組合資源定義(CRD)、組合和組合資源。CRD 擴充套件了 Kubernetes API,允許我們定義「事物」的規範;組合則根據 CRD 實作具體的服務定義;組合資源則是組合的例項化。透過這些元件,我們可以建構一個內部開發者平台,提供簡化開發流程的服務,提升團隊效率。

利用 Crossplane 管理資源:從刪除到組合的深度解析

在雲原生環境中,資源管理是一個複雜的挑戰。本文將探討如何使用 Crossplane 進行資源管理,從刪除託管資源到利用組合(Compositions)定義高階抽象服務,開發更易於使用的內部開發者平台。玄貓將分享在不同情境下,如何利用 Crossplane 簡化雲資源的管理流程。

託管資源的刪除與清理

當我們刪除由 Crossplane 管理的資源時,Crossplane 會檢測期望狀態與實際狀態之間的差異,並自動執行協調(reconciliation)流程。這意味著,如果我們刪除 Kubernetes 資源清單,Crossplane 會相應地從雲端供應商那裡移除相關資源。

kubectl delete --filename examples/$HYPERSCALER-vm-bigger.yaml

然而,有時候雲端供應商可能會從 Crossplane 管理的資源中衍生出子資源。由於這些子資源並非由 Crossplane 直接管理,因此在移除父資源後,它們可能會「懸掛」(dangling)在那裡。例如,在 AWS 中,透過建立 Ingress 控制器而產生的 ELB 負載平衡器,即使我們透過 Crossplane 移除 Kubernetes 叢集,它仍然會存在。玄貓建議,在設計 Crossplane 應用時,應考慮這些孤立資源的清理機制,確保環境的整潔。

徹底清除所有資源

在深入研究 Crossplane 的其他功能之前,讓我們先清除之前建立的所有資源。這可以透過執行一個簡單的指令碼來完成:

chmod +x destroy/01-managed-resources.sh
./destroy/01-managed-resources.sh
exit

Crossplane 組合(Compositions):定義高階抽象

雖然使用 Crossplane 管理個別資源非常方便,但這種方法通常過於底層。例如,建立和管理一個生產級別的資料函式庫,可能需要組合多個底層資源,例如 RDS、VPC、子網路和閘道等等。這需要相當程度的專業知識,並非組織中的每個人都具備。

為了實作「左移」(shift left),我們需要讓團隊成員能夠自主地管理資源,而無需等待他人組裝這些底層元件。這就是 Crossplane 組合(Compositions)的用武之地。它們使我們能夠定義「事物」是什麼,將專業知識編碼,並將服務公開為更高層次的抽象。

例如,資料函式庫專家可以建立服務,使其他人能夠以適合生產的方式管理資料函式庫。Kubernetes 專家可以建立定義應用程式的抽象。安全專家可以將安全性和策略融入這些服務中。最終結果是一個內部開發者平台,該平台公開簡化開發人員和其他軟體工程師工作流程的服務。

組合資源定義(Composite Resource Definitions)

Crossplane 組合由幾個元件組成:組合資源定義(Composite Resource Definitions)、組合(Compositions)和組合資源(Composite Resources)。

組合資源定義的主要作用是透過建立自定義資源定義(Custom Resource Definitions,CRD)來擴充套件 Kubernetes API。它們使我們能夠定義「事物」是什麼。

接下來,讓玄貓帶領大家看看一個簡單的例子,我們將在本章中逐步改進它。

cat compositions/sql-v1/definition.yaml

Crossplane 組合的設定

本章的設定延續了前一章的模式。所有指令都可以在 Gist 中找到。

首先,進入 fork 後的儲存函式庫目錄:

cd crossplane-tutorial

然後,啟動 Nix shell,它會引入我們需要的所有工具:

nix-shell --run $SHELL

接下來,使設定指令碼可執行:

chmod +x setup/02-compositions.sh

並執行它:

./setup/02-compositions.sh

最後,如果我們稍後需要它們,請載入環境變數:

source .env

現在我們可以探索組合資源定義了。