使用 Argo CD 和 OCI Kubernetes Engine 部署 GitOps
GitOps 是一種 CI/CD 的風格,使用 Git 儲存區域作為單一事實來源,以提供基礎架構即程式碼。它倡導者從原始程式碼和應用程式的組態,以宣告方式在 Git 儲存區域中放入整個應用程式。這提供了一種一致的方式來部署對應用程式組態的變更,並透過充分瞭解 Git 工作流程 (例如提取要求和合併要求) 提供版本控制。
- 應用程式開發的標準工作流程。
- 提升了預先設定應用程式需求的安全性。
- 透過 Git 提供可見性和版本控制,提升可靠性。
- 任何叢集、任何雲端和任何內部部署環境的一致性。
最佳做法是為應用程式原始程式碼和組態設定個別的 Git 儲存區域,因為組態變更通常不需要變更應用程式原始程式碼。擁有不同的儲存庫可讓您變更應用程式組態,而不觸發 CI 建置。
- Kubernetes 資訊清單
- Helm Chart
- 自訂清單。
架構
您可以透過 Argo CD 應用程式的 Web UI 或 Argo CD 指令行介面存取 Argo CD 應用程式。Argo CD 工具的連線是由 OCI Kubernetes 引擎叢集中部署的負載平衡器服務提供。部署 Argo CD 後,只要 OCI Kubernetes 引擎叢集在所需的連接埠和 Git 儲存區域的證明資料上具有 IP 連線能力,即可將其設定為與內部或外部代管的 Git 儲存區域同步至 Oracle Cloud Infrastructure。Argo CD 與儲存庫同步後,在儲存庫中對應用程式組態所做的任何更新都會套用至 OCI Kubernetes Engine 叢集。如果對 Git 儲存區域以外的應用程式進行變更,Argo CD 會將應用程式不同步,並回復變更,使其與 Git 儲存區域所需的狀態一致。
下圖說明此參考架構。
- Tenancy
Oracle Autonomous Transaction Processing 是一種自主驅動、自主安全、自主修復的資料庫服務,已針對交易處理工作負載進行最佳化。您不需要設定或管理任何硬體,也不需要安裝任何軟體。Oracle Cloud Infrastructure 負責建立資料庫,以及備份、修補、升級和調整資料庫。
- 地區
Oracle Cloud Infrastructure 區域是一個本地化的地理區域,其中包含一或多個稱為可用性網域的資料中心。區域獨立於其他區域,而廣大的距離可以將其分開 (跨國家或大陸)。
- 區間
區間是 Oracle Cloud Infrastructure 租用戶內的跨區域邏輯分割區。您可以使用區間將資源組織在 Oracle Cloud 中、控制對資源的存取,以及設定使用配額。若要控制對指定區間中資源的存取,您可以定義指定可存取資源的人員及其可執行動作的原則。
- 可用性網域
可用性網域是區域內的獨立獨立資料中心。每個可用性網域中的實體資源會與其他可用性網域中的資源隔離,以提供容錯能力。可用性網域不會共用基礎架構 (例如電源或冷卻系統) 或內部可用性網域網路。因此,一個可用性網域的失敗不太可能影響區域中的其他可用性網域。
- 容錯域
容錯網域是可用性網域內的一組硬體和基礎架構。每個可用性網域都有三個具有獨立電源和硬體的容錯域。當您將資源分散到多個容錯域時,您的應用程式可以容忍容錯域內的實體伺服器故障、系統維護和電源故障。
- 虛擬雲端網路 (VCN) 和子網路
VCN 是您在 Oracle Cloud Infrastructure 區域中設定的可自訂軟體定義網路。與傳統資料中心網路一樣,VCN 可讓您完全控制您的網路環境。VCN 可以有多個非重疊的 CIDR 區塊,您可以在建立 VCN 之後變更。您可以將 VCN 區隔成子網路,此子網路可以設定區域範圍或可用性網域。每個子網路都是由連續的位址範圍組成,這些位址不會與 VCN 中的其他子網路重疊。您可以在建立子網路後變更其大小。子網路可以是公用或專用。
- 負載平衡器
Oracle Cloud Infrastructure Load Balancing 服務提供從單一進入點到後端多部伺服器的自動流量分配。負載平衡器可讓您存取不同的應用程式。
- 程式碼儲存區域
在 DevOps 服務中,您可以建立自己的專用程式碼儲存區域,或連線至外部程式碼儲存區域,例如 GitHub、GitLab 和 Bitbucket Cloud。
- 安全清單
您可以為每個子網路建立安全規則,以指定必須允許進出子網路的來源、目的地和流量類型。
- NAT 閘道
NAT 閘道可讓 VCN 中的專用資源存取網際網路上的主機,而不會對內送網際網路連線公開這些資源。
- 服務閘道
服務閘道可讓您從 VCN 存取其他服務,例如 Oracle Cloud Infrastructure Object Storage。從 VCN 到 Oracle 服務的流量會透過 Oracle 網路結構傳送,而一律不會周遊網際網路。
- 雲端保全
您可以使用 Oracle Cloud Guard 來監控和維護 Oracle Cloud Infrastructure 中資源的安全性。Cloud Guard 會使用偵測器處方來檢查資源是否有安全漏洞,以及監控操作員和使用者是否有危險活動。偵測到任何組態錯誤或不安全活動時,雲端保全會根據您可定義的回應器處方,建議採取更正動作並協助採取這些動作。
- 安全區域
安全區域會強制實行加密資料等原則,並防止對整個區間的網路進行公用存取,以確保 Oracle 的安全最佳做法。安全區域會與相同名稱的區間關聯,並且包括套用至區間及其子區間的安全區域原則或處方。您無法新增或移動標準區間至安全區域區間。
- 物件儲存
物件儲存可讓您快速存取任何內容類型的大量結構化與非結構化資料,包括資料庫備份、分析資料,以及豐富的內容 (例如影像和影片)。您可以安全地儲存資料,然後直接從網際網路或雲端平台內擷取資料。您可以無縫擴充儲存體,而不會發生任何效能或服務可靠性的降低。針對您需要快速、立即和經常存取的「熱」儲存,使用標準儲存。針對長時間保留且極少或極少存取的「冷」儲存,使用封存儲存。
- FastConnect
Oracle Cloud Infrastructure FastConnect 提供一個在您的資料中心與 Oracle Cloud Infrastructure 之間建立專用、專用連線的簡單方式。與網際網路型連線相比,FastConnect 提供更高的頻寬選項和更可靠的網路體驗。
- 本地對等互連閘道 (LPG)
LPG 可讓您將一個 VCN 與同一個區域中的另一個 VCN 對等。對等互連表示 VCN 使用私有 IP 位址進行通訊,而無需流量會周遊網際網路或透過內部部署網路進行路由。
- 自治式資料庫
Oracle Cloud Infrastructure 自主資料庫是完全託管的預先配置資料庫環境,可用於交易處理和資料倉儲工作負載。您不需要設定或管理任何硬體,也不需要安裝任何軟體。Oracle Cloud Infrastructure 負責建立資料庫,以及備份、修補、升級和調整資料庫。
- 自治式資料倉儲
Oracle Autonomous Data Warehouse 是一項自主驅動、自主防護、自主修復的資料庫服務,已針對資料倉儲工作負載最佳化。您不需要設定或管理任何硬體,也不需要安裝任何軟體。Oracle Cloud Infrastructure 負責建立資料庫,以及備份、修補、升級和調整資料庫。
- Autonomous Transaction Processing
Oracle Autonomous Transaction Processing 是一種自主驅動、自主安全、自主修復的資料庫服務,已針對交易處理工作負載進行最佳化。您不需要設定或管理任何硬體,也不需要安裝任何軟體。Oracle Cloud Infrastructure 負責建立資料庫,以及備份、修補、升級和調整資料庫。
- Exadata 資料庫系統
Exadata Cloud Service 可讓您在雲端運用 Exadata 的強大功能。您可以佈建彈性的 X8M 系統,讓您可以隨著需求成長,在系統中新增資料庫運算伺服器和儲存伺服器。X8M 系統提供 RoCE (RDMA over Converged Ethernet) 網路,可提供高頻寬和低延遲、持續性記憶體 (PMEM) 模組和智慧型 Exadata 軟體。您可以使用相當於四分之一機架 X8 系統的資源配置佈建 X8M 系統,然後在佈建之後隨時新增資料庫和儲存體伺服器。
建議
- VCN
建立 VCN 時,請根據您計畫附加到 VCN 子網路的資源數量,決定所需的 CIDR 區塊數量和每個區塊的大小。請使用標準專用 IP 位址空間內的 CIDR 區塊。
選取未與您要設定專用連線的任何其他網路 (在 Oracle Cloud Infrastructure、您的內部部署資料中心或其他雲端提供者) 重疊的 CIDR 區塊。
建立 VCN 之後,您可以變更、新增及移除其 CIDR 區塊。
當您設計子網路時,請考慮流量和安全需求。將特定層或角色中的所有資源附加至相同的子網路,作為安全界限。
使用區域子網路。
- 安全
使用 Oracle Cloud Guard 主動監控和維護 Oracle Cloud Infrastructure 中資源的安全性。Cloud Guard 會使用偵測器處方來檢查資源是否有安全漏洞,以及監控操作員和使用者是否有危險活動。偵測到任何組態錯誤或不安全活動時,雲端保全會根據您可定義的回應器處方,建議採取更正動作並協助採取這些動作。
對於需要最高安全性資源,Oracle 建議您使用安全區域。安全區域是與以最佳做法為基礎之 Oracle 定義的安全原則處方關聯的區間。例如,安全區域中的資源不得從公用網際網路存取,且必須使用客戶管理的金鑰來加密。當您在安全區域中建立及更新資源時,Oracle Cloud Infrastructure 會根據安全區域處方中的原則驗證作業,並拒絕違反任何原則的作業。
- 雲端保全
複製及自訂 Oracle 提供的預設處方,以建立自訂偵測器和回應器處方。這些處方可讓您指定產生警告的安全性違規類型,以及允許對其執行哪些動作。例如,您可以偵測可見性設為公用物件儲存的儲存桶。
在租用戶層級套用 Cloud Guard,以涵蓋最廣泛的範圍,並降低維護多個組態的管理負擔。
您也可以使用「受管理清單」功能,將特定組態套用至偵測器。
- 安全區域
複製及自訂 Oracle 提供的預設處方,以建立自訂偵測器和回應器處方。這些處方可讓您指定產生警告的安全性違規類型,以及允許對其執行哪些動作。例如,您可以偵測可見性設為公用物件儲存的儲存桶。
在租用戶層級套用 Cloud Guard,以涵蓋最廣泛的範圍,並降低維護多個組態的管理負擔。您也可以使用「受管理清單」功能,將特定組態套用至偵測器。
- 網路安全群組 (NSG)
您可以使用 NSG 定義一組適用於特定 VNIC 的傳入和傳出規則。建議您使用 NSG 而非安全列表,因為 NSG 可讓您將 VCN 的子網路架構和應用程式的安全需求分開。
您可以使用 NSG 定義一組適用於特定 VNIC 的傳入和傳出規則。建議您使用 NSG 而非安全列表,因為 NSG 可讓您將 VCN 的子網路架構和應用程式的安全需求分開。
- 負載平衡器頻寬
建立負載平衡器時,您可以選取提供固定頻寬的預先定義資源配置,或指定自訂 (彈性) 資源配置,以便在其中設定頻寬範圍,並讓服務根據流量模式自動調整頻寬。只要採用任一方式,您就可以在建立負載平衡器之後隨時變更資源配置。
部署
此參考架構的 Terraform 程式碼可在 Oracle Cloud Infrastructure Resource Manager 中作為範例堆疊使用。此範例 Terraform 堆疊部署 OCI 資料流程應用程式環境,以及 IAM 原則和 OCI 物件儲存的儲存桶 (不是第三方儲存)。依照預設,也會部署示範 Python Spark 應用程式。您也可以從 GitHub 下載程式碼,然後加以自訂以符合您的特定需求。
- 使用 Oracle Cloud Infrastructure Resource Manager 中的範例堆疊進行部署:
- 使用 GitHub 中的 Terraform 程式碼部署:
- 請前往 GitHub 。
- 複製或下載儲存區域至您的本機電腦。
- 遵循
README
文件中的指示。
除了 GitHub 上提供的 Terraform 程式碼之外,以下程式碼片段說明如何連線至 Amazon Web Services S3,以及如何查詢資料。
- 若要從 S3 連線及查詢資料,您必須包括
hadoop-aws.jar
和aws-java-sdk.jar
套裝軟體。您可以在pom.xml
檔案中參照這些套裝軟體,如下所示:<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-aws</artifactId> <version>2.9.2</version> <exclusions> <exclusion> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk</artifactId> <version>1.7.4</version> </dependency>
- 使用類似以下的程式碼連線至 Amazon Web Services S3。您必須提供存取金鑰和您的秘密金鑰。在下面的程式碼片段中,這些值分別以
ACCESS
和SECRET
變數表示:SparkSession spark = SparkSession.builder().master("local") .config("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") .config("spark.hadoop.fs.s3a.access.key", ACCESS) .config("spark.hadoop.fs.s3a.secret.key", SECRET) .config("fs.s3a.connection.ssl.enabled", "false") .getOrCreate();
- 使用類似下列的程式碼,使用 S3 位置和您指定的表格名稱來查詢資料。
Dataset<Row> ds = sqlContext.read().format("csv").option("header","true").load("<S3 Location>"); ds.createOrReplaceTempView("<Table Name>"); Dataset<Row> result_ds = sqlContext.sql("<SQL Query Using <Table Name>>");