在雲原生時代,基礎設施的佈署和管理日益複雜。過去,我們可能需要手動組態伺服器、安裝軟體、設定網路等等。現在,我們可以使用 Kubernetes 等工具來自動化這些任務。但是,即使有了 Kubernetes,管理不同雲端供應商的資源仍然是一項挑戰。Crossplane 作為 Kubernetes 的擴充套件,提供了一個統一的控制平面,讓我們可以管理各種雲端資源,而 Compositions 則更進一步,允許我們將這些資源組合成更高階別的抽象,簡化佈署和管理。

Crossplane Compositions 允許我們定義可重複使用的基礎設施模組。這些模組可以包含 Kubernetes 叢集、資料函式庫、儲存桶、網路等等。透過 Compositions,我們可以將這些資源組合在一起,並定義它們之間的依賴關係。例如,我們可以定義一個 Composition,它包含一個 Kubernetes 叢集和一個資料函式庫。當我們佈署這個 Composition 時,Crossplane 會自動建立 Kubernetes 叢集和資料函式庫,並確保它們之間的連線正常。

更重要的是,Compositions 支援引數化組態,這意味著我們可以根據不同的需求,輕鬆地調整 Composition 的組態。例如,我們可以定義一個 Composition,它可以根據不同的引數,建立不同大小的 Kubernetes 叢集。這種靈活性使得 Compositions 成為構建可重複使用與易於管理的雲原生基礎設施平台的理想工具。

除了簡化佈署和管理之外,Compositions 還可以幫助我們實施 GitOps 最佳實踐。我們可以將 Compositions 的定義儲存在 Git 儲存函式庫中,並使用 GitOps 工具來自動化佈署和更新。這種方法可以提高基礎設施管理的可見性、可追溯性和可稽核性。

雲原生控制平面:Crossplane 的崛起

想像一下,如果你的公司內部也能擁有像 AWS、Google Cloud 或 Azure 那樣的雲端體驗,那會是什麼感覺?使用者可以像在公有雲上那樣,輕鬆地使用各種服務,而無需關心底層的複雜性。

需要一個符合公司安全、備份和合規政策的資料函式庫嗎?沒問題,直接申請一個服務就好。想在 Kubernetes 上執行後端應用程式?也有對應的服務。甚至連 Kubernetes 叢集本身,也能透過一個服務快速建立。

使用者只需定義一個簡單的 Manifest 檔案,描述他們需要的資源,然後將其提交到控制平面的 API,就能觀察資源的實際狀態。更方便的是,他們甚至可以不用直接操作 API,而是將 Manifest 提交到 Git 儲存函式庫。

開發企業專屬的雲端體驗

如果我們能複製公有雲的使用體驗,並根據自身需求進行客製化,那將會非常棒。如果有一個明確定義的 API,並且使用者需要執行的任務與平台本身的責任之間有清楚的劃分,那就更理想了。

Crossplane 正是為瞭解決這個問題而生的專案。它讓我們能夠建立根據與公有雲供應商相同原則的控制平面。它將原本只有 AWS、Azure 和 Google Cloud 等大型雲端供應商才能使用的技術普及化,使我們能夠建立內部開發者平台。

Crossplane:雲原生控制平面的未來

Crossplane 讓我們能夠以雲原生的方式管理基礎設施。它擴充套件了 Kubernetes 的功能,使其不僅能管理應用程式,還能管理各種雲端資源,例如資料函式庫、儲存桶和網路。

透過 Crossplane,你可以定義自己的 API,並將其暴露給開發者。開發者可以使用這些 API 來請求所需的資源,而無需瞭解底層的實作細節。Crossplane 會自動組態和管理這些資源,確保它們符合你的策略和需求。

玄貓的學習之道:從實作中掌握 Crossplane

在深入 Crossplane 的各項功能之前,玄貓必須先提醒你,這本章將採用一種非典型的教學方法。我不會像傳統教材那樣,先進行冗長的介紹,然後是更長的理論,接著解釋每個元件,最後再放上一堆積圖表。

這本章反映了我個人的學習方式。我從實作中學習,透過不斷操作鍵盤來學習,透過犯錯和修正錯誤來學習,透過實驗來學習。這就是我將在這本章中採用的方法。我會解釋理論和概念,也會展示圖表,但只會透過實作練習。我會解釋我們做了什麼,而不是做我所解釋的。

Crossplane 的核心概念

  • 供應商(Providers): Crossplane 供應商是 Kubernetes 的擴充功能,用於管理特定型別的雲端資源。例如,AWS 供應商可以管理 AWS 資源,而 Azure 供應商可以管理 Azure 資源。
  • 託管資源(Managed Resources): 託管資源是由 Crossplane 管理的雲端資源。它們是 Kubernetes 的自訂資源,代表雲端供應商中的實際資源。
  • 組合(Compositions): 組合是一種將多個託管資源組合在一起的方法,以建立更高階別的服務。例如,你可以建立一個包含資料函式庫、儲存桶和網路的組合,以建立一個完整的應用程式環境。
  • 組態包(Configuration Packages): 組態包是一種將 Crossplane 組態封裝和佈署的方法。它們包含供應商、組合和其他資源的定義。
  • 組合函式(Composition Functions): 組合函式是一種在組閤中執行自訂邏輯的方法。它們可以用於修改託管資源的組態,或執行其他任務。

準備好迎接雲原生控制平面的時代了嗎?

Crossplane 是一個強大的工具,可以幫助你建立自己的雲原生控制平面。透過本章,你將學習如何使用 Crossplane 來管理基礎設施、建立內部開發者平台,並 democratize 雲端技術。

讓我們一起踏上 Crossplane 的旅程,開發更靈活、更高效的雲端環境吧!

環境組態

在開始使用 Crossplane 之前,我們需要先設定好環境。這包括安裝 Crossplane、組態 Kubernetes 叢集,以及安裝所需的供應商。

擁抱雲原生未來:Crossplane 快速上手與環境組態

如果你對雲原生技術抱有熱情,並且渴望深入瞭解如何更有效地管理雲端資源,那麼你找對地方了。如果還不清楚,建議先了解相關背景知識再回來。

在開始深入之前,讓玄貓先帶你快速瀏覽一下,我們將在本系列文章中構建的一些內容。這將幫助你瞭解 Crossplane 的潛力,並判斷它是否值得你投入時間學習和應用。

環境準備:告別繁瑣的 CLI 安裝

在傳統的技術文章中,通常會花費大量篇幅介紹環境組態,例如安裝 kubectlcrossplanegumgh 等等。但玄貓認為,這種方式既耗時又容易讓人感到沮喪。

因此,玄貓將採用 Nix 來簡化環境設定。Nix 允許我們建立包含所有必要工具的 Shell 環境。這不僅方便,還能避免因作業系統差異而產生的問題。

除了 Nix,我們還需要安裝 Docker。玄貓不建議在 Nix 中執行 Docker,所以請確保你的主機已經安裝 Docker。

最後,我們需要 gh (GitHub CLI) 來 Fork 包含範例的儲存函式庫,其中也包含 shell.nix 檔案。如果還沒安裝,請先安裝 gh。

現在,我們可以開始設定環境了,讓玄貓帶你一窺雲原生管理的未來。

快速啟動:使用指令碼自動組態

玄貓已經為大家準備好了設定指令碼,可以自動完成所有必要的組態。你可以選擇執行這些指令碼並按照指示操作,或者你也可以選擇自行檢查指令碼並手動設定所有內容。

首先,Fork 儲存函式庫:

gh repo fork vfarcic/crossplane-tutorial --clone --remote

然後,進入 crossplane-tutorial 目錄:

cd crossplane-tutorial

並選擇 Fork 作為預設儲存函式庫:

gh repo set-default

接著,啟動一個包含所有必要工具的 Nix Shell:

nix-shell --run $SHELL

第一次執行 nix-shell 可能需要一些時間,因為需要安裝許多 CLI 工具。但請耐心等待,這些套件會被快取,後續執行幾乎是瞬間完成。

或者,你可以跳過執行 nix-shell,但你需要確保滿足所有需求。

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

chmod +x setup/00-intro.sh

並執行它:

./setup/00-intro.sh

確認你已準備好開始,除非你更喜歡檢查指令碼並手動設定所有內容。

指令碼會先建立一個包含 NGINX Ingress 的 Kind 叢集。啟動並執行後,它會安裝 Crossplane 和一些組態。如果還不熟悉這些概念,別擔心,我們將在後面的章節中探討。現在,我們只是快速瞭解 Crossplane 的一些功能。

這些組態最終會建立數百個自訂資源定義,這需要一些時間,所以請耐心等待所有 Provider 啟動並執行。

一旦所有 Provider 準備就緒,你就可以選擇一個雲端供應商。

玄貓在這個章節選擇 AWS,你也可以選擇其他任何一個。為了保持內容的多樣性,玄貓將在每個章節中選擇不同的雲端供應商,因此你在本系列文章中看到的輸出可能與你在終端機上看到的有所不同。所有 Provider 的邏輯都是相同的,所以這應該不會有問題。

選擇雲端供應商後,指令碼會設定 Crossplane 與之協同工作所需的一切。

最後,指令碼會安裝並設定 Argo CD。

在指令碼執行過程中,一些環境變數會被放入 .env 檔案中。我們需要這些變數,所以讓我們執行它:

source .env

現在,我們準備好了解 Crossplane 的一些功能。

雲原生管理的未來:YAML 宣告式組態

以下是雲原生管理的未來樣貌:

cat examples/$HYPERSCALER-intro.yaml

(此處應顯示 YAML 檔案的內容,但由於篇幅限制,省略)

透過 YAML 檔案,我們可以宣告式地定義和管理雲端資源,實作基礎設施即程式碼 (Infrastructure as Code, IaC)。