使用 Terraform 建立 Oracle Cloud Infrastructure Kubernetes Engine 叢集
簡介
在本教學課程中,我們將示範如何使用 Terraform 建立 Oracle Cloud Infrastructure Kubernetes Engine (OKE) 叢集,並使用 Oracle Resource Manager 管理您的 Terraform 程式碼。此方法可讓您在部署中實行基礎架構即程式碼 (IaC) 原則、增強自動化、一致性和重複性。
Oracle Cloud Infrastructure Kubernetes Engine (OKE)
Kubernetes (K8s) 是一個開放原始碼平台,可自動部署、調整規模及管理容器化應用程式。最初由 Google 開發,目前由 CNCF 維護,這是大規模執行雲端原生應用程式的業界標準。
OKE 是 Oracle Cloud Infrastructure (OCI) 上完全託管的服務,可簡化 Kubernetes 叢集的部署與管理。它將控制層和工作者節點管理自動化、與 OCI 的網路、儲存和安全服務整合,並支援無狀態和有狀態的工作負載。OKE 節點會組織成節點集區,可輕鬆調整及管理,確保容器化應用程式的高可用性和最佳資源使用率。OKE 採用標準 Kubernetes 模型,其中包含兩個主要元件 (受管理的控制層和客戶管理的資料層 )。
-
控制層:由 Oracle 完全管理,其元件會處理叢集的協調與管理:
kube-apiserver
:與叢集進行通訊的中央 API。etcd
:儲存叢集的組態和狀態。kube-scheduler
:將 Pod 指定給適當的節點。kube-controller-manager
:透過管理控制器,確保所需的狀態。cloud-controller-manager
(CCM):與 OCI 整合以管理 OCI 負載平衡器和 OCI 區塊磁碟區等雲端資源。
-
資料層:部署在客戶租用戶中,並執行實際的工作負載。它由下列項目組成:
Worker Nodes
:執行 Pod 的運算執行處理 (由客戶佈建)。kubelet
:管理 Pod 執行的節點代理程式。kube-proxy
:處理網路規則,以及將流量路由至 Pod 或從 Pod。
如需詳細資訊,請參閱管理具有不同容量類型的 OCI Kubernetes 引擎,並解決先佔式節點的常見問題。
架構
下列參考架構將用於示範 OKE 叢集的建立。
此圖說明部署在多個容錯域 (FD) 之間之單一 OCI 區域內的彈性 OKE 架構。此設定使用虛擬雲端網路 (VCN) 搭配三個不同的子網路:代管網際網路閘道的公用子網路 (LBSubnet),使用 OCI 負載平衡器分配內送流量,使用兩個專用子網路,一個用於 OKE 工作節點 (NodeSubnet),另一個用於 API 伺服器 (APISubnet)。工作者節點分佈在單一可用性網域 (AD) 內的三個 FD 中,將失敗風險降到最低。叢集會順暢地連線至 OCI Container Registry,以進行容器映像檔儲存及擷取。
OCI 主控台提供直接的 Point-&-Click 方法。若要使用此叢集,請瀏覽至 Kubernetes 叢集 UI。選取快速建立 (Quick-Create) 。為叢集命名。選取專用 API 端點。使用所需的資源配置、映像檔和數目設定受管理工作節點。OCI 主控台選項會設定增強型 OKE 叢集。它使用 OCI_VCN_IP_NATIVE
CNI,這是預設值。它也為工作者節點和 API 端點提供專用的專用子網路。此外,它會為負載平衡器建立公用子網路。不過,對於大型或可重複的部署而言,此手動方法相當耗時且無法擴展
為了克服手動部署的限制,本教學課程提供簡化的平面式 Terraform 解決方案,以三個步驟將整個 OKE 叢集設定自動化:
- 建立網路資源。
- OKE 叢集佈建。
- 建立職工節點集區。
本教學課程著重於部署核心 OKE 叢集基礎架構。應用程式層級自訂項目和工作負載特定組態超出其範圍。為了簡化佈建,我們包含了可自動執行 Terraform 命令的 Bash 命令檔。這些指令碼是專為與三相 Jenkins 管線順暢整合而設計,讓 One-Click
自動部署整個 OKE 環境。
您將瞭解如何使用 Terraform CLI 和 Oracle Resource Manager 自動建立網路資源 (VCN、閘道、子網路)、OKE 叢集及其節點集區。我們也將示範如何使用 Bash、OCI CLI 和 Jenkins 擴充此自動化功能,以減少手動作業並確保提供一致的基礎架構。
目標
- 使用 Terraform for Infrastructure as Code 建立 OKE 叢集,並描述透過 Oracle Resource Manager 管理部署的程序。如此一來,我們還將介紹基礎的 OKE 概念。
必備條件
-
不建議在生產環境使用 OCI 租用戶根管理員角色進行初始設定。
- 具有必要網路和 OKE OCI IAM 原則的非管理員 OCI 使用者。如需詳細資訊,請參閱叢集建立與部署的原則組態。
-
熟悉基礎架構即程式碼原則和 Terraform (社群版本) ,包括:
- Oracle Cloud Shell
- Oracle 指令行介面 (CLI) ,
- Oracle 資源管理程式,
- Visual Studio 程式碼
建立 OKE 叢集的 Terraform 自動化
建立 VCN (OKE-VCN
) 和 OKE 叢集有兩個自動化選項:平面模組或利用子模組的標準模組。後者方法不在本文的範圍內,但它為大型、複雜的部署提供更佳的組織和擴展性,促進程式碼重複使用性和維護性,使其適用於生產環境。我們將採用簡便的扁平化方法,適用於開發使用案例、測試案例或一次性 VCN 部署示範。如需詳細資訊,請參閱 terraform-oci-oke 。
工作 1:使用 Terraform 部署 OKE 資源 (社群版本)
在執行 Terraform 命令以使用 Terraform CLI 規劃及部署基礎架構之前,請先從本機機器或透過 OCI Cloud Shell,以您的環境特定詳細資訊更新提供的 Terraform 組態。
您可以在此處下載完整的 Terraform 原始碼:oke_terraform_for_beginners.zip 。我們正在使用平面目錄結構。解壓縮套裝程式時,請確定所有 Terraform 樣板原始程式碼 (.tf、.tfvars、ssh 金鑰等) 都位於根目錄中。
-
若要指示 Terraform 建立任何主要資源 (
VCN
、OKE_Cluser
或Node_Pool
),您必須將terraform.tfvars
中的適當旗標 (is_vcn_created
、is_k8cluster_created
或is_pool_created
) 設為true
。然後在其各自的程式碼區塊中指定網路、OKE 叢集及節點集區的其餘參數。-
從將
is_vcn_created
設為true
開始,指示 Terraform 建立新的 VCN,或將false
設為使用現有的 VCN (您必須提供其 OCID)。如果建立新的 VCN,請務必指定 CIDR 區塊變數vcn_cidr_block
。 -
提供以下三個子網路的 CIDR 區塊。
- K8 API 端點專用子網路 (
k8apiendpoint_private_subnet_cidr_block
)。 - 工作節點專用子網路 (
workernodes_private_subnet_cidr_block
)。 - 服務負載平衡器公用子網路 (
serviceloadbalancers_public_subnet_cidr_block
)。
- K8 API 端點專用子網路 (
-
設定
is_k8cluster_created
旗標,告知 Terraform 建立 Kubernetes 叢集,並使用compartment_id
指定目標區間。如果需要工作節點集區,請相應地設定is_nodepool_created
旗標。 -
OKE 支援兩種 CNI 類型:VCN 原生 (預設),其中每個 Pod 會取得自己的 IP 以獲得更佳的效能和完整的 OCI 網路整合,而 Flannel-Overlay 則是 Pod 共用節點 VNIC 的較簡單覆疊網路。在此設定中,
cni_type
會設為OCI_VCN_IP_NATIVE
,以符合 OCI 主控台中快速建立工作流程所建立的預設叢集組態。 -
OKE 提供兩種叢集類型:基本和增強。為了獲得更大的彈性,請將
cluster_type
設為ENHANCED_CLUSTER
。- 增強型叢集提供進階功能,例如附加元件管理、更高的安全性,以及更好的生命週期控制
- 基本叢集提供具有基本功能的直接 Kubernetes 環境
-
節點週期組態
node_cycle_config
定義如何在節點集區中建立、取代或更新工作節點,尤其是在更新、升級或自動調整事件期間。組態定義下列屬性:is_node_cycling_enabled (bool):
在更新或升級期間啟用節點的自動循環 (取代)。設為 true 以啟用安全節點輪換。maximum_surge (int)
:可在更新期間新增的額外節點數目上限 (超過所需的數目)。它允許在刪除舊節點之前建立新節點,但不停機。maximum_unavailable (int)
:更新期間不可使用的節點數目上限。用於控制滾動更新期間的中斷。cycle_modes (list)
(選擇性):提供節點循環的動作順序清單。可用的週期模式為:REPLACE_BOOT_VOLUME
:更新開機磁碟區而不終止節點。REPLACE_NODES
:使用更新的組態來協調、清空、終止及重新建立節點。
-
-
僅在必要時修改預設值。此套件包含環境設定、執行步驟的明確指示,以及與網路和安全相關的重要概念。
以下是
terraform.tfvars
檔案中 Terraform 組態的範例,您必須自訂該組態才能在環境中執行。########################################################################## # Terraform module: OKE Cluster with Flat Network. # # # # Author: Mahamat H. Guiagoussou and Payal Sharma # # # # Copyright (c) 2025 Oracle # ########################################################################## # Working Compartment compartment_id = "WORKING_COMPARTMENT" #------------------------------------------------------------------------# # Step 2.1: Create Flat Network # #------------------------------------------------------------------------# is_vcn_created = false # Terraform creates VCN if set to 'true' # Display Name Prefix & Host Name Prefix display_name_prefix = "DISPLAY_NAME_PREFIX" # e.g.: "ACME-DEV" host_name_prefix = "HOST_PREFIX" # e.g.: "myvcn" # VCN & Subnets CIDR Blocks vcn_cidr_block = "VCN_CIDR_BLOCK" k8apiendpoint_private_subnet_cidr_block = "ENDPOINT_CIDR_BLOCK" workernodes_private_subnet_cidr_block = "WRKRNODE_CIDR_BLOCK" serviceloadbalancers_public_subnet_cidr_block = "LB_CIDR_BLOCK" #------------------------------------------------------------------------# # Step 2.2: Create the OKE Cluster # #------------------------------------------------------------------------# is_k8cluster_created = false # Terraform creates OKE cluster if 'true' control_plane_kubernetes_version = "K8_VERSION" # e.g.: "v1.32.1" cni_type = "OCI_VCN_IP_NATIVE" # FLANNEL_OVERLAY control_plane_is_public = false # Set the below flag to true for 'OCI_VCN_IP_NATIVE'. This is needed to # provision a dedicated subnet for pods when using the VCN-Native CNI. create_pod_network_subnet = true # NO subnet 'false' image_signing_enabled = false # image not signed cluster_type = "ENHANCED_CLUSTER" # or "BASIC_CLUSTER" #------------------------------------------------------------------------# # Step 2.3: Create a Node Pool for the cluster # #------------------------------------------------------------------------# is_nodepool_created = false # Terraform creates Node_Pool if 'true' worker_nodes_kubernetes_version = "WORKER_NODE_VERSION" # e.g.: "v1.32.1" # Detailed configuration for the Node Pool node_pools = { node_pool_one = { name = "WORKER_NODE_POOL_DISPLAY_NAME" # e.g. "my_worker_node_pool", # https://docs.oracle.com/en-us/iaas/Content/ContEng/Reference/contengimagesshapes.htm shape = "WORKER_NODE_SHAPE_NAME" # e.g.: "VM.Standard.E4.Flex", shape_config = { ocpus = "WORKER_NODE_NB_OF_OCPUS" # e.g.: 1 memory = "WORKER_NODE_MEMOR_SIZE" # e.g.: 16 }, boot_volume_size = "WORKER_BOOT_VOLUME_SIZE" # e.g.: 50 # Oracle maintains a list of supported OKE worker node images here: # https://docs.oracle.com/en-us/iaas/images/oke-worker-node-oracle-linux-8x/ # https://docs.oracle.com/en-us/iaas/Content/ContEng/Reference/contengimagesshapes.htm#images__oke-images image = "WORKER_NODE_OKE_IMAGE" # e.g.: ocid1.image.oc1.iad...." node_labels = { hello = "Demo"}, # Run command "oci iam availability-domain list" to list region's ADs. # No need to set Fault Domains, they are selected automatically availability_domains = ["YOUR_AD_NAME"] # e.g. "GqIF:US-ASHBURN-AD-1", number_of_nodes = "NB_OF_NODES_IN_THE_POOL" # e.g. 1, pv_in_transit_encryption = false, node_cycle_config = { node_cycling_enabled = false maximum_surge = 1 maximum_unavailable = 0 }, ssh_key = "YOUR_SSH_KEY_PATH" # e.g.: "worker_node_ssh_key.pub" } }
-
執行下列 Terraform 命令。
terraform init terraform validate terraform plan terraform apply
成功執行
terraform apply
之後,您的 OKE 叢集將會建立在您的工作區間和區域中,並設定下列組態:ENHANCED_CLUSTER
(含OCI_VCN_IP_NATIVE
cni_type
) 以及指定的 OKE 版本。- 工作節點和 API 端點都有專用的專用子網路。
- 負載平衡器存取叢集服務的公用子網路。
- 使用您想要的資源配置、映像檔以及節點數目設定的受管理節點集區。
-
請前往 OCI 主控台確認您的叢集部署和組態。
下列影像說明成功執行 Terraform 以及產生的日誌。
-
完成測試後,請執行
terraform destroy
來清除您的環境。此命令會移除在部署期間建立的所有 OKE 資源,並協助防止租用戶使用不必要的資源。
工作 2:使用 Jenkins CI/CD 管線將 Terraform CLI 執行自動化
在此任務中,我們會將先前詳細的步驟摘要成四個主要階段,專為 Jenkins 稍後協調而設計。此聚總管線是透過一組執行 Terraform CLI 命令的 Bash 命令檔來實行。
作業 2.1:建立網路資源
下列命令檔會執行一系列的多個 Terraform 命令來建立網路資源。
-
Bash 指令碼:
create_network_resources.sh
。#!/bin/bash # Change directory to your working directory cd ~/oke_terraform_for_beginners # Run terraform init (at least once) /usr/local/bin/terraform init # Create the OKE Cluster Network resources (VCN, Gateways, RT, K8 API Endpoint Subnet, Worker Node Subnet and LB subnet) /usr/local/bin/terraform apply \ --var is_vcn_created=true \ # Create OKE Cluster Networking Resources --auto-approve
對於其餘的命令檔,請確定已經執行 terraform init
,且您正在從工作目錄執行命令。例如,~/oke_terraform_for_beginners
。
作業 2.2:建立 OKE 叢集
此程序檔會執行 terraform apply
指令來建立 OKE 叢集。
-
Bash 指令碼:
create_oke_cluster.sh
。#!/bin/bash ..... # Create OKE Cluster (auto-approve - not advised for production) /usr/local/bin/terraform apply \ --var is_vcn_created=true \ # Use the created network --var is_k8cluster_created=false \ # Create a new OKE cluster --auto-approve
作業 2.3。建立 OKE 工作節點集區
下列命令檔會執行 terraform apply
命令,為 OKE 叢集建立工作節點集區。
-
Bash 指令碼:
create_worker_node_pool.sh
#!/bin/bash # Create Worker Node Pool (auto-approve - not advised for production) /usr/local/bin/terraform apply \ --var is_vcn_created=true \ # Use the created network --var is_k8cluster_created=true \ # For the existing OKE cluster --var is_nodepool_created=true \ # Create new Worker Node Pool --auto-approve
作業 2.4:毀棄所有資源
此程序檔會執行 destroy
指令,清除所有 OKE 叢集資源 (網路資源、OKE 叢集及工作節點集區)。
-
Bash 指令碼:
destroy_all_cluster_resources.sh
。#!/bin/bash # Run terraform destroy (for testing purposes only, not for production) /usr/local/bin/terraform destroy --auto-approve
我們已自動化 Jenkins 管線的端對端流程,並將其合併成四個 Jenkins 組建工作 (任務 2.1、2.2、2.3)。此聚總的管線是透過執行 Terraform CLI 命令的 Bash 命令檔執行。下方影像顯示前三項工作的一鍵自動化;簡單來說,不包含 destroy
步驟。
作業 3:使用 Oracle 資源管理程式協調 OKE 部署
Oracle 資源管理程式流程 (不滿意):
下圖說明「Oracle 資源管理程式程式碼管理程式」的七個步驟:
- 來源組態:定義 IaC 組態的來源位置,例如 OCI 中的區間、OCI 物件儲存的儲存桶、Zip 檔案、Bitbucket 或 GitHub。
- Terraform 範本:基礎架構組態是使用範本檔案中的 HashiCorp Terraform 來定義。
- Oracle Resource Manager: OCI Terraform as a Service 方案採用 Terraform 範本作為輸入,並管理基礎架構佈建流程。
- 建立堆疊:Oracle Resource Manager 會使用樣板來建立堆疊,此堆疊是 OCI 資源的集合。
- 計畫:在進行任何變更之前,「Oracle 資源管理程式」會產生一個計畫,其中概述將對基礎架構進行啟動設定或修改的動作。
- 套用:根據計畫,Oracle Resource Manager 會套用組態,並在 OCI 內佈建指定的資源。
- 毀棄:您也可以使用「Oracle 資源管理程式」毀棄 (取消啟動設定) 或永久清除堆疊先前建立的資源。
作業 3.1:來源組態:定義 Oracle 資源管理程式堆疊
若要使用 Oracle Resource Manager 部署 OKE 叢集,請先下載方便開始使用的模組:oke_terraform_for_beginners_orm.zip
。我們正在使用平面目錄結構。解壓縮套裝程式時,請確定所有 Terraform 樣板原始程式碼 (.tf) 都位於根目錄中。
此模組版本已預先為 Oracle Resource Manager 設定;terraform.tfvars
已經移除,所有變數均以 variables.tf
中的 "generic" 預留位置值 (例如 "REPLACE_WITH_YOUR_OWN_VARIABLE_VALUE") 設定。
建立 stack
之前,請先使用您的區域更新 variables.tf
、網路 CIDR 和旗標,以控制 VCN、OKE 叢集和節點集區的建立。
OKE 叢集使用 VCN 原生 CNI (OCI_VCN_IP_NATIVE
) 作為 Pod 網路,因此請確定已啟用 create_pod_network_subnet
旗標來定義您的 Pod 子網路 CIDR。
在 Oracle Resource Manager UI 中設定 stack
時,您可以選取下列項目來控制核心 OKE 資源的建立:
- VCN:選取
is_vcn_created
。 - OKE 叢集:選取
is_k8cluster_created
。 - OKE 節點集區:選取
is_nodepool_created
。
作業 3.2:建立 Oracle 資源管理程式堆疊
在建立 stack
時,選取提供的 Terraform 範本,然後直接在主控台內設定必要的變數。Oracle Resource Manager 會自動偵測 Terraform 檔案中定義的輸入變數,並以易於編輯的形式呈現這些變數。在此階段,您需要提供環境特定詳細資訊,例如您的租用戶 OCID、區間 OCID 以及其他必要值。
下列影像說明 Oracle Cloud 主控台中的 stack
建立和變數組態處理作業。
作業 3.3:執行套用工作
為求簡化,我們將略過 Plan
步驟,因為在「Oracle 資源管理程式」中執行 Apply
會自動執行該步驟。透過啟動 Apply
工作,Oracle Resource Manager 會使用上一個 Source Configuration
步驟中定義的組態來佈建 OCI 內指定的 OKE 資源。
下列影像說明成功的 stack Apply
工作執行以及產生的日誌。
作業 3.4:執行毀棄工作
活動或測試完成後,您可以在「Oracle 資源管理程式」中執行 Destroy
工作來清除環境。此動作會指示 Oracle Resource Manager 取消啟動設定 (永久清除) 先前建立為堆疊一部分的所有基礎架構資源,包括 OKE 叢集、節點集區、網路元件以及任何相關服務。執行 Destroy
可確保完全移除未使用的資源,協助您避免不必要的成本,並維持乾淨的 OCI 租用戶。
接下來的步驟
使用 Terraform 佈建 OKE 叢集,提供一致、可重複且自動化的方法來管理 Oracle Cloud Infrastructure (OCI) 上的 Kubernetes 基礎架構。透過基礎架構即程式碼 (IaC),團隊可以協調叢集的建立、實施最佳實務,並將 CI/CD 工作流程整合到其部署流程中。Oracle Resource Manager 透過簡化 Terraform 作業、管理狀態和實現 OCI 內的協作來增強這一點。本教程作為一個新手的介紹,在我們即將推出的進階指南中,我們將涵蓋可定制模塊、生產級自動化、模組化架構模式和完整的 CI/CD 整合。保持關注,以獲得更可擴展、安全且符合企業級需求的大規模管理 Kubernetes 方法。
相關連結
確認
- Authors - Payal Sharma (資深常駐雲端架構師) 的 Mahamat Guiagoussou
其他學習資源
在 docs.oracle.com/learn 上探索其他實驗室,或在 Oracle Learning YouTube 頻道上存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Create Oracle Cloud Infrastructure Kubernetes Engine Cluster using Terraform
G38271-01
Copyright ©2025, Oracle and/or its affiliates.