Oracle Cloud Infrastructure Kubernetes Engine 上擴展和最佳化 Jenkins

Jenkins 是仍由開發人員用來自動驗證、建置及部署程式碼的 CI/CD 系統,讓他們能夠專注於提供新功能。

隨著 Kubernetes 的發布,分散式和非共用的架構已逐漸成為規範,因此所有最近的 CI/CD 系統都部署在 Kubernetes 上。至於 Jenkins,控制器 / 代理程式架構可能不夠適用於大型組織和開發團隊,但由於社群所付出的努力,因此得以將 Jenkins 容器化並以雲端原生方式進行部署。

您可以在 Oracle Cloud Infrastructure Kubernetes Engine ( OCI Kubernetes Engine 或 OKE) 上代管 Jenkins,以集中管理組建自動化,並隨著軟體專案的成長進行擴展。透過在 OKE 上導入可擴展的 Jenkins,開發者不僅能夠靈活開發新服務,還能輕鬆擴展 CI/CD 管線。

架構

此高階參考架構顯示 OKE 上多個 Jenkins 部署的範例。透過在 OKE as a Service 上部署 Jenkins,您可以視需要擴展。

每個 Jenkins 控制器 Pod 都有連附的永久磁碟區,可讓管線歷史記錄和其他由團隊安裝的外掛程式。每次在最後觸發管線工作並自動銷毀時,都會建立 Jenkins 代理程式。

您可以透過負載平衡器或使用 Kubernetes 傳入,個別公開每個 Jenkins 執行處理。

下圖說明此參考架構。



oci-jenkins-oke-arch-oracle.zip

架構具有下列元件:

  • 地區

    Oracle Cloud Infrastructure 區域是一個本地化地理區域,其中包含一或多個稱為可用性網域的資料中心。區域獨立於其他區域,而廣大的距離可以將其分開 (跨國家或大陸)。

  • 可用性網域

    可用性網域是區域內的獨立獨立資料中心。每個可用性網域中的實體資源會與其他可用性網域中的資源隔離,以提供容錯能力。可用性網域不會共用基礎架構 (例如電源或冷卻系統) 或內部可用性網域網路。因此,一個可用性網域的故障不應影響該區域中的其他可用性網域。

  • 虛擬雲端網路 (VCN) 和子網路

    VCN 是您在 Oracle Cloud Infrastructure 區域中設定的可自訂軟體定義網路。與傳統的資料中心網路一樣,VCN 可讓您控制網路環境。VCN 可以有多個非重疊的 CIDR 區塊,您可以在建立 VCN 之後變更。您可以將 VCN 區隔成子網路,此子網路可以設定區域範圍或可用性網域。每個子網路都是由連續的位址範圍組成,這些位址不會與 VCN 中的其他子網路重疊。您可以在建立子網路後變更其大小。子網路可以是公用或專用。

  • 負載平衡器

    Oracle Cloud Infrastructure Load Balancing 服務提供從單一進入點到後端多部伺服器的自動流量分配。

  • 安全清單

    您可以為每個子網路建立安全規則,以指定必須允許進出子網路的來源、目的地和流量類型。

  • Kubernetes 引擎

    Oracle Cloud Infrastructure Kubernetes Engine ( OCI Kubernetes 引擎OKE) 是完全託管、可擴展且高可用性的服務,可用來將容器化應用程式部署到雲端。您可以指定應用程式所需的運算資源,而 Kubernetes 引擎則會在現有租用戶的 Oracle Cloud Infrastructure 上佈建這些資源。OKE 使用 Kubernetes 將跨主機叢集的容器化應用程式部署、調整規模及管理自動化。

建議

使用下列建議作為起點。您的需求可能與此處描述的架構不同。
  • VCN

    建立 VCN 時,請根據您計畫附加到 VCN 子網路的資源數量,決定所需的 CIDR 區塊數量和每個區塊的大小。請使用標準專用 IP 位址空間內的 CIDR 區塊。

    選取未與您要設定專用連線的任何其他網路重疊的 CIDR 區塊 (在 Oracle Cloud Infrastructure 中、您的內部部署資料中心或其他雲端提供者)。

    建立 VCN 之後,您可以變更、新增及移除其 CIDR 區塊。

    當您設計子網路時,請考慮流量和安全需求。將特定層或角色中的所有資源附加至相同的子網路,作為安全界限。

  • 安全

    使用 Oracle Cloud Guard 主動監控和維護 Oracle Cloud Infrastructure 中 OCI 資源的安全性。Cloud Guard 會使用偵測器處方來檢查資源是否有安全漏洞,以及監控操作員和使用者是否有危險活動。偵測到任何組態錯誤或不安全活動時,雲端保全會根據您可定義的回應器處方,建議採取更正動作並協助採取這些動作。

    對於需要最高安全性資源,Oracle 建議您使用安全區域。安全區域是與以最佳做法為基礎之 Oracle 定義的安全原則處方關聯的區間。例如,安全區域中的資源不得從公用網際網路存取,且必須使用客戶管理的金鑰來加密。當您在安全區域中建立及更新資源時,OCI 會根據安全區域處方中的原則驗證作業,並拒絕違反任何原則的作業。

  • 負載平衡器頻寬

    建立負載平衡器時,您可以選取提供固定頻寬的預先定義資源配置,或指定自訂 (彈性) 資源配置,以便在其中設定頻寬範圍,並讓服務根據流量模式自動調整頻寬。只要採用任一方式,您就可以在建立負載平衡器之後隨時變更資源配置。

  • Oracle Cloud Infrastructure Kubernetes Engine 與運算資源配置

    至少會在 OCI Kubernetes 引擎上部署兩個節點集區:一個用於 Jenkins 控制器,另一個用於 Jenkins 代理程式。

    若要節省成本並最佳化整個解決方案,建議您使用 VM.Standard.A1。Jenkins 與 ARM 執行處理完全相容,因此 Jenkins 控制器的彈性執行處理。對於代理程式節點集區,建議使用先佔式執行處理,因為管線工作通常是短期且容錯的。

  • Oracle Cloud Infrastructure Registry

    Oracle Cloud Infrastructure Registry 是用於代管映像檔的專用 OCI 相容容器儲存區域。在此架構中,它是選擇性的,可用來代管您自己的 Jenkins 自訂映像檔,並安裝所有必要的 Plugin。建議您在單一容器映像檔中建立自訂 Jenkins 控制器映像檔,以強制實行安全性及封裝所有常用的 Plugin。

注意事項

建置此參照架構時,請考量下列各點。

  • 效能和擴展性

    隨著開發團隊的成長或縮小,使用 Kubernetes 輕鬆擴展 Jenkins 控制器和代理程式。此外,由於每次執行管線工作時都會建立代理程式 Pod,因此可以自訂每個管線庫上這些 Pod 所使用的資源。

  • 使用狀態

    為了將可用性最大化,建議在不同的可用性或容錯域佈建多個 OKE 節點。此外,為了保護 Jenkins 免於自願和非自願中斷,您可以使用標準 Kubernetes 機制,例如 Pod 中斷預算和 Pod 防相關性。

  • 成本

    此架構的目的也是在 OKE 上使用 Jenkins 時將成本降到最低。您可以將 ARM 節點用於 Jenkins 控制器,這相當於彈性運算執行處理的四分之一。至於 Jenkins 代理程式,先佔式執行處理節點可讓客戶節省一半的預算。

確認

  • Author: Alberto Campagna
  • Contributor: Marta Tolosa