在 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 代理程式,先佔式執行處理節點可讓客戶節省一半的預算。