附註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱開始使用 Oracle Cloud Infrastructure Free Tier 。
- 它使用 Oracle Cloud Infrastructure 憑證、租用戶及區間的範例值。完成實驗室時,請將這些值取代為您雲端環境特有的值。
設定含有三個工作節點的 Oracle Cloud Infrastructure Container Engine for Kubernetes
簡介
在本教學課程中,我們將說明如何使用 Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) 設定由 Kubernetes 控制層和資料層 (節點集區) 組成的 Kubernetes 叢集。我們也會在 Kubernetes 平台上部署及刪除兩個範例應用程式,以證明其運作正常。本教學課程將針對未來的教學課程設定階段,深入瞭解 Kubernetes 中針對容器代管應用程式提供的網路服務。
OKE 部署模型範例如下:
-
範例 1:具有 Flannel CNI Plugin、Public Kubernetes API 端點、Private Worker 節點以及公用負載平衡器的叢集。
-
範例 2:具有 Flannel CNI Plugin、Private Kubernetes API 端點、Private Worker 節點以及公用負載平衡器的叢集。
-
範例 3:使用 OCI CNI Plugin、Public Kubernetes API 端點、Private Worker 節點以及公用負載平衡器的叢集。
-
範例 4:使用 OCI CNI Plugin、Private Kubernetes API 端點、Private Worker 節點以及公用負載平衡器的叢集。
如需我們可以選擇之不同 OKE 部署模型的詳細資訊,請參閱網路資源組態範例。
在本教學課程中,我們將導入範例 3 部署模型。
目標
- 我們將部署 Kubernetes 控制叢集和工作節點,這些節點在 Oracle Cloud Infrastructure (OCI) 內完全部署和設定。這就是我們所稱的 Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE)。我們將在兩個不同的命名空間中部署兩個範例應用程式,其中一個應用程式會在新的命名空間中使用 Helm 圖表進行部署。最後,我們將清除應用程式或 Pod。我們不會為 Kubernetes 操作的應用程式或 Pod 部署任何網路服務。
作業 1:建立新的 Kubernetes 叢集並驗證元件
-
按一下漢堡功能表。
- 按一下開發人員服務。
- 按一下 Kubernetes 叢集 (OKE) 。
-
按一下建立叢集。
- 選取快速建立。
- 按一下送出。
-
在建立叢集 (快速) 頁面中,輸入下列資訊。
- 輸入叢集名稱。
- 請選取一個區間。
- 選取 Kubernetes 版本。
- 選取要作為公用端點的 Kubernetes API 端點。
- 選取要管理的節點類型。
- 向下拉清單。
- 選取 Kubernetes Worker 節點作為專用工作者。
- 向下拉清單。
- 保留節點數目 (工作節點) 預設為 3 。
- 按下一步。
- 複查叢集參數。
- 向下拉清單。
- 複查節點集區參數。
- 向下拉清單。
- 請勿選取建立基本叢集核取方塊。
- 按一下建立叢集。
-
複查所建立之不同元件的狀態。
- 確定所有項目都有綠色檢查。
- 按一下關閉。
- 請複查狀態為 CREATING 。
- 向下拉清單。
-
複查叢集和節點集區建立狀態。正在建立 Kubernetes 控制叢集,稍後將會建立工作節點集區。
-
幾分鐘之後,Kubernetes 控制叢集便會順利建立。
-
現在將建立工作節點集區。
-
幾分鐘後,工作節點集區便會順利建立。
- 按一下節點集區。
- 請注意,集區中的工作節點仍在建立中。
- 按一下工作節點的 3 。
-
請注意,所有節點的狀態都為未就緒。
-
幾分鐘之後,他們就會就緒。
Kubernetes 控制叢集和工作節點已完全部署並在 Oracle Cloud Infrastructure (OCI) 內設定。這就是我們所稱的 Oracle Cloud Infrastructure Container Engine for Kubernetes。
作業 2:驗證 OCI 主控台中部署的 Kubernetes 叢集元件
使用 OKE 建立 Kubernetes 叢集時,系統會在 OCI 內建立部分資源,以支援此部署。
第一和最重要的資源是虛擬雲端網路 (VCN)。由於我們選擇了快速建立選項,因此已建立專用於 OKE 的新 VCN。
-
登入 OCI 主控台並瀏覽至網路、虛擬雲端網路 (VCN) ,您將會見到已建立的新 VCN。按一下 VCN。
您會在 VCN 中看到三個子網路,一個專用子網路和兩個公用子網路,以支援 OKE 部署。
-
驗證資源。
- 按一下 CIDR 區塊 / 前置碼即可複查 VCN 的 CIDR。
- 請注意,
10.0.0.0/16
是由 OCI 指定。
- 按一下路由表以複查路由表。
- 請注意,建立了兩個路由表:路由至專用子網路,然後路由至公用子網路。
- 按一下網際網路閘道,即可複查將使用公用子網路來提供網際網路連線的網際網路閘道。
- 請注意,只有一個網際網路閘道。
- 按一下安全清單即可複查「傳入」或「傳出」規則的安全清單,以保護子網路之間的連線。
- 請注意,有三個安全清單,一個用於 Kubernetes 工作節點連線保護,第二個用於 Kubernetes API 端點保護,第三個用於 Kubernetes 服務保護。
- 按一下 NAT 閘道即可複查將使用網際網路專用子網路提供網際網路連線的 NAT 閘道。
- 請注意,只有一個 NAT 閘道。
- 按一下服務閘道即可複查將提供特定 Oracle 服務專用存取的服務閘道,而不會將資料公開到網際網路閘道或 NAT 閘道。
- 請注意,只有一個服務閘道。
- 開啟 OCI 主控台,按一下漢堡功能表,然後瀏覽至運算、執行處理。
- 請注意,建立的三個執行處理將作為部署期間所指定的三個 Kubernetes 工作節點使用。
- 開啟 OCI 主控台,按一下漢堡功能表,然後瀏覽至 IP 管理、保留的公用 IP 。
- 請注意,有一個以
.166
為結尾的公用 IP 位址,保留給 Kubernetes 公用 API 端點使用。
如果我們把剛才收集的每個資訊放置在圖表中,則圖表的外觀如下圖所示。
-
具有部署 OKE 之組態明細的表格
-
VCN:
資源 名稱 VCN • 名稱:oke-vcn-quick-IH-OKE-CLUSTER-af593850a
• CIDR 區塊:10.0.0.0/16
• DNS 解析:已選取網際網路閘道 • 名稱:oke-igw-quick-IH-OKE-CLUSTER-af593850a NAT 閘道 • 名稱:oke-ngw-quick-IH-OKE-CLUSTER-af593850a 服務閘道 • 名稱:oke-sgw-quick-IH-OKE-CLUSTER-af593850a
• 服務:Oracle Services Network 中的所有區域服務DHCP 選項 • DNS 類型已設為網際網路和 VCN 解析器 -
子網路:
資源 範例 Kubernetes API 端點公用子網路 用途:含下列特性的 Kubernetes API 端點:
• 類型:區域
• CIDR 區塊:10.0.0.0/28
• 路由表:oke-public-routetable-IH-OKE-CLUSTER-af593850a
• 子網路存取:公用
• DNS 解析:選取的
• DHCP 選項:預設
• 安全清單:oke-k8sApiEndpoint-quick-IH-OKE-CLUSTER-af593850a工作節點的專用子網路 用途:含下列特性的工作節點:
• 類型:區域
• CIDR 區塊:10.0.10.0/24
• 路由表:N/A
• 子網路存取:專用
• DNS 解析:已選取
• DHCP 選項:預設
• 安全清單:oke-nodeseclist-quick-IH-OKE-CLUSTER-af593850aPod 的專用子網路 用途:含下列特性的 Pod:
• 類型:區域
• CIDR 區塊:10.96.0.0/16
• 路由表:oke-private-routetable-IH-OKE-CLUSTER-af593850a
• 子網路存取:專用
• DNS 解析:已選取
• DHCP 選項:預設
• 安全清單:N/A服務負載平衡器的公用子網路 用途:具備下列特性的負載平衡器:
• 類型:區域
• CIDR 區塊:10.0.20.0/24
• 路由表:oke-private-routetable-IH-OKE-CLUSTER-af593850a
• 子網路存取:公用
• DNS 解析:選取的
• DHCP 選項:預設
• 安全清單:oke-svclbseclist-quick-IH-OKE-CLUSTER-af593850a -
路由表格:
資源 範例 公用 Kubernetes API 端點子網路的路由表 用途:routetable-Kubernetes API 端點,其中定義的路由規則如下:
• 目的地 CIDR 區塊:0.0.0.0/0
• 目標類型:網際網路閘道
• 目標:oke-igw-quick-IH-OKE-CLUSTER-af593850a專用 Pod 子網路路由表 用途:routetable-pod,其中定義兩個路由規則如下:
• 流量至網際網路的規則:
▶ 目的地 CIDR 區塊:0.0.0.0/0
▶ 目標類型:NAT 閘道
▶ 目標:oke-ngw-quick-IH-OKE-CLUSTER-af593850a
• 流量至 OCI 服務的規則:
§ 目的地:Oracle Services Network 中的所有區域服務
§ 目標類型:服務閘道
◦ 目標:oke-sgw-quick-IH-OKE-CLUSTER-af593850a公用負載平衡器子網路的路由表 用途:routetable-serviceloadbalancers,其中定義一個路由規則如下:
• 目的地 CIDR 區塊:0.0.0.0/0
• 目標類型:網際網路閘道
• 目標:oke-igw-quick-IH-OKE-CLUSTER-af593850a
-
-
公用 Kubernetes API 端點子網路的安全清單規則
oke-k8sApiEndpoint-quick-IH-OKE-CLUSTER-af593850a
安全清單包含傳入和傳出規則,如下表所示。-
傳入規則:
無狀態 來源 IP 協定 來源連接埠範圍 目的地連接埠範圍 型態與代碼 Allows - 允許 描述 編號 0.0.0.0/0 TCP 全部 6443 連接埠的 TCP 流量:6443 外部存取 Kubernetes API 端點 編號 10.0.10.0/24 TCP 全部 6443 連接埠的 TCP 流量:6443 Kubernetes 工作者與 Kubernetes API 端點通訊 編號 10.0.10.0/24 TCP 全部 12250 連接埠的 TCP 流量:12250 控制平面通訊的 Kubernetes 工作者 編號 10.0.10.0/24 公司簡介 3, 4 ICMP 流量錯誤:3,4 無法連線目的地:需要分段,設為不分段 路徑尋找 -
傳出規則:
無狀態 目的地 IP 協定 來源連接埠範圍 目的地連接埠範圍 型態與代碼 Allows - 允許 描述 編號 Oracle Services Network 中的所有 AMS 服務 TCP 全部 443 以下連接埠的 TCP 流量:443 HTTPS 允許 Kubernetes 控制層與 OKE 通訊 編號 10.0.10.0/24 TCP 全部 全部 連接埠的 TCP 流量:全部 工作節點的所有流量 編號 10.0.10.0/24 公司簡介 3, 4 ICMP 流量錯誤:3,4 無法連線目的地:需要分段,設為不分段 路徑尋找
-
-
專用工作節點子網路的安全清單規則
oke-nodeseclist-quick-IH-OKE-CLUSTER-af593850a
安全清單包含傳入和傳出規則,如下表所示。傳入規則:
無狀態 來源 IP 協定 來源連接埠範圍 目的地連接埠範圍 型態與代碼 Allows - 允許 描述 編號 10.0.10.0/24 所有協定 所有連接埠的流量 允許一個工作節點上的 Pod 與其他工作節點上的 Pod 通訊 編號 10.0.0.0/28 公司簡介 3, 4 ICMP 流量錯誤:3,4 無法連線目的地:需要分段,設為不分段 路徑尋找 編號 10.0.0.0/28 TCP 全部 全部 連接埠的 TCP 流量:全部 從 Kubernetes 控制層存取 TCP 編號 0.0.0.0/0 TCP 全部 22 以下連接埠的 TCP 流量:22 SSH 遠端登入協定 工作節點的內送 SSH 流量 編號 10.0.20.0/24 TCP 全部 32291 連接埠的 TCP 流量:32291 編號 10.0.20.0/24 TCP 全部 10256 連接埠的 TCP 流量:10256 編號 10.0.20.0/24 TCP 全部 31265 連接埠的 TCP 流量:31265 傳出規則:
無狀態 目的地 IP 協定 來源連接埠範圍 目的地連接埠範圍 型態與代碼 Allows - 允許 描述 編號 10.0.10.0/24 所有協定 所有連接埠的流量 允許一個工作節點上的 Pod 與其他工作節點上的 Pod 通訊 編號 10.0.0.0/28 TCP 全部 6443 連接埠的 TCP 流量:6443 存取 Kubernetes API 端點 編號 10.0.0.0/28 TCP 全部 12250 連接埠的 TCP 流量:12250 控制平面通訊的 Kubernetes 工作者 編號 10.0.0.0/28 公司簡介 3, 4 ICMP 流量錯誤:3,4 無法連線目的地:需要分段,設為不分段 路徑尋找 編號 Oracle Services Network 中的所有 AMS 服務 TCP 全部 443 以下連接埠的 TCP 流量:443 HTTPS 允許節點與 OKE 通訊,以確保正確的啟動與持續運作 編號 0.0.0.0/0 公司簡介 3, 4 ICMP 流量錯誤:3,4 無法連線目的地:需要分段,設為不分段 從 Kubernetes 控制層存取 ICMP 編號 0.0.0.0/0 所有協定 所有連接埠的流量 職工節點存取網際網路 -
公用負載平衡器子網路的安全清單規則
oke-svclbseclist-quick-IH-OKE-CLUSTER-af593850a
安全清單包含傳入和傳出規則,如下表所示。-
傳入規則:
無狀態 來源 IP 協定 來源連接埠範圍 目的地連接埠範圍 型態與代碼 Allows - 允許 描述 編號 0.0.0.0/0 TCP 全部 80 下列連接埠的 TCP 流量:80 -
傳出規則:
無狀態 目的地 IP 協定 來源連接埠範圍 目的地連接埠範圍 型態與代碼 Allows - 允許 描述 編號 10.0.10.0/24 TCP 全部 32291 連接埠的 TCP 流量:32291 編號 10.0.10.0/24 TCP 全部 10256 連接埠的 TCP 流量:10256 編號 10.0.10.0/24 TCP 全部 31265 連接埠的 TCP 流量:31265
-
工作 3:使用 CLI 驗證 Kubernetes 叢集正在執行中
-
開啟 OCI 主控台,按一下漢堡功能表,然後瀏覽至開發人員服務、Kubernetes 叢集 (OKE) 。按一下在「任務 1」中建立的 Kubernetes 叢集。
- 向下拉清單。
- 按一下快速入門。
-
按一下存取叢集。
- 選取 Cloud Shell 存取。
- 按一下複製即可複製命令,以允許存取 Kubernetes 叢集。
- 按一下啟動 Cloud Shell 。
下圖顯示如何使用 OCI Cloud Shell 在 OKE 叢集上執行管理連線。
-
OCI Cloud Shell 將啟動。
有些資訊訊息會顯示背景中所發生的情況。
在此情況下,可以讓 OCI Cloud Shell 在不同的 CPU 架構上執行。
-
按一下關閉以關閉此資訊訊息。
-
我們已準備好使用 OCI Cloud Shell 存取 Kubernetes 叢集。
-
貼上在此工作上複製的命令。
-
請執行下列命令以取得 Kubernetes 叢集的相關資訊。
kubectl cluster-info
-
請執行下列命令來取得工作節點的相關資訊。
kubectl get nodes
-
請執行下列命令,以取得工作節點的詳細資訊。
kubectl get nodes -o wide
-
執行下列指令以清除畫面,並從新畫面開始。
clear
- 請注意,已清除先前的輸出,但捲動時仍可存取。
- 按一下最小化圖示,即可將 OCI Cloud Shell 視窗最小化。
-
按一下關閉,關閉存取您的叢集視窗。
此連線主要用於使用 OCI Cloud Shell 在 OKE 叢集上執行管理。
工作 4:使用 kubectl 部署範例 Nginx 應用程式
-
執行下列命令。
- 記下命令以取得 Kubernetes 版本。
- 記下建置範例應用程式的命令。
- 按一下回復即可回復 OCI Cloud Shell 視窗。
-
請執行下列命令以取得 Kubernetes 版本。
kubectl version
-
執行下列命令以驗證目前部署的 Pod 或應用程式。
kubectl get pods
請注意,找不到任何資源。
-
執行下列命令以部署新的範例應用程式。
kubectl create -f https://k8s.io/examples/application/deployment.yaml
-
執行下列命令以驗證目前部署的 Pod 或應用程式。
kubectl get pods
-
請注意,Pod 處於 RUNNING 狀態。這表示我們剛部署的應用程式正在執行中。
-
執行下列命令以取得 IP 位址以存取應用程式。
kubectl get deploy,svc
-
請注意,新部署的應用程式沒有任何指定的 IP 位址,而且只有 Kubernetes 叢集有以內部 IP 位址連附的叢集 IP 服務。
-
執行下列指令,以特別查看新部署應用程式的附加 (網路) 服務。
kubectl get svc ngnix
-
請注意,部署或附加的 Nginx 應用程式沒有 (網路) 服務。因此,我們無法從其他應用程式存取應用程式,或使用 Web 瀏覽器存取 Nginx Web 伺服器中的網頁。我們將在另一個教學課程中討論此問題。
工作 5:使用 Helm Chart 部署範例 MySQL 應用程式
-
Helm Chart 是一個套裝程式,其中包含將應用程式部署至 Kubernetes 叢集所需的所有必要資源。執行下列指令:
-
新增 MySQL 資料庫的 Bitnami 儲存區域。
helm repo add bitnami https://charts.bitnami.com/bitnami
-
在 Kubernetes 工作節點上部署 MySQL 資料庫,並建立新的命名空間 mysql。
helm install mysql bitnami/mysql -–namespace mysql --create-namespace
-
-
若要取得部署的應用程式,請執行下列命令。此命令只會顯示目前 (預設) 命名空間中已建置的應用程式。
kubectl get pods
-
請注意,目前 (預設) 命名空間中只會顯示 Nginx 應用程式。此命令現在將顯示整個叢集 (所有命名空間) 所部署的應用程式。
kubectl get pods -A -w
- 請注意,Nginx 應用程式正在預設命名空間中執行。
- 請注意,MySQL 應用程式正在新的 mysql 命名空間中執行。
工作 6:清除 Pod 和命名空間
我們已在預設命名空間 (Nginx) 中部署應用程式,並在新命名空間 (MySQL) 中部署另一個應用程式。使用 Helm Chart,讓我們清理環境,以便隨時視需要啟動全新環境。
-
使用下列命令取得所有工作節點 (叢集範圍)。
kubectl get nodes -o wide
-
使用下列命令取得目前 (預設) 命名空間中所有執行中的 Pod。
kubectl get pods -o wide
-
執行下列命令以取得所有命名空間。
kubectl get namespaces
-
執行以下指令來特別取得目前 (預設) 命名空間中所有正在執行的 Pod。
kubectl get pods --namespace=default
-
請執行下列命令,特別在 MySQL 命名空間中取得所有執行中的 Pod。
kubectl get pods --namespace=mysql
-
執行下列命令以刪除預設命名空間中的所有部署或 Pod。
kubectl delete --all deployments --namespace=default
-
使用下列命令來驗證部署或 Pod 是否已刪除。
kubectl get pods --namespace=default
-
使用下列命令特別取得 MySQL 命名空間中所有執行中的 Pod。只要驗證是否仍然存在即可。
kubectl get pods --namespace=mysql
-
執行下列命令以刪除所有部署或 Pod,以及完整的 MySQL 命名空間。
kubectl delete namespace mysql
-
您可以使用此命令收集所有命名空間,並確認是否已刪除 MySQL 命名空間。
kubectl get namespaces
認可
- 作者 - Iwan Hoogendoorn (OCI 網路專家)
其他學習資源
瀏覽 docs.oracle.com/learn 的其他實驗室,或前往 Oracle Learning YouTube 頻道存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Set up Oracle Cloud Infrastructure Container Engine for Kubernetes with Three Worker Nodes
F95679-01
March 2024