附註:
- 此教學課程需要存取 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 外掛程式、專用 Kubernetes API 端點、專用工作節點及公用負載平衡器的叢集。
-
範例 3:使用 OCI CNI Plugin、公用 Kubernetes API 端點、專用工作節點以及公用負載平衡器的叢集。
-
範例 4:使用 OCI CNI Plugin、專用 Kubernetes API 端點、專用工作節點以及公用負載平衡器的叢集。
如需可選擇之不同 OKE 部署模型的詳細資訊,請參閱範例網路資源組態。
在本教學課程中,我們將導入範例 3 部署模型。
目標
- 我們將部署 Kubernetes 控制叢集和工作節點,這些節點已完全部署並設定在 Oracle Cloud Infrastructure (OCI) 中。這是我們所稱的 Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE)。我們將在兩個不同的命名空間中部署兩個範例應用程式,其中一個應用程式會在新的命名空間中使用 Helm Chart 部署。最後,我們將清理應用程式或 Pod。我們不會為 Kubernetes 作業的應用系統或 Pod 部署任何網路服務。
作業 1:建立新的 Kubernetes 叢集並驗證元件
-
按一下漢堡功能表。

- 按一下開發人員服務。
- 按一下 Kubernetes 叢集 (OKE) 。

-
按一下建立叢集。

- 選取快速建立 (Quick create) 。
- 按一下送出。

-
在建立叢集 (快速) 頁面中,輸入下列資訊。
- 輸入叢集名稱。
- 選取一個區間。
- 選取 Kubernetes 版本。
- 選取要作為公用端點的 Kubernetes API 端點。
- 選取要受管理的節點類型。
- 向下捲動。

- 選取要作為專用工作節點的 Kubernetes 工作節點。
- 向下捲動。

- 將 Node 計數 (工作節點) 保持為預設 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 服務閘道 • 名稱:ome-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-pods,其兩個路由規則定義如下:
• 網際網路流量規則:
目的地 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 ICMP 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 ICMP 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 ICMP 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 ICMP 3, 4 ICMP 流量錯誤: 3, 4 無法連線目的地: 需要分段, 但設為不分段 路徑探索 編號 Oracle Services Network 中的所有 AMS 服務 TCP 全部 443 以下連接埠的 TCP 流量:443 HTTPS 允許節點與 OKE 通訊,以確保啟動正確且持續運作 編號 0.0.0.0/0 ICMP 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:驗證 Kubernetes 叢集正在使用 CLI 執行中
-
開啟 OCI 主控台,按一下漢堡功能表並導覽至 Developer Services 、Kubernetes Clusters (OKE) 。按一下在任務 1 中建立的 Kubernetes 叢集。

- 向下捲動。
- 按一下快速入門。

-
按一下存取叢集。

- 選取 Cloud Shell Access 。
- 按一下複製即可複製命令,以允許存取 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-02