在 Virtual Private Cloud (VPC) 中設定第一個叢集
虛擬私有雲
在您的虛擬私有雲(VPC)中建立一個 Red Hat® OpenShift® on IBM Cloud® 叢集。
- Red Hat OpenShift on IBM Cloud 提供您叢集基礎架構環境的所有 受管理供應項目的優點,同時使用在 Red Hat Enterprise Linux 上執行的 Red Hat OpenShift 工具及型錄,以進行應用程式部署。
- VPC 為您提供專用雲端環境的安全,同時具備公用雲端的動態可調整性。 VPC 使用的是下一個版本的 Red Hat OpenShift on IBM Cloud 基礎架構提供者,包含一群精選的第 2 版 API、CLI 和主控台功能。
- 本教學使用 ibmcloud CLI 指令在 VPC 中建立群集。 另外,您也可以使用開放原始碼且適用於企業的 Terraform 模組來部署 OpenShift VPC 基礎架構上的群集。 您可以在 Terraform IBM 模組註冊表中探索更多模組。
適用對象
本教學指南適用於首次在 VPC 運算環境中的「Red Hat OpenShift on IBM Cloud」中建立叢集的管理員。
目標
在教學課程中,您將在虛擬私有雲(VPC)中建立一個 Red Hat OpenShift on IBM Cloud 叢集。 然後,您可以存取內建 Red Hat OpenShift 元件,在 Red Hat OpenShift 專案中部署應用程式,並使用 VPC 負載平衡器公開應用程式,以便外部使用者可以存取服務。
你會得到什麼
在本教學中,您將建立以下資源。 如果您不想在完成指導教學之後保留這些資源,則有一些選用步驟可刪除這些資源。
- VPC 叢集
- 部署至叢集的簡式 Hello World 應用程式
- 用於公開應用程式的 VPC 負載平衡器
必要條件
請完成下列必要步驟,以設定許可權及指令行環境。
- 許可權
- 如果您是帳戶擁有者,您已具備建立叢集所需的權限,可繼續進行下一步。 否則,請請帳戶擁有者 設定 API 金鑰,並在 IBM Cloud 的 IAM 中授予您最低級別的使用者權限。
- 命令列工具
- 若要從命令列快速存取您的資源,請試試 IBM Cloud Shell。 否則,請完成下列步驟來設定本端指令行環境。
- 安裝 IBM Cloud CLI (
ibmcloud)、Kubernetes Service 外掛程式 (ibmcloud oc) 和 IBM Cloud Container Registry 外掛程式 (ibmcloud cr)。 - 安裝 Red Hat OpenShift(
oc)和 Kubernetes(kubectl)CLI。 - 若要使用 VPC,請安裝
infrastructure-service外掛程式。 用於執行指令的字首是ibmcloud is。
ibmcloud plugin install infrastructure-service ``` 4. 將 Kubernetes Service 外掛程式更新為最新版本。 ```sh {: pre} ibmcloud plugin update kubernetes-service ``` - 安裝 IBM Cloud CLI (
在 VPC 中建立叢集
建立一個 IBM Cloud 虛擬私有雲 (VPC) 環境。 接著,在 VPC 基礎架構上建立一個 Red Hat OpenShift on IBM Cloud 叢集。 如需 VPC 的相關資訊,請參閱 開始使用 Virtual Private Cloud。
-
登入您要在其中建立 VPC 環境的帳戶、資源群組及 IBM Cloud 地區。 VPC 必須設定在您欲建立叢集的同一多區域都會區內。 在本指導教學中,將在
us-south建立 VPC。 如需其他支援的地區,請參閱適用於 VPC 叢集的多區域都會。 如果您擁有聯合身分識別碼,請包含--sso選項。ibmcloud login -r us-south [-g <resource_group>] [--sso] -
為叢集建立 VPC。 如需相關資訊,請參閱有關在主控台或 CLI 中建立 VPC 的文件。
- 建立一個名為「
myvpc」的 VPC,並記下輸出中的 ID。 VPC 會為要在公用雲端中執行的工作負載提供隔離的環境。 可以將相同 VPC 用於多個叢集,例如如果計劃使不同的叢集管理需要相互通訊的不同微服務。 如果要分隔叢集(例如,針對不同部門的叢集),則可以為每個叢集建立一個 VPC。
ibmcloud is vpc-create myvpc ``` 2. 建立公用閘道,並記下輸出中的 **ID**。 在下一步中,您將公用閘道連接至 VPC 子網路,以便工作者節點可以在公用網路上進行通訊。 預設Red Hat OpenShift元件,例如 Web 控制台和OperatorHub,需要公共網路存取。 如果您跳過此步驟,則必須改為連接至 VPC 專用網路 (例如透過 VPN 連線),以存取 Red Hat OpenShift Web 主控台或使用 `kubectl` 指令存取叢集。 ```sh {: pre} ibmcloud is public-gateway-create gateway-us-south-1 <vpc_ID> us-south-1 ``` 3. 為 VPC 建立子網路,並記下其 **ID**。 建立 VPC 子網路時,請考慮下列資訊: * **區域**:叢集裡每個區域必須有一個 VPC 子網路。 可用的區域取決於您建立 VPC 的地區。 若要列出該區域中可用的區域,請執行 `ibmcloud is zones`。 * **IP 位址**:VPC 子網會為叢集中的工作節點和負載平衡服務提供私有 IP 位址,因此請務 [必建立一個擁有足夠 IP 位址的子網,](/docs/openshift?topic=openshift-vpc-subnets#vpc_basics_subnets) 例如 256 個。 您無法在事後變更 VPC 子網所擁有的 IP 位址數量。 * **公用閘道**: 包括您先前建立的公用閘道。 叢集中的每個區域都必須擁有一個公開閘道。 ```sh {: pre} ibmcloud is subnet-create mysubnet1 VPC_ID --zone us-south-1 --ipv4-address-count 256 --pgw GATEWAY_ID ``` 如果有多個區段,請針對每個區段重複這些步驟。 {: tip} - 建立一個名為「
-
建立標準 IBM Cloud Object Storage 實例,以備份叢集中的內部登錄。 請注意輸出中的實例 ID。
ibmcloud resource service-instance-create myvpc-cos cloud-object-storage standard global -
在子網路所在的區域的 VPC 中建立叢集。 以下指令將在達拉斯建立一個版本為 4.21 的叢集,其最低配置為 2 個工作節點,每個節點至少具備 4 個核心和 16 GB 記憶體,以便能部署預設的 Red Hat OpenShift 元件。 如需有關命令選項的更多資訊,請參閱
cluster create vpc-gen2CLI 參考文件。ibmcloud oc cluster create vpc-gen2 --name myvpc-cluster --zone us-south-1 --version 4.21_openshift --flavor bx2.4x16 --workers 2 [--operating-system REDHAT_8_64] --vpc-id VPC_ID --subnet-id VPC_SUBNET_ID --cos-instance COS_CRN --disable-outbound-traffic-protection -
列出叢集詳細資料。 檢閱叢集 State、檢查 Ingress Subdomain,並記下 Master URL。 叢集建立可能需要一點時間才能完成。 當叢集狀態顯示為「正常」後,叢集網路和 Ingress 元件還需要大約 10 分鐘,才能完成部署並更新您用於 Red Hat OpenShift 網頁控制台及其他路由的叢集網域。 在繼續之前,請先檢查 Ingress 子網域 是否遵循
<cluster_name>-<globally_unique_account_HASH>-0001.<region>.containers.appdomain.cloud型樣,以等待叢集備妥。ibmcloud oc cluster get --cluster myvpc-cluster -
透過設定叢集環境定義,以使用者身分新增至 Red Hat OpenShift 叢集。
ibmcloud oc cluster config --cluster myvpc-cluster --admin -
在瀏覽器中,導覽至 Master URL 的位址並附加
/console。 例如,https://c0.containers.cloud.ibm.com:23652/console。 如果時間允許,您可以探索 Red Hat OpenShift 網頁主控台的不同區域。 -
在 Red Hat OpenShift 的網頁控制台選單列中,點選您的個人檔案 IAM#user.name@email.com > 複製登入指令。 請顯示並將「
oc logintoken」指令複製到您的命令列中,以便透過 CLI 進行驗證。請將叢集主節點的 URL 網址儲存起來,以便稍後存取 Red Hat OpenShift 控制台。 在未來的階段作業中,可以跳過
cluster config步驟,而改為使用主控台複製登入指令。 -
透過檢查版本,驗證
oc指令是否針對您的叢集正常執行。oc version輸出範例
Client Version: v4.21.0 Kubernetes Version: v1.35.7.2若您無法執行需要管理員權限的操作(例如列出叢集中的所有工作節點或 Pod),請執行
ibmcloud oc cluster config --cluster myvpc-cluster --admin指令,下載叢集管理員的TLS憑證及權限檔案。
將應用程式部署至您的叢集
快速部署新的範例應用程式,它只適用於來自叢集內的要求。
-
為您的「Hello World」應用程式建立一個「Red Hat OpenShift」專案。
oc new-project hello-world -
從原始碼編譯範例應用程式。 透過
Red Hat OpenShiftnew-app指令,您可以指定遠端儲存庫中包含Dockerfile和應用程式程式碼的目錄,藉此建置您的映像檔。 指令會建置映像檔,將映像檔儲存在本端 Docker 登錄中,並建立應用程式部署配置 (dc) 及服務 (svc)。如需建立新應用程式的相關資訊,請參閱 Red Hat OpenShift 文件。oc new-app --name hello-world https://github.com/IBM/container-service-getting-started-wt --context-dir="Lab 1" -
驗證是否已建立範例 Hello World 應用程式元件。
- 列出 hello-world 服務並記下服務名稱。 到目前為止,您的應用程式只會接聽這些內部叢集 IP 位址上的資料流量。 在下一課,您將為服務建立負載平衡器,以便負載平衡器可以將外部資料流量要求轉遞至應用程式。
oc get svc -n hello-world ``` 輸出範例 ```sh {: screen} NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-world ClusterIP 172.21.xxx.xxx <none> 8080/TCP 31m ``` 2. 列出 Pod。 名稱中具有 `build` 的 Pod 是在新應用程式建置程序中**已完成**的工作。 確保 **hello-world** Pod 的狀態為 **Running**。 ```sh {: pre} oc get pods -n hello-world ``` 輸出範例 ```sh {: screen} NAME READY STATUS RESTARTS AGE hello-world-1-9cv7d 1/1 Running 0 30m hello-world-1-build 0/1 Completed 0 31m hello-world-1-deploy 0/1 Completed 0 31m ```
設定 VPC 負載平衡器以公開您的應用程式
設定一個 VPC 負載平衡器,讓您的應用程式能接收來自公共網路的外部請求。
當您在叢集中建立 Kubernetes LoadBalancer 服務時,系統會自動在叢集外的 VPC 中建立一個 VPC 負載平衡器。 VPC 負載平衡器是多區域負載平衡器,透過在工作者節點上自動開啟的專用 NodePort 來遞送應用程式的要求。 下圖說明了使用者如何透過 VPC 負載平衡器存取應用程式的服務,即使您的工作節點僅連接到私有子網。
-
在叢集裡建立 Kubernetes
LoadBalancer服務以公用方式公開 Hello World 應用程式。oc expose deployment/hello-world --type=LoadBalancer --name=hw-lb-svc --port=8080 --target-port=8080 -n hello-world輸出範例
service "hw-lb-svc" exposed進一步瞭解 expose 參數 參數 說明 expose將 Kubernetes 資源(例如部署)作為服務公開,以便使用者能透過 VPC 負載平衡器的主機名稱存取該資源。 dc/<hello-world-deployment>要使用此服務公開之資源的資源類型及名稱。 --name=<hello-world-service>服務的名稱。 --type=LoadBalancer要建立的服務類型。 在本課中,將建立 LoadBalancer服務。--port=<8080>服務於其上接聽外部網路資料流量的埠。 --target-port=<8080>您的應用程式於其上接聽的埠,且服務會將送入的網路資料流量導向該埠。 在此範例中, target-port與port相同,但您建立的其他應用程式可能使用不同的埠。-n <hello-world>您的部署所處的命名空間。 -
驗證 Kubernetes
LoadBalancer服務已在您的叢集裡順利建立。 當您建立服務時 KubernetesLoadBalancer,系統會自動為您建立一個 VPC 負載平衡器。 VPC 負載平衡器會為您的LoadBalancerKubernetes 服務指派一個主機名稱,您可在 CLI 輸出結果的 Ingress LoadBalancer 欄位中查看該名稱。 在 VPC 中,叢集裡的服務會獲指派主機名稱,因為服務的外部 IP 位址不穩定。 VPC 負載平衡器需要幾分鐘時間才能在 VPC 中進行佈建。 在 VPC 負載平衡器準備就緒之前,您無法透過其主機名稱存取 KubernetesLoadBalancer服務。oc describe service hw-lb-svc -n hello-worldCLI 輸出範例:
NAME: hw-lb-svc Namespace: default Labels: app=hello-world-deployment Annotations: <none> Selector: app=hello-world-deployment Type: LoadBalancer IP: 172.21.xxx.xxx LoadBalancer Ingress: 1234abcd-us-south.lb.appdomain.cloud Port: <unset> 8080/TCP TargetPort: 8080/TCP NodePort: <unset> 32040/TCP Endpoints: Session Affinity: None External Traffic Policy: Cluster Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal EnsuringLoadBalancer 1m service-controller Ensuring load balancer Normal EnsuredLoadBalancer 1m service-controller Ensured load balancer -
驗證 VPC 負載平衡器已在您的 VPC 裡順利建立。 在輸出中,驗證 VPC 負載平衡器的 佈建狀態 為
active,作業狀態 為online。VPC 負載平衡器的名稱格式為
kube-<cluster_ID>-<kubernetes_lb_service_UID>。 若要查看您的叢集 ID,請執行ibmcloud oc cluster get --cluster CLUSTER_NAME。 若要查看 KubernetesLoadBalancer服務 UID,請執行kubectl get svc hw-lb-svc -o yaml,並在輸出中尋找 metadata.uid 欄位。ibmcloud is load-balancers在以下範例的 CLI 輸出中,已為 Kubernetes
LoadBalancer服務建立了一個名為kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306的 VPC 負載平衡器:ID Name Family Subnets Is public Provision status Operating status Resource group r006-d044af9b-92bf-4047-8f77-a7b86efcb923 kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306 Application mysubnet-us-south-3 true active online default -
透過對您在步驟 2 中找到的 VPC 負載平衡器所指派 Kubernetes
LoadBalancer服務的主機名稱及埠進行 curing,將要求傳送至應用程式。 範例:curl 1234abcd-us-south.lb.appdomain.cloud:8080輸出範例
Hello world from hello-world-deployment-5fd7787c79-sl9hn! Your app is up and running in a cluster! -
可選步驟:若要清理本課程中建立的資源,您可以使用分配給各應用程式的標籤。
- 列出
hello-world項目中每個應用程式的所有資源。
oc get all -l app=hello-world -o name -n hello-world ``` 輸出範例 ```sh {: screen} pod/hello-world-1-dh2ff replicationcontroller/hello-world-1 service/hello-world deploymentconfig.apps.openshift.io/hello-world buildconfig.build.openshift.io/hello-world build.build.openshift.io/hello-world-1 imagestream.image.openshift.io/hello-world imagestream.image.openshift.io/node ``` 2. 刪除建立的所有資源。 ```sh {: pre} oc delete all -l app=hello-world -n hello-world ``` - 列出
下一步為何?
既然您已有了 VPC 叢集,接下來請進一步瞭解可執行的作業。
需要協助、有疑問或要提供有關 VPC 叢集的意見嗎? 嘗試在 Slack 頻道中張貼文章。