使用叢集自動調整功能在 OCI Kubernetes 引擎上部署 GitLab 執行器

Oracle Cloud Infrastructure (OCI) Kubernetes Engine 上部署 GitLab 執行器,並使用自動調整功能,根據負載自動調整工作節點規模,以順利在 CI/CD 管線中執行工作。

架構

此架構顯示 OCI Kubernetes 引擎 (OKE) 叢集中部署的 GitLab 執行器。

下圖說明此參考架構。

git-lab-runner-kubernetes.png 的描述如下
git-lab-runner-kubernetes.png 圖解描述

git-lab-runner-kubernetes-oracle.zip

架構具有下列元件:

  • 地區

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

  • 可用性網域

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

  • 容錯域

    容錯網域是可用性網域內的一組硬體和基礎架構。每個可用性網域都有三個具有獨立電源和硬體的容錯域。當您將資源分散到多個容錯域時,您的應用程式可以容忍容錯域內的實體伺服器故障、系統維護和電源故障。

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

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

  • 服務閘道

    服務閘道可讓您從 VCN 存取其他服務,例如 Oracle Cloud Infrastructure Object Storage 。從 VCN 到 Oracle 服務的流量會透過 Oracle 網路結構傳送,不會周遊網際網路。

  • Kubernetes 引擎

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

  • 雲端保全

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

  • 安全區域

    安全區域會強制實行加密資料等原則,並防止對整個區間的網路進行公用存取,以確保 Oracle 的安全最佳做法。安全區域會與相同名稱的區間關聯,並且包括套用至區間及其子區間的安全區域原則或處方。您無法新增或移動標準區間至安全區域區間。

  • Kubernetes 叢集自動調整工具

    Kubernetes 叢集自動調整工具會根據資源要求自動增加或減少節點集區的大小,而非節點集區中節點的資源使用量。

  • OKE 服務

    Kubernetes (OKE) 服務是一個抽象概念,定義一組 Pod 和用來存取 Pod 的原則。服務定位的 Pod 集通常由選取器決定。Kubernetes 服務管理自動調整功能。

  • OKE 工作節點集區

    Kubernetes 工作節點是工作機器,可在 Kubernetes 叢集中執行容器化應用程式。每個叢集至少都有一個工作節點。

    Kubernetes (OKE) 工作節點集區是叢集內所有組態都相同之工作節點的子集。節點集區可讓您在具有不同組態的叢集中建立機器集區。例如,您可以在叢集中建立一個節點集區作為虛擬機器,而建立另一個節點集區作為裸機機器。叢集至少必須要有一個節點集區,但節點集區不需要包含任何工作節點。

    節點集區中的工作節點已連線至您 VCN 中的工作節點子網路。

  • 網際網路閘道

    網際網路網關允許 VCN 中公共子網路與公共網際網路之間的流量。

  • 網路位址轉譯 (NAT) 閘道

    NAT 閘道可讓 VCN 中的專用資源存取網際網路上的主機,而無須向內送網際網路連線公開這些資源。

建議

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

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

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

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

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

    使用區域子網路。

  • 安全

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

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

  • 雲端保全

    複製及自訂 Oracle 提供的預設處方,以建立自訂偵測器和回應器處方。這些處方可讓您指定產生警告的安全性違規類型,以及允許對其執行哪些動作。例如,您可以偵測可見性設為公用物件儲存的儲存桶。

    在租用戶層級套用 Cloud Guard,以涵蓋最廣泛的範圍,並降低維護多個組態的管理負擔。

    您也可以使用「受管理清單」功能,將特定組態套用至偵測器。

  • 網路安全群組 (NSG)

    您可以使用 NSG 定義一組適用於特定 VNIC 的傳入和傳出規則。建議您使用 NSG 而非安全列表,因為 NSG 可讓您將 VCN 的子網路架構和應用程式的安全需求分開。

  • OCI Kubernetes 引擎

    雖然操作員支援任何一般 Kubernetes 叢集,但此架構使用 Kubernetes 引擎叢集。這些叢集有三個工作節點分散在不同的可用性和容錯域。顯示的叢集有工作節點分散在不同的實體主機。您最多可以在叢集中建立 1000 個節點。

  • 安全區域

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

  • 計算

    選擇具有適當 OCPU 和記憶體組合的資源配置,並根據需要為 Kubernetes 叢集節點佈建本機 NVMe 和區塊儲存。

注意事項

部署此參考架構時,請考量下列各點:

  • 效能

    叢集自動調整是以部署資源預約為基礎,您可以編輯 gitlab-ci.yaml 檔案來控制工作資源預約。

  • 安全

    使用政策限制誰可存取貴公司擁有的 Oracle Cloud Infrastructure (OCI) 資源和存取方式。

    OCI Kubernetes EngineOCI Identity and Access Management 整合,以原生 OCI 識別功能提供簡易的認證。

    使用下列變數來控制工作的資源預訂:

    KUBERNETES_CPU_REQUEST: 1  
    KUBERNETES_MEMORY_REQUEST: 4000M
  • 擴展性

    您可以根據負載更新 Kubernetes 叢集中的工作節點數目,藉此橫向擴展應用程式。同樣地,您可以減少叢集中的工作節點數目來縮減。當您在 Kubernetes 叢集上建立服務時,您可以建立負載平衡器,將服務流量分配給該服務的節點。叢集自動調整是以部署資源預訂為基礎,您可以編輯 gitlab-ci.yaml 檔案來控制預訂。

    附註:

    使用 gitlab-ci.yaml 檔案中的參數來預約工作資源不應超過為 GitLab Runner 定義為 locals.tf 檔案中下列資料列所允許的最大預訂數:
    cpu_request_overwrite_max_allowed = "1"        
    memory_request_overwrite_max_allowed = "4096M"
  • 成本

    使用 OCI Kubernetes Engine 免費,而使用 Oracle 容器登錄則是免費的。Kubernetes 叢集中的節點的收費速率與資源配置相同的任何其他運算執行處理相同。

部署

Terraform 程式碼可讓您部署具有所有相依資源 (網路、工作節點集區)、部署叢集自動調整以及 GitLab 執行程式的 OCI Kubernetes 引擎 (OKE) 叢集。此代碼可在 Oracle Cloud Infrastructure Resource Manager 中作為範例堆疊使用。您也可以從 GitHub 下載程式碼,然後視需要加以自訂。
  • 使用 Oracle Cloud Infrastructure Resource Manager 中的範例堆疊進行部署:
    1. 前往 部署至 Oracle Cloud

      如果您尚未登入,請輸入租用戶和使用者證明資料。

    2. 選取要在其中部署堆疊的區域。
    3. 依照螢幕上的提示和指示建立堆疊。
    4. 建立堆疊之後,按一下 Terraform 動作,然後選取計畫
    5. 等待工作完成,然後複查計畫。

      若要進行任何變更,請返回「堆疊詳細資訊」頁面,按一下編輯堆疊,然後進行必要的變更。然後,再次執行計畫 (Plan) 動作。

    6. 如果不需要進一步變更,請返回「堆疊詳細資訊」頁面,按一下 Terraform 動作,然後選取套用
  • 使用 GitHub 中的 Terraform 程式碼部署:
    1. 請前往 GitHub
    2. 複製或下載儲存區域至您的本機電腦。
    3. 遵循 README 文件中的指示。

探索更多

深入瞭解 Oracle Cloud Infrastructure (OCI) 和 Kubernetes。

檢閱Oracle Cloud Infrastructure 的最佳實務架構以獲得最佳實務。

檢閱這些額外的 OCI 和 GitLab 資源:

確認

  • 作者:Chandrashekar Avadhani,Andrei Ilas
  • 貢獻者:Ben Romine,Lukasz Feldman